{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "36ac21fc",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Import dependencies and packages neededfrom sklearn import datasets\n",
    "from sklearn.svm import SVC\n",
    "from sklearn.model_selection import train_test_split\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import seaborn as sn\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "3c07c748",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "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>PatientId</th>\n",
       "      <th>Pregnancies</th>\n",
       "      <th>Glucose</th>\n",
       "      <th>BloodPressure</th>\n",
       "      <th>SkinThickness</th>\n",
       "      <th>Insulin</th>\n",
       "      <th>BMI</th>\n",
       "      <th>DiabetesPedigreeFunction</th>\n",
       "      <th>Age</th>\n",
       "      <th>Outcome</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "      <td>148</td>\n",
       "      <td>72</td>\n",
       "      <td>35</td>\n",
       "      <td>0</td>\n",
       "      <td>33.6</td>\n",
       "      <td>0.627</td>\n",
       "      <td>50</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>85</td>\n",
       "      <td>66</td>\n",
       "      <td>29</td>\n",
       "      <td>0</td>\n",
       "      <td>26.6</td>\n",
       "      <td>0.351</td>\n",
       "      <td>31</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>8</td>\n",
       "      <td>183</td>\n",
       "      <td>64</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>23.3</td>\n",
       "      <td>0.672</td>\n",
       "      <td>32</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>89</td>\n",
       "      <td>66</td>\n",
       "      <td>23</td>\n",
       "      <td>94</td>\n",
       "      <td>28.1</td>\n",
       "      <td>0.167</td>\n",
       "      <td>21</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>137</td>\n",
       "      <td>40</td>\n",
       "      <td>35</td>\n",
       "      <td>168</td>\n",
       "      <td>43.1</td>\n",
       "      <td>2.288</td>\n",
       "      <td>33</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   PatientId  Pregnancies  Glucose  BloodPressure  SkinThickness  Insulin  \\\n",
       "0          1            6      148             72             35        0   \n",
       "1          2            1       85             66             29        0   \n",
       "2          3            8      183             64              0        0   \n",
       "3          4            1       89             66             23       94   \n",
       "4          5            0      137             40             35      168   \n",
       "\n",
       "    BMI  DiabetesPedigreeFunction  Age  Outcome  \n",
       "0  33.6                     0.627   50        1  \n",
       "1  26.6                     0.351   31        0  \n",
       "2  23.3                     0.672   32        1  \n",
       "3  28.1                     0.167   21        0  \n",
       "4  43.1                     2.288   33        1  "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# import the dataset (stored in a variable)\n",
    "diabetes = pd.read_csv(\"diabetes.csv\")\n",
    "# Inspect the data(first five rows, or this can be changed by including how many rows within the brackets)\n",
    "diabetes.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "f5ce7fbc",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 614 entries, 60 to 102\n",
      "Data columns (total 10 columns):\n",
      " #   Column                    Non-Null Count  Dtype  \n",
      "---  ------                    --------------  -----  \n",
      " 0   PatientId                 614 non-null    int64  \n",
      " 1   Pregnancies               614 non-null    int64  \n",
      " 2   Glucose                   614 non-null    int64  \n",
      " 3   BloodPressure             614 non-null    int64  \n",
      " 4   SkinThickness             614 non-null    int64  \n",
      " 5   Insulin                   614 non-null    int64  \n",
      " 6   BMI                       614 non-null    float64\n",
      " 7   DiabetesPedigreeFunction  614 non-null    float64\n",
      " 8   Age                       614 non-null    int64  \n",
      " 9   Outcome                   614 non-null    int64  \n",
      "dtypes: float64(2), int64(8)\n",
      "memory usage: 52.8 KB\n"
     ]
    }
   ],
   "source": [
    "# split the data into train and test using the SciKitLearn package\n",
    "from sklearn.model_selection import train_test_split\n",
    "train,test=train_test_split(diabetes,test_size=0.2,random_state=42)\n",
    "# view the information\n",
    "train.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "9c236d8a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 154 entries, 668 to 462\n",
      "Data columns (total 8 columns):\n",
      " #   Column                    Non-Null Count  Dtype  \n",
      "---  ------                    --------------  -----  \n",
      " 0   Pregnancies               154 non-null    int64  \n",
      " 1   Glucose                   154 non-null    int64  \n",
      " 2   BloodPressure             154 non-null    int64  \n",
      " 3   SkinThickness             154 non-null    int64  \n",
      " 4   Insulin                   154 non-null    int64  \n",
      " 5   BMI                       154 non-null    float64\n",
      " 6   DiabetesPedigreeFunction  154 non-null    float64\n",
      " 7   Age                       154 non-null    int64  \n",
      "dtypes: float64(2), int64(6)\n",
      "memory usage: 10.8 KB\n"
     ]
    }
   ],
   "source": [
    "# Ensure only labels are saved in y variables\n",
    "y_train=train['Outcome']\n",
    "y_test=test['Outcome']\n",
    "#drop the unwanted / irrelevant columns, features are stored in X variables\n",
    "X_train=train.drop(['PatientId','Outcome'],axis=1)\n",
    "X_test=test.drop(['PatientId','Outcome'],axis=1)\n",
    "# view the information\n",
    "X_test.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "cf217602",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'C': 1.0,\n",
       " 'break_ties': False,\n",
       " 'cache_size': 200,\n",
       " 'class_weight': None,\n",
       " 'coef0': 0.0,\n",
       " 'decision_function_shape': 'ovr',\n",
       " 'degree': 3,\n",
       " 'gamma': 'scale',\n",
       " 'kernel': 'rbf',\n",
       " 'max_iter': -1,\n",
       " 'probability': False,\n",
       " 'random_state': None,\n",
       " 'shrinking': True,\n",
       " 'tol': 0.001,\n",
       " 'verbose': False}"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# this step is just to demonstrate the adjustable parameters within the algorithm and not a necessary step\n",
    "SVC().get_params()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "3f4c8504",
   "metadata": {},
   "outputs": [],
   "source": [
    "# # this step is just to demonstrate the api methods and not a necessary step\n",
    "# dir(SVC)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "25ec0839",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "SVC()"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Create a model for Support Vector (Machine) Classifier using default parameters\n",
    "model = SVC()\n",
    "# fit the data to the model, both features and labels to train it\n",
    "model.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "59cf09a6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,\n",
       "       0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0,\n",
       "       0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1,\n",
       "       0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0,\n",
       "       0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0,\n",
       "       0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,\n",
       "       0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0],\n",
       "      dtype=int64)"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# use the model to classify the datapoints within the test set\n",
    "y_pred2=model.predict(X_test)\n",
    "# print predicted classifications\n",
    "y_pred2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "606707f8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "668    0\n",
       "324    0\n",
       "624    0\n",
       "690    0\n",
       "473    0\n",
       "      ..\n",
       "355    1\n",
       "534    0\n",
       "344    0\n",
       "296    1\n",
       "462    0\n",
       "Name: Outcome, Length: 154, dtype: int64"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# print test labels (ground truth) that is compared to classifier\n",
    "y_test"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "fb8d51eb",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[87 12]\n",
      " [24 31]]\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0      0.784     0.879     0.829        99\n",
      "           1      0.721     0.564     0.633        55\n",
      "\n",
      "    accuracy                          0.766       154\n",
      "   macro avg      0.752     0.721     0.731       154\n",
      "weighted avg      0.761     0.766     0.759       154\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# display the metrics of the model's classification through confusion matrix and classification report\n",
    "# (accuracy / precision / recall / f1)\n",
    "from sklearn import metrics\n",
    "print(metrics.confusion_matrix(y_test, y_pred2))\n",
    "\n",
    "\n",
    "print(metrics.classification_report(y_test, y_pred2, digits=3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "a1096778",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     Actual  Predicted\n",
      "668       0          0\n",
      "324       0          0\n",
      "624       0          0\n",
      "690       0          0\n",
      "473       0          0\n",
      "..      ...        ...\n",
      "355       1          1\n",
      "534       0          0\n",
      "344       0          0\n",
      "296       1          0\n",
      "462       0          0\n",
      "\n",
      "[154 rows x 2 columns]\n"
     ]
    }
   ],
   "source": [
    "# use Pandas to create a dataframe to view the ground truth and classifications side by side\n",
    "data = {'Actual': y_test,\n",
    "        'Predicted': y_pred2}\n",
    "df = pd.DataFrame(data)\n",
    "print(df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "e5d198fa",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0      0.784     0.879     0.829        99\n",
      "           1      0.721     0.564     0.633        55\n",
      "\n",
      "    accuracy                          0.766       154\n",
      "   macro avg      0.752     0.721     0.731       154\n",
      "weighted avg      0.761     0.766     0.759       154\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# Use Seaborn to create a confusion matrix heatmap and MatPlotLib to display\n",
    "confusion_matrix = pd.crosstab(df['Actual'], df['Predicted'], rownames=['Actual'], colnames=['Predicted'])\n",
    "sn.heatmap(confusion_matrix, annot=True)\n",
    "plt.show()\n",
    "print(metrics.classification_report(y_test, y_pred2, digits=3))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ef72442e-63bb-4a75-a2ab-dd2aa8df1840",
   "metadata": {},
   "source": [
    "## Searching for the Best Hyperparameters with GridSearchCV"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "fa40302a",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Create an iterative grid search to tune the parameters\n",
    "import joblib\n",
    "from sklearn.model_selection import GridSearchCV"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "06a71bed",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Create a function to show the results of the classifier under different parameter values\n",
    "def print_results(results):\n",
    "    print('Best Parameters: {}\\n'.format(results.best_params_))\n",
    "    \n",
    "    means = results.cv_results_['mean_test_score']\n",
    "    stds = results.cv_results_['std_test_score']\n",
    "    for mean, std, params in zip(means, stds, results.cv_results_['params']):\n",
    "        print('{} (+/-{}) for {}'.format(round(mean, 3), round(std * 2, 3), params))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "5404a42e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best Parameters: {'C': 0.1, 'kernel': 'linear'}\n",
      "\n",
      "0.767 (+/-0.053) for {'C': 0.1, 'kernel': 'linear'}\n",
      "0.651 (+/-0.004) for {'C': 0.1, 'kernel': 'rbf'}\n",
      "0.765 (+/-0.056) for {'C': 1, 'kernel': 'linear'}\n",
      "0.752 (+/-0.053) for {'C': 1, 'kernel': 'rbf'}\n",
      "0.762 (+/-0.049) for {'C': 10, 'kernel': 'linear'}\n",
      "0.761 (+/-0.055) for {'C': 10, 'kernel': 'rbf'}\n"
     ]
    }
   ],
   "source": [
    "# Create a model using the Support Vector Classifier / Machine algorithm\n",
    "svm = SVC()\n",
    "# Set the parameters to be tuned\n",
    "parameters = {\n",
    "    'kernel' : ['linear', 'rbf'],\n",
    "    'C' : [0.1, 1, 10]\n",
    "}\n",
    "# instantiate the grid search\n",
    "cv = GridSearchCV(svm, parameters, cv=5)\n",
    "# fit the training data to the model\n",
    "cv.fit(X_train, y_train.ravel())\n",
    "# display the model evaluation with the different paramter combination values (C value and kernel)\n",
    "print_results(cv)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "4bfb84c7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'C': 0.1,\n",
       " 'break_ties': False,\n",
       " 'cache_size': 200,\n",
       " 'class_weight': None,\n",
       " 'coef0': 0.0,\n",
       " 'decision_function_shape': 'ovr',\n",
       " 'degree': 3,\n",
       " 'gamma': 'scale',\n",
       " 'kernel': 'linear',\n",
       " 'max_iter': -1,\n",
       " 'probability': False,\n",
       " 'random_state': None,\n",
       " 'shrinking': True,\n",
       " 'tol': 0.001,\n",
       " 'verbose': False}"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# show the best paramters for classification (not a necesary step unless you are saving best parameter models to compare)\n",
    "cv.best_estimator_.get_params()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "05d7456f",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "33f56a89-cf7c-4697-9629-c04199149a09",
   "metadata": {},
   "source": [
    "# Decision Tree"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "472032f5-928c-49ab-8c8d-b2454195ea2a",
   "metadata": {},
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "9be2e2e6-cc3e-46e1-8ece-1d74db056ff4",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "b691d410-c1f7-419e-9c3f-24f0d55545db",
   "metadata": {},
   "source": [
    "# NaiveBayes "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5cb737da-8ca9-43b7-8b39-c3f0b4f02d1b",
   "metadata": {},
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6881fb78-9b6d-441c-88ba-91ad3a30c9b9",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "d105e676-f417-4b03-b21d-74d1b52d474b",
   "metadata": {},
   "source": [
    "# Summary and Conclusion"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "433777c4-445e-451c-b2de-bdc858dae981",
   "metadata": {},
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f1a9fe59-25f8-4528-93b1-bea00ffc9f52",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "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.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
