{
  "cells": [
    {
      "cell_type": "markdown",
      "id": "d1f57cfc-27a2-41a8-a3c0-2f41fb7c41ec",
      "metadata": {
        "id": "d1f57cfc-27a2-41a8-a3c0-2f41fb7c41ec"
      },
      "source": [
        "### Import necessary libraries\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 23,
      "id": "a60c429b-838b-4e60-83d4-b4e8a4ac3d21",
      "metadata": {
        "id": "a60c429b-838b-4e60-83d4-b4e8a4ac3d21"
      },
      "outputs": [],
      "source": [
        "import pandas as pd\n",
        "import numpy as np\n",
        "from sklearn.model_selection import train_test_split\n",
        "from sklearn.preprocessing import StandardScaler, LabelEncoder\n",
        "from sklearn.linear_model import LogisticRegression\n",
        "from sklearn.tree import DecisionTreeClassifier\n",
        "from sklearn.ensemble import RandomForestClassifier\n",
        "from sklearn.svm import SVC\n",
        "from sklearn.naive_bayes import GaussianNB\n",
        "from sklearn.neighbors import KNeighborsClassifier\n",
        "from sklearn.metrics import confusion_matrix, accuracy_score, precision_score, recall_score, f1_score, classification_report\n",
        "import numpy as np\n",
        "import matplotlib.pyplot as plt\n",
        "import seaborn as sns\n",
        "from sklearn.model_selection import GridSearchCV\n",
        "from sklearn.linear_model import LinearRegression\n",
        "from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score\n",
        "from sklearn.preprocessing import StandardScaler\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "a368819e-ca42-4f5e-ab95-f7bcc72e59eb",
      "metadata": {
        "id": "a368819e-ca42-4f5e-ab95-f7bcc72e59eb"
      },
      "source": [
        "### Reading dataset"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "id": "341f44ee-96f9-4901-93c4-51ba1eed83c8",
      "metadata": {
        "id": "341f44ee-96f9-4901-93c4-51ba1eed83c8"
      },
      "outputs": [],
      "source": [
        "data = pd.read_csv('/content/kidney_disease_clean_final.csv')"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 4,
      "id": "1d06a66f-0982-425c-970e-fe3cada811ac",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 235
        },
        "id": "1d06a66f-0982-425c-970e-fe3cada811ac",
        "outputId": "cf1cb967-7d94-4cd3-9cb1-2fedf9f3f194"
      },
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "    age    bp     sg   al   su  pc  pcc  ba         bgr    bu  ...  hemo  pcv  \\\n",
              "0  48.0  80.0  1.020  1.0  0.0   1    0   0  121.000000  36.0  ...  15.4   32   \n",
              "1   7.0  50.0  1.020  4.0  0.0   1    0   0  147.943503  18.0  ...  11.3   26   \n",
              "2  62.0  80.0  1.010  2.0  3.0   1    0   0  423.000000  53.0  ...   9.6   19   \n",
              "3  48.0  70.0  1.005  4.0  0.0   0    1   0  117.000000  56.0  ...  11.2   20   \n",
              "4  51.0  80.0  1.010  2.0  0.0   1    0   0  106.000000  26.0  ...  11.6   23   \n",
              "\n",
              "   wc  htn  dm  cad  appet  pe  ane  classification  \n",
              "0  72    1   4    1      0   0    0               0  \n",
              "1  56    0   3    1      0   0    0               0  \n",
              "2  70    0   4    1      1   0    1               0  \n",
              "3  62    1   3    1      1   1    1               0  \n",
              "4  68    0   3    1      0   0    0               0  \n",
              "\n",
              "[5 rows x 23 columns]"
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-be78aaaa-cbb6-4d4c-bb30-8b167864a945\" class=\"colab-df-container\">\n",
              "    <div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>age</th>\n",
              "      <th>bp</th>\n",
              "      <th>sg</th>\n",
              "      <th>al</th>\n",
              "      <th>su</th>\n",
              "      <th>pc</th>\n",
              "      <th>pcc</th>\n",
              "      <th>ba</th>\n",
              "      <th>bgr</th>\n",
              "      <th>bu</th>\n",
              "      <th>...</th>\n",
              "      <th>hemo</th>\n",
              "      <th>pcv</th>\n",
              "      <th>wc</th>\n",
              "      <th>htn</th>\n",
              "      <th>dm</th>\n",
              "      <th>cad</th>\n",
              "      <th>appet</th>\n",
              "      <th>pe</th>\n",
              "      <th>ane</th>\n",
              "      <th>classification</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>48.0</td>\n",
              "      <td>80.0</td>\n",
              "      <td>1.020</td>\n",
              "      <td>1.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>121.000000</td>\n",
              "      <td>36.0</td>\n",
              "      <td>...</td>\n",
              "      <td>15.4</td>\n",
              "      <td>32</td>\n",
              "      <td>72</td>\n",
              "      <td>1</td>\n",
              "      <td>4</td>\n",
              "      <td>1</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>7.0</td>\n",
              "      <td>50.0</td>\n",
              "      <td>1.020</td>\n",
              "      <td>4.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>147.943503</td>\n",
              "      <td>18.0</td>\n",
              "      <td>...</td>\n",
              "      <td>11.3</td>\n",
              "      <td>26</td>\n",
              "      <td>56</td>\n",
              "      <td>0</td>\n",
              "      <td>3</td>\n",
              "      <td>1</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>62.0</td>\n",
              "      <td>80.0</td>\n",
              "      <td>1.010</td>\n",
              "      <td>2.0</td>\n",
              "      <td>3.0</td>\n",
              "      <td>1</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>423.000000</td>\n",
              "      <td>53.0</td>\n",
              "      <td>...</td>\n",
              "      <td>9.6</td>\n",
              "      <td>19</td>\n",
              "      <td>70</td>\n",
              "      <td>0</td>\n",
              "      <td>4</td>\n",
              "      <td>1</td>\n",
              "      <td>1</td>\n",
              "      <td>0</td>\n",
              "      <td>1</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>48.0</td>\n",
              "      <td>70.0</td>\n",
              "      <td>1.005</td>\n",
              "      <td>4.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0</td>\n",
              "      <td>1</td>\n",
              "      <td>0</td>\n",
              "      <td>117.000000</td>\n",
              "      <td>56.0</td>\n",
              "      <td>...</td>\n",
              "      <td>11.2</td>\n",
              "      <td>20</td>\n",
              "      <td>62</td>\n",
              "      <td>1</td>\n",
              "      <td>3</td>\n",
              "      <td>1</td>\n",
              "      <td>1</td>\n",
              "      <td>1</td>\n",
              "      <td>1</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>51.0</td>\n",
              "      <td>80.0</td>\n",
              "      <td>1.010</td>\n",
              "      <td>2.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>1</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>106.000000</td>\n",
              "      <td>26.0</td>\n",
              "      <td>...</td>\n",
              "      <td>11.6</td>\n",
              "      <td>23</td>\n",
              "      <td>68</td>\n",
              "      <td>0</td>\n",
              "      <td>3</td>\n",
              "      <td>1</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "<p>5 rows × 23 columns</p>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-be78aaaa-cbb6-4d4c-bb30-8b167864a945')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-be78aaaa-cbb6-4d4c-bb30-8b167864a945 button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-be78aaaa-cbb6-4d4c-bb30-8b167864a945');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "<div id=\"df-76d8413e-54ba-4059-9000-1ef33d2e60ae\">\n",
              "  <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-76d8413e-54ba-4059-9000-1ef33d2e60ae')\"\n",
              "            title=\"Suggest charts\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "  </button>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "      --bg-color: #E8F0FE;\n",
              "      --fill-color: #1967D2;\n",
              "      --hover-bg-color: #E2EBFA;\n",
              "      --hover-fill-color: #174EA6;\n",
              "      --disabled-fill-color: #AAA;\n",
              "      --disabled-bg-color: #DDD;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "      --bg-color: #3B4455;\n",
              "      --fill-color: #D2E3FC;\n",
              "      --hover-bg-color: #434B5C;\n",
              "      --hover-fill-color: #FFFFFF;\n",
              "      --disabled-bg-color: #3B4455;\n",
              "      --disabled-fill-color: #666;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart {\n",
              "    background-color: var(--bg-color);\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: var(--fill-color);\n",
              "    height: 32px;\n",
              "    padding: 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: var(--hover-bg-color);\n",
              "    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: var(--button-hover-fill-color);\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart-complete:disabled,\n",
              "  .colab-df-quickchart-complete:disabled:hover {\n",
              "    background-color: var(--disabled-bg-color);\n",
              "    fill: var(--disabled-fill-color);\n",
              "    box-shadow: none;\n",
              "  }\n",
              "\n",
              "  .colab-df-spinner {\n",
              "    border: 2px solid var(--fill-color);\n",
              "    border-color: transparent;\n",
              "    border-bottom-color: var(--fill-color);\n",
              "    animation:\n",
              "      spin 1s steps(1) infinite;\n",
              "  }\n",
              "\n",
              "  @keyframes spin {\n",
              "    0% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "      border-left-color: var(--fill-color);\n",
              "    }\n",
              "    20% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    30% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    40% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    60% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    80% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "    90% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "  }\n",
              "</style>\n",
              "\n",
              "  <script>\n",
              "    async function quickchart(key) {\n",
              "      const quickchartButtonEl =\n",
              "        document.querySelector('#' + key + ' button');\n",
              "      quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n",
              "      quickchartButtonEl.classList.add('colab-df-spinner');\n",
              "      try {\n",
              "        const charts = await google.colab.kernel.invokeFunction(\n",
              "            'suggestCharts', [key], {});\n",
              "      } catch (error) {\n",
              "        console.error('Error during call to suggestCharts:', error);\n",
              "      }\n",
              "      quickchartButtonEl.classList.remove('colab-df-spinner');\n",
              "      quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
              "    }\n",
              "    (() => {\n",
              "      let quickchartButtonEl =\n",
              "        document.querySelector('#df-76d8413e-54ba-4059-9000-1ef33d2e60ae button');\n",
              "      quickchartButtonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "    })();\n",
              "  </script>\n",
              "</div>\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "variable_name": "data"
            }
          },
          "metadata": {},
          "execution_count": 4
        }
      ],
      "source": [
        "data.head()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 5,
      "id": "e7f7ce93-64f2-4ce5-805e-843ed3d55ab4",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 178
        },
        "id": "e7f7ce93-64f2-4ce5-805e-843ed3d55ab4",
        "outputId": "8244a743-77ed-40d8-c710-ab94026c9a07"
      },
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "classification\n",
              "0    248\n",
              "1    150\n",
              "Name: count, dtype: int64"
            ],
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>count</th>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>classification</th>\n",
              "      <th></th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>248</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>150</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div><br><label><b>dtype:</b> int64</label>"
            ]
          },
          "metadata": {},
          "execution_count": 5
        }
      ],
      "source": [
        "data['classification'].value_counts()"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "e06821f3-8877-4ad3-b006-06eb6571b653",
      "metadata": {
        "id": "e06821f3-8877-4ad3-b006-06eb6571b653"
      },
      "source": [
        "### Convert categorical features to numerical data."
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 6,
      "id": "bbaa1d2e-a00b-4853-bbfd-60d6f7216c71",
      "metadata": {
        "id": "bbaa1d2e-a00b-4853-bbfd-60d6f7216c71"
      },
      "outputs": [],
      "source": [
        "label_encoders = {}\n",
        "for column in data.select_dtypes(include=['object']).columns:\n",
        "    le = LabelEncoder()\n",
        "    data[column] = le.fit_transform(data[column])\n",
        "    label_encoders[column] = le"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "d22713cb-73ae-46c0-a90f-23e0f7c509f1",
      "metadata": {
        "id": "d22713cb-73ae-46c0-a90f-23e0f7c509f1"
      },
      "source": [
        "### Define features and target variable"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 7,
      "id": "655e7f28-8dab-461c-8da2-1eddeb221c81",
      "metadata": {
        "id": "655e7f28-8dab-461c-8da2-1eddeb221c81"
      },
      "outputs": [],
      "source": [
        "X = data.drop('classification', axis=1).values  # Replace 'classification' with your target column\n",
        "y = data['classification'].values"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "cbc22356-dfd5-47af-9735-3913699260d6",
      "metadata": {
        "id": "cbc22356-dfd5-47af-9735-3913699260d6"
      },
      "source": [
        "### Splitting data"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 8,
      "id": "1a8fc652-d15b-435a-bf5a-5f0af95e7912",
      "metadata": {
        "id": "1a8fc652-d15b-435a-bf5a-5f0af95e7912"
      },
      "outputs": [],
      "source": [
        "# Split data into training and testing sets\n",
        "X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.30, random_state=42, stratify=y)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "c21787a7-8099-4022-8dac-970662d14a36",
      "metadata": {
        "id": "c21787a7-8099-4022-8dac-970662d14a36"
      },
      "source": [
        "### Evaluation models"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 9,
      "id": "f4e6f576-d0c9-49cf-a820-edd1b4b81aa3",
      "metadata": {
        "id": "f4e6f576-d0c9-49cf-a820-edd1b4b81aa3"
      },
      "outputs": [],
      "source": [
        "def evaluate_model(model_name, y_true, y_pred):\n",
        "\n",
        "    # Calculate metrics\n",
        "    accuracy = accuracy_score(y_true, y_pred)\n",
        "    precision = precision_score(y_true, y_pred, average='weighted')\n",
        "    recall = recall_score(y_true, y_pred, average='weighted')\n",
        "    f1 = f1_score(y_true, y_pred, average='weighted')\n",
        "    cm = confusion_matrix(y_true, y_pred)\n",
        "\n",
        "    # Create a report\n",
        "    report = classification_report(y_true, y_pred)\n",
        "\n",
        "\n",
        "\n",
        "    # Output results\n",
        "    metrics = {\n",
        "        'Model Name': model_name,\n",
        "        'Accuracy': accuracy,\n",
        "        'Precision': precision,\n",
        "        'Recall': recall,\n",
        "        'F1 Score': f1,\n",
        "\n",
        "        'Classification Report': report\n",
        "    }\n",
        "\n",
        "       # Plot Confusion Matrix\n",
        "    plt.figure(figsize=(4, 4))\n",
        "    sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', cbar=False,\n",
        "                xticklabels=np.unique(y_true), yticklabels=np.unique(y_true))\n",
        "    plt.title(f'Confusion Matrix for {model_name}')\n",
        "    plt.xlabel('Predicted Label')\n",
        "    plt.ylabel('True Label')\n",
        "    plt.show()\n",
        "\n",
        "    return metrics\n",
        "\n",
        "\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "372c8452-7a55-4f2d-abb1-ceb259182621",
      "metadata": {
        "id": "372c8452-7a55-4f2d-abb1-ceb259182621"
      },
      "source": [
        "### Random Forest Classifier"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 19,
      "id": "82a76980-d7f8-47f5-856d-1a26f0cc86e7",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 722
        },
        "id": "82a76980-d7f8-47f5-856d-1a26f0cc86e7",
        "outputId": "79fc9ee3-da26-4828-cb55-13d2acda7cbf"
      },
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 400x400 with 1 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Model Name: \n",
            "RandomForestClassifier\n",
            "Accuracy: 0.9833\n",
            "Precision: 0.9833\n",
            "Recall: 0.9833\n",
            "F1 Score: 0.9833\n",
            "              precision    recall  f1-score   support\n",
            "\n",
            "           0       0.99      0.99      0.99        75\n",
            "           1       0.98      0.98      0.98        45\n",
            "\n",
            "    accuracy                           0.98       120\n",
            "   macro avg       0.98      0.98      0.98       120\n",
            "weighted avg       0.98      0.98      0.98       120\n",
            "\n",
            "\n",
            "Best hyperparameters found by GridSearchCV:\n",
            "{'max_depth': None, 'min_samples_leaf': 1, 'min_samples_split': 2, 'n_estimators': 100}\n"
          ]
        }
      ],
      "source": [
        "# Define the Random Forest Classifier\n",
        "rf_classifier = RandomForestClassifier(random_state=42)\n",
        "# Define the hyperparameters for grid search\n",
        "param_grid = {\n",
        "    'n_estimators': [100, 200, 300],\n",
        "    'max_depth': [None, 10, 20, 30],\n",
        "    'min_samples_split': [2, 5, 10],\n",
        "    'min_samples_leaf': [1, 2, 4]\n",
        "}\n",
        "# Initialize GridSearchCV\n",
        "grid_search = GridSearchCV(estimator=rf_classifier, param_grid=param_grid, cv=5, scoring='accuracy',n_jobs=-1)\n",
        "# Fit the grid search to the data\n",
        "grid_search.fit(X_train, y_train)\n",
        "# Get the best estimator from grid search\n",
        "best_rf_classifier = grid_search.best_estimator_\n",
        "# Make predictions using the best model\n",
        "y_pred = best_rf_classifier.predict(X_test)\n",
        "# Evaluate the model\n",
        "evaluation_results = evaluate_model('RandomForestClassifier', y_test, y_pred)\n",
        "# Print the evaluation results\n",
        "for key, value in evaluation_results.items():\n",
        "    if key == 'Classification Report':\n",
        "        print(value) # Print report separately for better readability\n",
        "    else:\n",
        "     print(f\"{key}: {value:.4f}\" if isinstance(value, float) else f\"{key}: \\n{value}\")\n",
        "\n",
        "\n",
        "# Print the best parameters found by grid search\n",
        "print(\"\\nBest hyperparameters found by GridSearchCV:\")\n",
        "print(grid_search.best_params_)\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "ec0a8208-ba26-4388-85df-50236763a4fc",
      "metadata": {
        "id": "ec0a8208-ba26-4388-85df-50236763a4fc"
      },
      "source": [
        "### LogisticRegression"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 20,
      "id": "5061fb12-44da-4f41-877c-6296e760f1f2",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 861
        },
        "id": "5061fb12-44da-4f41-877c-6296e760f1f2",
        "outputId": "26eb81b6-bb94-49c5-f908-e051c01b21a6"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "/usr/local/lib/python3.11/dist-packages/sklearn/linear_model/_logistic.py:465: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
            "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
            "\n",
            "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
            "    https://scikit-learn.org/stable/modules/preprocessing.html\n",
            "Please also refer to the documentation for alternative solver options:\n",
            "    https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
            "  n_iter_i = _check_optimize_result(\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 400x400 with 1 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Model Name: \n",
            "LogisticRegression\n",
            "Accuracy: 0.9500\n",
            "Precision: 0.9500\n",
            "Recall: 0.9500\n",
            "F1 Score: 0.9500\n",
            "              precision    recall  f1-score   support\n",
            "\n",
            "           0       0.96      0.96      0.96        75\n",
            "           1       0.93      0.93      0.93        45\n",
            "\n",
            "    accuracy                           0.95       120\n",
            "   macro avg       0.95      0.95      0.95       120\n",
            "weighted avg       0.95      0.95      0.95       120\n",
            "\n",
            "\n",
            "Best hyperparameters found by GridSearchCV:\n",
            "{'C': 0.1, 'max_iter': 300, 'solver': 'lbfgs'}\n"
          ]
        }
      ],
      "source": [
        "# Define the Logistic Regression model\n",
        "LR = LogisticRegression(random_state=42)\n",
        "# Define the hyperparameters for grid search\n",
        "param_grid = {\n",
        "'C': [0.01, 0.1, 1, 10], # Regularization strength\n",
        "'solver': ['liblinear', 'lbfgs'], # Solver type\n",
        "'max_iter': [100, 200, 300] # Maximum iterations for convergence\n",
        "}\n",
        "# Initialize GridSearchCV\n",
        "grid_search = GridSearchCV(estimator=LR, param_grid=param_grid, cv=5, scoring='accuracy',n_jobs=-1)\n",
        "# Fit the grid search to the data\n",
        "grid_search.fit(X_train, y_train)\n",
        "# Get the best estimator from grid search\n",
        "best_LR = grid_search.best_estimator_\n",
        "# Make predictions using the best model\n",
        "y_pred = best_LR.predict(X_test)\n",
        "# Evaluate the model\n",
        "evaluation_results = evaluate_model('LogisticRegression', y_test, y_pred)\n",
        "# Print the evaluation results\n",
        "for key, value in evaluation_results.items():\n",
        "    if key == 'Classification Report':\n",
        "        print(value) # Print report separately for better readability\n",
        "    else:\n",
        "        print(f\"{key}: {value:.4f}\" if isinstance(value, float) else f\"{key}: \\n{value}\")\n",
        "# Print the best hyperparameters found by grid search\n",
        "print(\"\\nBest hyperparameters found by GridSearchCV:\")\n",
        "print(grid_search.best_params_)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "e6f85cd2-14e0-4e66-8d3e-08475f46ed18",
      "metadata": {
        "id": "e6f85cd2-14e0-4e66-8d3e-08475f46ed18"
      },
      "source": [
        "### DecisionTreeClassifier"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 12,
      "id": "660e86cb-ddc6-435b-bb1c-5f664764ad6b",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 670
        },
        "id": "660e86cb-ddc6-435b-bb1c-5f664764ad6b",
        "outputId": "b568a7b4-f0cf-46ee-cadb-cf15bea42bb7"
      },
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 400x400 with 1 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Model Name: \n",
            "DecisionTreeClassifier\n",
            "Accuracy: 0.9500\n",
            "Precision: 0.9513\n",
            "Recall: 0.9500\n",
            "F1 Score: 0.9495\n",
            "              precision    recall  f1-score   support\n",
            "\n",
            "           0       0.94      0.99      0.96        75\n",
            "           1       0.98      0.89      0.93        45\n",
            "\n",
            "    accuracy                           0.95       120\n",
            "   macro avg       0.96      0.94      0.95       120\n",
            "weighted avg       0.95      0.95      0.95       120\n",
            "\n"
          ]
        }
      ],
      "source": [
        "DT = DecisionTreeClassifier()\n",
        "# Train the model\n",
        "DT.fit(X_train, y_train)\n",
        "# Make predictions\n",
        "y_pred = DT.predict(X_test)\n",
        "# Evaluate the model\n",
        "evaluation_results = evaluate_model('DecisionTreeClassifier', y_test, y_pred)\n",
        "\n",
        "# Print the evaluation results\n",
        "for key, value in evaluation_results.items():\n",
        "    if key == 'Classification Report':\n",
        "        print(value)  # Print report separately for better readability\n",
        "    else:\n",
        "        print(f\"{key}: {value:.4f}\" if isinstance(value, float) else f\"{key}: \\n{value}\")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "818d3036-de96-4087-abf8-c0d2d821296f",
      "metadata": {
        "id": "818d3036-de96-4087-abf8-c0d2d821296f"
      },
      "source": [
        "### Support Vector Machine"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 13,
      "id": "ac0295cb-6f56-4c9e-a625-c11dbc84fbed",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 670
        },
        "id": "ac0295cb-6f56-4c9e-a625-c11dbc84fbed",
        "outputId": "1dcf3f0c-c107-4fb3-a5b9-a67cd59e1511"
      },
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 400x400 with 1 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Model Name: \n",
            "Support Vector Machine\n",
            "Accuracy: 0.8500\n",
            "Precision: 0.8661\n",
            "Recall: 0.8500\n",
            "F1 Score: 0.8521\n",
            "              precision    recall  f1-score   support\n",
            "\n",
            "           0       0.94      0.81      0.87        75\n",
            "           1       0.75      0.91      0.82        45\n",
            "\n",
            "    accuracy                           0.85       120\n",
            "   macro avg       0.84      0.86      0.85       120\n",
            "weighted avg       0.87      0.85      0.85       120\n",
            "\n"
          ]
        }
      ],
      "source": [
        "SVM = SVC()\n",
        "# Train the model\n",
        "SVM.fit(X_train, y_train)\n",
        "# Make predictions\n",
        "y_pred = SVM.predict(X_test)\n",
        "# Evaluate the model\n",
        "evaluation_results = evaluate_model('Support Vector Machine', y_test, y_pred)\n",
        "\n",
        "# Print the evaluation results\n",
        "for key, value in evaluation_results.items():\n",
        "    if key == 'Classification Report':\n",
        "        print(value)  # Print report separately for better readability\n",
        "    else:\n",
        "        print(f\"{key}: {value:.4f}\" if isinstance(value, float) else f\"{key}: \\n{value}\")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "c8a9c9fc-4736-4fcf-92ec-3602e5ebe636",
      "metadata": {
        "id": "c8a9c9fc-4736-4fcf-92ec-3602e5ebe636"
      },
      "source": [
        "### GaussianNB"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 14,
      "id": "99387a79-7968-43c7-a759-ca5d936d85d3",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 670
        },
        "id": "99387a79-7968-43c7-a759-ca5d936d85d3",
        "outputId": "bfdece86-e55a-4e3e-f4de-e3fbb295f791"
      },
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 400x400 with 1 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Model Name: \n",
            "Support Vector Machine\n",
            "Accuracy: 0.9167\n",
            "Precision: 0.9231\n",
            "Recall: 0.9167\n",
            "F1 Score: 0.9175\n",
            "              precision    recall  f1-score   support\n",
            "\n",
            "           0       0.97      0.89      0.93        75\n",
            "           1       0.84      0.96      0.90        45\n",
            "\n",
            "    accuracy                           0.92       120\n",
            "   macro avg       0.91      0.92      0.91       120\n",
            "weighted avg       0.92      0.92      0.92       120\n",
            "\n"
          ]
        }
      ],
      "source": [
        "gnb = GaussianNB()\n",
        "# Train the model\n",
        "gnb.fit(X_train, y_train)\n",
        "# Make predictions\n",
        "y_pred = gnb.predict(X_test)\n",
        "# Evaluate the model\n",
        "evaluation_results = evaluate_model('Support Vector Machine', y_test, y_pred)\n",
        "\n",
        "# Print the evaluation results\n",
        "for key, value in evaluation_results.items():\n",
        "    if key == 'Classification Report':\n",
        "        print(value)  # Print report separately for better readability\n",
        "    else:\n",
        "        print(f\"{key}: {value:.4f}\" if isinstance(value, float) else f\"{key}: \\n{value}\")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 15,
      "id": "a78d1236-19d2-4498-99aa-dde75f2de949",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 203
        },
        "id": "a78d1236-19d2-4498-99aa-dde75f2de949",
        "outputId": "8a418a3e-efcf-4a0c-ddee-b837dbde9eb1"
      },
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "sklearn.neighbors._classification.KNeighborsClassifier"
            ],
            "text/html": [
              "<div style=\"max-width:800px; border: 1px solid var(--colab-border-color);\"><style>\n",
              "      pre.function-repr-contents {\n",
              "        overflow-x: auto;\n",
              "        padding: 8px 12px;\n",
              "        max-height: 500px;\n",
              "      }\n",
              "\n",
              "      pre.function-repr-contents.function-repr-contents-collapsed {\n",
              "        cursor: pointer;\n",
              "        max-height: 100px;\n",
              "      }\n",
              "    </style>\n",
              "    <pre style=\"white-space: initial; background:\n",
              "         var(--colab-secondary-surface-color); padding: 8px 12px;\n",
              "         border-bottom: 1px solid var(--colab-border-color);\"><b>sklearn.neighbors._classification.KNeighborsClassifier</b><br/>def __init__(n_neighbors=5, *, weights=&#x27;uniform&#x27;, algorithm=&#x27;auto&#x27;, leaf_size=30, p=2, metric=&#x27;minkowski&#x27;, metric_params=None, n_jobs=None)</pre><pre class=\"function-repr-contents function-repr-contents-collapsed\" style=\"\"><a class=\"filepath\" style=\"display:none\" href=\"#\">/usr/local/lib/python3.11/dist-packages/sklearn/neighbors/_classification.py</a>Classifier implementing the k-nearest neighbors vote.\n",
              "\n",
              "Read more in the :ref:`User Guide &lt;classification&gt;`.\n",
              "\n",
              "Parameters\n",
              "----------\n",
              "n_neighbors : int, default=5\n",
              "    Number of neighbors to use by default for :meth:`kneighbors` queries.\n",
              "\n",
              "weights : {&#x27;uniform&#x27;, &#x27;distance&#x27;}, callable or None, default=&#x27;uniform&#x27;\n",
              "    Weight function used in prediction.  Possible values:\n",
              "\n",
              "    - &#x27;uniform&#x27; : uniform weights.  All points in each neighborhood\n",
              "      are weighted equally.\n",
              "    - &#x27;distance&#x27; : weight points by the inverse of their distance.\n",
              "      in this case, closer neighbors of a query point will have a\n",
              "      greater influence than neighbors which are further away.\n",
              "    - [callable] : a user-defined function which accepts an\n",
              "      array of distances, and returns an array of the same shape\n",
              "      containing the weights.\n",
              "\n",
              "    Refer to the example entitled\n",
              "    :ref:`sphx_glr_auto_examples_neighbors_plot_classification.py`\n",
              "    showing the impact of the `weights` parameter on the decision\n",
              "    boundary.\n",
              "\n",
              "algorithm : {&#x27;auto&#x27;, &#x27;ball_tree&#x27;, &#x27;kd_tree&#x27;, &#x27;brute&#x27;}, default=&#x27;auto&#x27;\n",
              "    Algorithm used to compute the nearest neighbors:\n",
              "\n",
              "    - &#x27;ball_tree&#x27; will use :class:`BallTree`\n",
              "    - &#x27;kd_tree&#x27; will use :class:`KDTree`\n",
              "    - &#x27;brute&#x27; will use a brute-force search.\n",
              "    - &#x27;auto&#x27; will attempt to decide the most appropriate algorithm\n",
              "      based on the values passed to :meth:`fit` method.\n",
              "\n",
              "    Note: fitting on sparse input will override the setting of\n",
              "    this parameter, using brute force.\n",
              "\n",
              "leaf_size : int, default=30\n",
              "    Leaf size passed to BallTree or KDTree.  This can affect the\n",
              "    speed of the construction and query, as well as the memory\n",
              "    required to store the tree.  The optimal value depends on the\n",
              "    nature of the problem.\n",
              "\n",
              "p : float, default=2\n",
              "    Power parameter for the Minkowski metric. When p = 1, this is equivalent\n",
              "    to using manhattan_distance (l1), and euclidean_distance (l2) for p = 2.\n",
              "    For arbitrary p, minkowski_distance (l_p) is used. This parameter is expected\n",
              "    to be positive.\n",
              "\n",
              "metric : str or callable, default=&#x27;minkowski&#x27;\n",
              "    Metric to use for distance computation. Default is &quot;minkowski&quot;, which\n",
              "    results in the standard Euclidean distance when p = 2. See the\n",
              "    documentation of `scipy.spatial.distance\n",
              "    &lt;https://docs.scipy.org/doc/scipy/reference/spatial.distance.html&gt;`_ and\n",
              "    the metrics listed in\n",
              "    :class:`~sklearn.metrics.pairwise.distance_metrics` for valid metric\n",
              "    values.\n",
              "\n",
              "    If metric is &quot;precomputed&quot;, X is assumed to be a distance matrix and\n",
              "    must be square during fit. X may be a :term:`sparse graph`, in which\n",
              "    case only &quot;nonzero&quot; elements may be considered neighbors.\n",
              "\n",
              "    If metric is a callable function, it takes two arrays representing 1D\n",
              "    vectors as inputs and must return one value indicating the distance\n",
              "    between those vectors. This works for Scipy&#x27;s metrics, but is less\n",
              "    efficient than passing the metric name as a string.\n",
              "\n",
              "metric_params : dict, default=None\n",
              "    Additional keyword arguments for the metric function.\n",
              "\n",
              "n_jobs : int, default=None\n",
              "    The number of parallel jobs to run for neighbors search.\n",
              "    ``None`` means 1 unless in a :obj:`joblib.parallel_backend` context.\n",
              "    ``-1`` means using all processors. See :term:`Glossary &lt;n_jobs&gt;`\n",
              "    for more details.\n",
              "    Doesn&#x27;t affect :meth:`fit` method.\n",
              "\n",
              "Attributes\n",
              "----------\n",
              "classes_ : array of shape (n_classes,)\n",
              "    Class labels known to the classifier\n",
              "\n",
              "effective_metric_ : str or callble\n",
              "    The distance metric used. It will be same as the `metric` parameter\n",
              "    or a synonym of it, e.g. &#x27;euclidean&#x27; if the `metric` parameter set to\n",
              "    &#x27;minkowski&#x27; and `p` parameter set to 2.\n",
              "\n",
              "effective_metric_params_ : dict\n",
              "    Additional keyword arguments for the metric function. For most metrics\n",
              "    will be same with `metric_params` parameter, but may also contain the\n",
              "    `p` parameter value if the `effective_metric_` attribute is set to\n",
              "    &#x27;minkowski&#x27;.\n",
              "\n",
              "n_features_in_ : int\n",
              "    Number of features seen during :term:`fit`.\n",
              "\n",
              "    .. versionadded:: 0.24\n",
              "\n",
              "feature_names_in_ : ndarray of shape (`n_features_in_`,)\n",
              "    Names of features seen during :term:`fit`. Defined only when `X`\n",
              "    has feature names that are all strings.\n",
              "\n",
              "    .. versionadded:: 1.0\n",
              "\n",
              "n_samples_fit_ : int\n",
              "    Number of samples in the fitted data.\n",
              "\n",
              "outputs_2d_ : bool\n",
              "    False when `y`&#x27;s shape is (n_samples, ) or (n_samples, 1) during fit\n",
              "    otherwise True.\n",
              "\n",
              "See Also\n",
              "--------\n",
              "RadiusNeighborsClassifier: Classifier based on neighbors within a fixed radius.\n",
              "KNeighborsRegressor: Regression based on k-nearest neighbors.\n",
              "RadiusNeighborsRegressor: Regression based on neighbors within a fixed radius.\n",
              "NearestNeighbors: Unsupervised learner for implementing neighbor searches.\n",
              "\n",
              "Notes\n",
              "-----\n",
              "See :ref:`Nearest Neighbors &lt;neighbors&gt;` in the online documentation\n",
              "for a discussion of the choice of ``algorithm`` and ``leaf_size``.\n",
              "\n",
              ".. warning::\n",
              "\n",
              "   Regarding the Nearest Neighbors algorithms, if it is found that two\n",
              "   neighbors, neighbor `k+1` and `k`, have identical distances\n",
              "   but different labels, the results will depend on the ordering of the\n",
              "   training data.\n",
              "\n",
              "https://en.wikipedia.org/wiki/K-nearest_neighbor_algorithm\n",
              "\n",
              "Examples\n",
              "--------\n",
              "&gt;&gt;&gt; X = [[0], [1], [2], [3]]\n",
              "&gt;&gt;&gt; y = [0, 0, 1, 1]\n",
              "&gt;&gt;&gt; from sklearn.neighbors import KNeighborsClassifier\n",
              "&gt;&gt;&gt; neigh = KNeighborsClassifier(n_neighbors=3)\n",
              "&gt;&gt;&gt; neigh.fit(X, y)\n",
              "KNeighborsClassifier(...)\n",
              "&gt;&gt;&gt; print(neigh.predict([[1.1]]))\n",
              "[0]\n",
              "&gt;&gt;&gt; print(neigh.predict_proba([[0.9]]))\n",
              "[[0.666... 0.333...]]</pre>\n",
              "      <script>\n",
              "      if (google.colab.kernel.accessAllowed && google.colab.files && google.colab.files.view) {\n",
              "        for (const element of document.querySelectorAll('.filepath')) {\n",
              "          element.style.display = 'block'\n",
              "          element.onclick = (event) => {\n",
              "            event.preventDefault();\n",
              "            event.stopPropagation();\n",
              "            google.colab.files.view(element.textContent, 40);\n",
              "          };\n",
              "        }\n",
              "      }\n",
              "      for (const element of document.querySelectorAll('.function-repr-contents')) {\n",
              "        element.onclick = (event) => {\n",
              "          event.preventDefault();\n",
              "          event.stopPropagation();\n",
              "          element.classList.toggle('function-repr-contents-collapsed');\n",
              "        };\n",
              "      }\n",
              "      </script>\n",
              "      </div>"
            ]
          },
          "metadata": {},
          "execution_count": 15
        }
      ],
      "source": [
        "KNeighborsClassifier"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 16,
      "id": "eab59c62-22f0-4228-b038-40f10fec416c",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 670
        },
        "id": "eab59c62-22f0-4228-b038-40f10fec416c",
        "outputId": "0efc465b-ad3f-465e-c8ef-2d011b173539"
      },
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 400x400 with 1 Axes>"
            ],
            "image/png": "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3FxMmjRJJCUlic6dOwsAIjExUev98ff3F40bNxaffvqpSEhIEJcuXap0v56enqJv375i48aNwszMTISGhor8/PwK+wIQ48aNE3v37hUAxNy5c9XLVq1aJQCItLQ0dduJEyeEvb298Pf3F5999plYsGCBCA4OFgqFQnz//ffqfnv27BEAxJ49e9RtixYtEgBE586dRVJSkoiOjhZOTk7C29tb43yXr9uyZUvRunVrkZCQIGJjY4WVlZVo166dRv0hISHCw8ND1KlTR7z99tsiKSlJdOrUSQDQ+H4yxPletmyZ+v/30qVLxbx588SIESPEO++8U+l7URsY6jrKyckRAET//v116p+RkSEAiJEjR2q0x8TECABi9+7d6jZPT08BQOzdu1fdduPGDaFUKsXkyZPVbRUFmhC6h3r5D4WbN29WWndFoR4YGCjq1Kkjbt++rW47evSoMDExEeHh4Vr7Gz58uMY2X3vtNeHs7FzpPh89DmtrayGEEG+88Ybo1q2bEEKI0tJS4ebmJuLi4io8B4WFhaK0tFTrOJRKpYiPj1e3paWlaR1buZCQEAFALFmypMJlj4aMEELs2LFDABCffPKJ+OOPP4SNjY3WD+vKlIfsoxITEwUAsXbtWnVbcXGx6NChg7CxsRH37t1THxcAYWdnJ27cuKHz/jw8PISZmZno0qWLyMvLq7RveagLIURoaKhwc3NT/wCoKNS7desmWrRoIQoLC9VtZWVlomPHjqJJkybqtsdDvaioSDg7O4u2bduKBw8eqPutXr1aAKgw1P38/ERRUZG6fd68eQKAOH78uLqt/H189IdRUVGR+nu4uLhYCGGY892/f3/RrFmzSs+lsXD4RUf37t0DANja2urUf/v27QCA6OhojfbJkycDeHjD9VH+/v7o3Lmz+rWrqyt8fX3xxx9/VLnmx5WP427ZsgVlZWU6rZOZmYmMjAxERkbCyclJ3f7iiy/i5ZdfVh/no9566y2N1507d8bt27fV51AXQ4cORUpKCrKysrB7925kZWVVOPQCPByHLx+rLS0txe3bt9VDS0eOHNF5n0qlElFRUTr17dGjB8aMGYP4+HgMHDgQKpUKS5cu1Xlfj9u+fTvc3NwwZMgQdZu5uTneeecd5Obm4ueff9bo//rrr8PV1VXn7WdnZ6OkpAT169eHpaWlTuvExsYiKyur0rH17Oxs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\n"
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Model Name: \n",
            "KNeighbors\n",
            "Accuracy: 0.8917\n",
            "Precision: 0.8942\n",
            "Recall: 0.8917\n",
            "F1 Score: 0.8895\n",
            "              precision    recall  f1-score   support\n",
            "\n",
            "           0       0.88      0.96      0.92        75\n",
            "           1       0.92      0.78      0.84        45\n",
            "\n",
            "    accuracy                           0.89       120\n",
            "   macro avg       0.90      0.87      0.88       120\n",
            "weighted avg       0.89      0.89      0.89       120\n",
            "\n"
          ]
        }
      ],
      "source": [
        "knn = KNeighborsClassifier(n_neighbors=2)\n",
        "\n",
        "knn.fit(X_train, y_train)\n",
        "# Make predictions\n",
        "y_pred = knn.predict(X_test)\n",
        "# Evaluate the model\n",
        "evaluation_results = evaluate_model('KNeighbors', y_test, y_pred)\n",
        "\n",
        "# Print the evaluation results\n",
        "for key, value in evaluation_results.items():\n",
        "    if key == 'Classification Report':\n",
        "        print(value)  # Print report separately for better readability\n",
        "    else:\n",
        "        print(f\"{key}: {value:.4f}\" if isinstance(value, float) else f\"{key}: \\n{value}\")"
      ]
    },
    {
      "cell_type": "code",
      "source": [],
      "metadata": {
        "id": "-zKaJpGz9adx"
      },
      "id": "-zKaJpGz9adx",
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        "Features Selection"
      ],
      "metadata": {
        "id": "9XVBnAze88qd"
      },
      "id": "9XVBnAze88qd"
    },
    {
      "cell_type": "code",
      "source": [
        "from sklearn.ensemble import RandomForestRegressor\n",
        "from sklearn.tree import DecisionTreeRegressor\n",
        "\n",
        "\n",
        "X2 = data.drop('classification', axis=1)  # Replace 'classification' with your target column\n",
        "y2 = data['classification'].values\n",
        "\n",
        "X_train2, X_test2, y_train2, y_test2 = train_test_split(X2, y2, test_size=0.2, random_state=42)\n",
        "\n",
        "\n",
        "\n",
        "model = RandomForestRegressor()\n",
        "model.fit(X_train2, y_train2)\n",
        "# Get feature importances\n",
        "feature_importances = model.feature_importances_\n",
        "selected_features = X2.columns[np.argsort(feature_importances)[-10:]]\n",
        "\n",
        "\n",
        "\n",
        "\n",
        "# Select top 5 features\n",
        "print(f\"Selected features using tree-based importance: {selected_features.tolist()}\")\n",
        "X_train_selected = X_train2[selected_features]\n",
        "X_test_selected = X_test2[selected_features]\n",
        "scaler = StandardScaler()\n",
        "X_train_selected = scaler.fit_transform(X_train_selected)\n",
        "X_test_selected = scaler.transform(X_test_selected)\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "SfFe_fTB5sJ0",
        "outputId": "d8ea1c20-579d-4dbf-f657-b26779d40f56"
      },
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Selected features using tree-based importance: ['age', 'pe', 'su', 'bu', 'bgr', 'sod', 'sc', 'al', 'sg', 'hemo']\n"
          ]
        }
      ],
      "id": "SfFe_fTB5sJ0"
    },
    {
      "cell_type": "code",
      "source": [
        "DT = DecisionTreeRegressor(random_state=42)\n",
        "# Define the parameter grid\n",
        "param_grid = { 'max_depth': [None, 10, 20, 30], 'min_samples_split': [2, 5, 10],\n",
        "                  'min_samples_leaf': [1, 2, 4],}\n",
        "\n",
        "# Initialize GridSearchCV\n",
        "grid_search = GridSearchCV(\n",
        "        estimator=DT, param_grid=param_grid, cv=5,\n",
        "        # 5-fold cross-validation\n",
        "        scoring='neg_root_mean_squared_error',\n",
        "        # Metric to optimize\n",
        "        verbose=2, n_jobs=-1\n",
        "        # Use all available cores\n",
        "     )\n",
        "\n",
        "    # Fit the grid search\n",
        "grid_search.fit(X_train_selected, y_train2)\n",
        "# Get the best parameters and the corresponding score\n",
        "print(\"Best Parameters:\", grid_search.best_params_)\n",
        "print(\"Best CV RMSE:\", grid_search.best_score_)\n",
        "# Train a new model using the best parameters\n",
        "best_DT = grid_search.best_estimator_\n",
        "# Evaluate the model on the test\n",
        "sety_pred = best_DT.predict(X_test_selected)\n",
        "y_pred = best_DT.predict(X_test_selected)\n",
        "evaluation_results = evaluate_model('Decision Tree Regressor', y_test2, y_pred)\n",
        "\n",
        "# Print the evaluation results\n",
        "print(\"\\nEvaluation Results on Test Set:\")\n",
        "\n",
        "for key, value in evaluation_results.items():\n",
        "     print(f\"{key}: {value:.4f}\"\n",
        "       if isinstance(value, float)\n",
        "       else f\"{key}: \\n{value}\")"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 774
        },
        "id": "5hTDEP9c8T-8",
        "outputId": "7e3353ae-826b-437a-c23c-283cd1f2d465"
      },
      "execution_count": 31,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Fitting 5 folds for each of 36 candidates, totalling 180 fits\n",
            "Best Parameters: {'max_depth': None, 'min_samples_leaf': 1, 'min_samples_split': 2}\n",
            "Best CV RMSE: -0.16903884111509543\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 400x400 with 1 Axes>"
            ],
            "image/png": "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b9UOU5dFFVzqjRR88P4EXL92FTa2dqhVuw4+WfAZmj/VytSlkUImO4cCAGvWrEFMTAwOHTqE3Nx7x/XNzc0RFBSEyMhI9O7d+5Hma934TZVlEhWK51CovFSEcygmDZQ8d+/exbVr1wAArq6usLS0LNX8GChUXhgoVF4qQqD8Kyq0tLRE1apVTV0GERGVAu+UJyIiJRgoRESkBAOFiIiUYKAQEZESDBQiIlKCgUJEREowUIiISAkGChERKcFAISIiJRgoRESkBAOFiIiUYKAQEZESDBQiIlKCgUJEREowUIiISAkGChERKcFAISIiJRgoRESkBAOFiIiUYKAQEZESDBQiIlKCgUJEREowUIiISAkGChERKcFAISIiJRgoRESkBAOFiIiUYKAQEZESDBQiIlKCgUJEREowUIiISAkGChERKcFAISIiJRgoRESkBAOFiIiUYKAQEZESFsXpdPTo0WLPsGHDho9cDBERVVzFCpTAwEBoNBqISIHT86ZpNBrk5uYqLZCIiCqGYgXK2bNny7oOIiKq4IoVKN7e3mVdBxERVXCPdFI+Li4OwcHB8PT0xPnz5wEAc+bMwXfffae0OCIiqjhKHCiffvopIiMj0bVrV6SmphrOmTg6OmLOnDmq6yMiogqixIEyf/58LFmyBO+++y7Mzc0N7U2bNsWxY8eUFkdERBVHiQPl7NmzaNy4cb52nU6H9PR0JUUREVHFU+JA8fX1RUJCQr72zZs3o379+ipqIiKiCqhYV3ndLzIyEsOHD8edO3cgIti/fz++/PJLTJ8+HUuXLi2LGomIqAIocaBERETA2toa7733HjIyMtCvXz94enpi7ty5eOWVV8qiRiIiqgA0Utjt78WQkZGBtLQ0uLu7q6yp1Kwbv2nqEugx8feeOaYugR4TrrYl/vxf7h65witXruDkyZMA7n31ipubm7KiiIio4inxSfnbt2/jtddeg6enJ0JCQhASEgJPT0/0798fN2/eLIsaiYioAihxoERERGDfvn3YuHEjUlNTkZqaig0bNuDgwYMYOnRoWdRIREQVQInPodjY2GDLli14+umnjdr37NmDLl26/CvuReE5FCovPIdC5aUinEMp8R6Ki4sLHBwc8rU7ODjAyclJSVFERFTxlDhQ3nvvPURGRiI5OdnQlpycjDFjxmDixIlKiyMiooqjWPtQjRs3hkaj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\n"
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\n",
            "Evaluation Results on Test Set:\n",
            "Model Name: \n",
            "Decision Tree Regressor\n",
            "Accuracy: 0.9625\n",
            "Precision: 0.9661\n",
            "Recall: 0.9625\n",
            "F1 Score: 0.9629\n",
            "Classification Report: \n",
            "              precision    recall  f1-score   support\n",
            "\n",
            "           0       1.00      0.94      0.97        52\n",
            "           1       0.90      1.00      0.95        28\n",
            "\n",
            "    accuracy                           0.96        80\n",
            "   macro avg       0.95      0.97      0.96        80\n",
            "weighted avg       0.97      0.96      0.96        80\n",
            "\n"
          ]
        }
      ],
      "id": "5hTDEP9c8T-8"
    }
  ],
  "metadata": {
    "kernelspec": {
      "display_name": "Python 3 (ipykernel)",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.12.7"
    },
    "colab": {
      "provenance": []
    }
  },
  "nbformat": 4,
  "nbformat_minor": 5
}