{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "6d61c1db-70cb-4d7b-8218-ecb968057d55",
   "metadata": {},
   "outputs": [],
   "source": [
    "import joblib\n",
    "from sklearn.neural_network import MLPClassifier, MLPRegressor\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn import metrics\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import seaborn as sn\n",
    "import matplotlib.pyplot as plt\n",
    "import warnings\n",
    "from sklearn.metrics import accuracy_score\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "warnings.filterwarnings('ignore', category = FutureWarning)\n",
    "warnings.filterwarnings('ignore', category = DeprecationWarning)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "15a81941-39ac-431d-b2e1-c3a6c1189144",
   "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": [
    "diabetes = pd.read_csv(\"diabetes.csv\")\n",
    "diabetes.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "e3de902c-9916-46bf-9d6d-6b0fafd6b745",
   "metadata": {},
   "outputs": [],
   "source": [
    "train,test=train_test_split(diabetes,test_size=0.2,random_state=42)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "6f4c3e80-9717-4446-8761-764864c4c033",
   "metadata": {},
   "outputs": [],
   "source": [
    "y_train=train['Outcome']\n",
    "y_test=test['Outcome']\n",
    "\n",
    "X_train=train.drop(['PatientId','Outcome'],axis=1)\n",
    "X_test=test.drop(['PatientId','Outcome'],axis=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "48c22802-42de-4931-99cd-348123d7c433",
   "metadata": {},
   "source": [
    "# Perceptron"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "2e0ea755-5017-4f90-bc58-efe215c15871",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.linear_model import Perceptron"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "bbc8b1e4-fa7a-4971-9cb1-98415e25a4c7",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'alpha': 0.0001, 'class_weight': None, 'early_stopping': False, 'eta0': 1.0, 'fit_intercept': True, 'l1_ratio': 0.15, 'max_iter': 1000, 'n_iter_no_change': 5, 'n_jobs': None, 'penalty': None, 'random_state': 0, 'shuffle': True, 'tol': 0.001, 'validation_fraction': 0.1, 'verbose': 0, 'warm_start': False}\n"
     ]
    }
   ],
   "source": [
    "print(Perceptron().get_params())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "cf84463d-ef71-4703-8bf5-284c93b1618f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-1 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: black;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-1 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-1 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-1 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-1 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-1 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-1 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-1 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-1 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 1ex;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-1 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>Perceptron(random_state=42)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" checked><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;Perceptron<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.5/modules/generated/sklearn.linear_model.Perceptron.html\">?<span>Documentation for Perceptron</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>Perceptron(random_state=42)</pre></div> </div></div></div></div>"
      ],
      "text/plain": [
       "Perceptron(random_state=42)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "per_clf = Perceptron(random_state=42)\n",
    "per_clf.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "480e3aa4-f5e9-4647-b4e0-e24d8920e90b",
   "metadata": {},
   "outputs": [],
   "source": [
    "per_pred = per_clf.predict(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "38a68446-a6e0-4e9f-8439-37dae3bdb301",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "P Accuracy: 0.65\n"
     ]
    }
   ],
   "source": [
    "per_acc = accuracy_score(y_test, per_pred)\n",
    "print(f\"P Accuracy: {per_acc:.2f}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "07259275-6c9c-449d-a3e9-0a044f90a23e",
   "metadata": {},
   "outputs": [],
   "source": [
    "def Draw_cm(test, predict):\n",
    "    data = {'Actual': test, 'Predicted': predict}\n",
    "    df = pd.DataFrame(data)\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, predict, digits=3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "dcf1349d-25e0-45d5-ad0c-17d22ed0a501",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0      0.657     0.949     0.777        99\n",
      "           1      0.545     0.109     0.182        55\n",
      "\n",
      "    accuracy                          0.649       154\n",
      "   macro avg      0.601     0.529     0.479       154\n",
      "weighted avg      0.617     0.649     0.564       154\n",
      "\n"
     ]
    }
   ],
   "source": [
    "Draw_cm(y_test, per_pred)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "c8c1bd11-e3fc-4654-ad3f-658fc1497bbd",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\linear_model\\_stochastic_gradient.py:744: ConvergenceWarning: Maximum number of iteration reached before convergence. Consider increasing max_iter to improve the fit.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\linear_model\\_stochastic_gradient.py:744: ConvergenceWarning: Maximum number of iteration reached before convergence. Consider increasing max_iter to improve the fit.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\linear_model\\_stochastic_gradient.py:744: ConvergenceWarning: Maximum number of iteration reached before convergence. Consider increasing max_iter to improve the fit.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\linear_model\\_stochastic_gradient.py:744: ConvergenceWarning: Maximum number of iteration reached before convergence. Consider increasing max_iter to improve the fit.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\linear_model\\_stochastic_gradient.py:744: ConvergenceWarning: Maximum number of iteration reached before convergence. Consider increasing max_iter to improve the fit.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\linear_model\\_stochastic_gradient.py:744: ConvergenceWarning: Maximum number of iteration reached before convergence. Consider increasing max_iter to improve the fit.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\linear_model\\_stochastic_gradient.py:744: ConvergenceWarning: Maximum number of iteration reached before convergence. Consider increasing max_iter to improve the fit.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\linear_model\\_stochastic_gradient.py:744: ConvergenceWarning: Maximum number of iteration reached before convergence. Consider increasing max_iter to improve the fit.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\linear_model\\_stochastic_gradient.py:744: ConvergenceWarning: Maximum number of iteration reached before convergence. Consider increasing max_iter to improve the fit.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\linear_model\\_stochastic_gradient.py:744: ConvergenceWarning: Maximum number of iteration reached before convergence. Consider increasing max_iter to improve the fit.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\linear_model\\_stochastic_gradient.py:744: ConvergenceWarning: Maximum number of iteration reached before convergence. Consider increasing max_iter to improve the fit.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\linear_model\\_stochastic_gradient.py:744: ConvergenceWarning: Maximum number of iteration reached before convergence. Consider increasing max_iter to improve the fit.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\linear_model\\_stochastic_gradient.py:744: ConvergenceWarning: Maximum number of iteration reached before convergence. Consider increasing max_iter to improve the fit.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best Params: {'alpha': 0.0001, 'eta0': 0.1, 'max_iter': 20, 'penalty': 'l1', 'tol': 0.001}\n",
      "Best Score: 0.6612688258030122\n"
     ]
    }
   ],
   "source": [
    "param_grid = {\n",
    "    'penalty': ['l2', 'l1', 'elasticnet', None],\n",
    "    'alpha': [0.0001, 0.001, 0.01],\n",
    "    'max_iter': [20,40,50, 100],\n",
    "    'eta0': [0.1, 0.01, 10.0, 15.0],\n",
    "    'tol': [1e-3, 1e-4, 0.01,0.1]\n",
    "}\n",
    "\n",
    "grid_search = GridSearchCV(Perceptron(random_state=42), param_grid, cv=5, scoring='accuracy')\n",
    "grid_search.fit(X_train, y_train)\n",
    "\n",
    "print(\"Best Params:\", grid_search.best_params_)\n",
    "print(\"Best Score:\", grid_search.best_score_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "c2668ecf-1037-4088-b4f3-ef31ec7d8434",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-3 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: black;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-3 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-3 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-3 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-3 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-3 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-3 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-3 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-3 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-3 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-3 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-3 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-3 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-3 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-3 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-3 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 1ex;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-3 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-3 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-3 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-3\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>Perceptron(eta0=0.1, max_iter=20, penalty=&#x27;l1&#x27;, random_state=42)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-3\" type=\"checkbox\" checked><label for=\"sk-estimator-id-3\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;Perceptron<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.5/modules/generated/sklearn.linear_model.Perceptron.html\">?<span>Documentation for Perceptron</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>Perceptron(eta0=0.1, max_iter=20, penalty=&#x27;l1&#x27;, random_state=42)</pre></div> </div></div></div></div>"
      ],
      "text/plain": [
       "Perceptron(eta0=0.1, max_iter=20, penalty='l1', random_state=42)"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "per_clf_opt = Perceptron(random_state=42, alpha=0.0001, eta0=0.1, max_iter=20, penalty='l1', tol=0.001)\n",
    "per_clf_opt.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "c022d0d6-67e5-4e61-80b4-f222e3a3e6ce",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "P Accuracy: 0.64\n"
     ]
    }
   ],
   "source": [
    "per_opt_pred = per_clf_opt.predict(X_test)\n",
    "per_opt_acc = accuracy_score(y_test, per_opt_pred)\n",
    "print(f\"P Accuracy: {per_opt_acc:.2f}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "c4089cc5-9a9f-4b64-95f9-b51c658647dc",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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AQAATCORAAAAppFIAAAA00gkAACAaSQSAADANBIJAABgGokEAAAwjUQCAACYRiIBhKC8vDydddZZ3s/XXHONMjIy2j2OL7/8UjabTZs3b273uQG0DxIJoB1dc801stlsstlsCg8PV//+/XXrrbeqvr7e0nkffPDBNj+Cmb/8AfiDl3YB7eyiiy7S8uXL1dTUpDfeeENTp05VfX29lixZ4nNdU1OTwsPDAzJndHR0QO4DAD9GRQJoZ3a7XU6nU3369FFmZqYmTZqkVatWedsRjz/+uPr37y+73S7DMLR3715dd911iomJUY8ePXT++efr3Xff9bnn/Pnz5XA4FBUVpWuvvVbff/+9z/kftzaam5u1YMECnXbaabLb7erbt6/uu+8+SVJ8fLwkafjw4bLZbEpNTfV+b/ny5Ro4cKC6du2qM844Qw8//LDPPG+//baGDx+url27KjExUZs2bQrgbw5AR0RFAgiyiIgINTU1SZI+//xzPfvss3r++ecVFhYmSRo/frx69uyp1atXKzo6Wo8++qguuOACffrpp+rZs6eeffZZzZs3Tw899JBGjRqlJ598UosWLVL//v2POGdubq6WLVumBx54QOedd5527typjz/+WNLhZOBXv/qV1qxZo8GDB6tLly6SpGXLlmnevHkqKirS8OHDtWnTJv3hD39Qt27dNHnyZNXX1+u//uu/dP755+upp55SdXW1Zs6cafFvD0DQGQDazeTJk40JEyZ4P//rX/8yevXqZVx22WXGvHnzjPDwcKOmpsZ7fu3atUaPHj2M77//3uc+p556qvHoo48ahmEYycnJxvTp033OJyUlGcOGDWt13n379hl2u91YtmxZqzFWV1cbkoxNmzb5jPfp08coKSnxGbvnnnuM5ORkwzAM49FHHzV69uxp1NfXe88vWbKk1XsBCB20NoB29ve//13du3dX165dlZycrNGjR2vx4sWSpFNOOUW9e/f2Xrtx40bt379fvXr1Uvfu3b1HdXW1vvjiC0nSRx99pOTkZJ85fvz5P3300UfyeDy64IIL2hzz7t279dVXX+naa6/1iePee+/1iWPYsGGKjIxsUxwAQgOtDaCdjRkzRkuWLFF4eLji4uJ8FlR269bN59rm5mbFxsbq9ddfb3GfE044wdT8ERERfn+nublZ0uH2RlJSks+5H1owhmGYigfA8Y1EAmhn3bp102mnndama88++2y53W517txZ/fr1a/WagQMHav369frd737nHVu/fv0R75mQkKCIiAitXbtWU6dObXH+hzURhw4d8o45HA6dfPLJ2rJliyZNmtTqfQcNGqQnn3xSDQ0N3mTlaHEACA20NoAO7MILL1RycrIyMjL06quv6ssvv1RFRYXuuOMObdiwQZI0c+ZMPf7443r88cf16aefat68eaqqqjriPbt27arZs2dr1qxZeuKJJ/TFF19o/fr1+stf/iJJiomJUUREhF555RXt2rVLe/fulXT4IVf5+fl68MEH9emnn+r999/X8uXLVVhYKEnKzMxUp06ddO211+rDDz/U6tWrdf/991v8GwIQbCQSQAdms9m0evVqjR49WlOmTNGAAQN0xRVX6Msvv5TD4ZAkXX755Zo7d65mz56tESNGaOvWrbr++uuPet8777xTt9xyi+bOnauBAwfq8ssvV01NjSSpc+fOWrRokR599FHFxcVpwoQJkqSpU6fqscce04oVKzR06FClpKRoxYoV3u2i3bt31//+7//qww8/1PDhwzVnzhwtWLDAwt8OgI7AZtDYBAAAJlGRAAAAppFIAAAA00gkAACAaSQSAADANBIJAABgGokEAAAwjUQCAACYRiIBAABMI5EAAACmkUgAAADTSCQAAIBp/x/ICjdKGgjdjAAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0      0.664     0.899     0.764        99\n",
      "           1      0.500     0.182     0.267        55\n",
      "\n",
      "    accuracy                          0.643       154\n",
      "   macro avg      0.582     0.540     0.515       154\n",
      "weighted avg      0.606     0.643     0.586       154\n",
      "\n"
     ]
    }
   ],
   "source": [
    "Draw_cm(y_test, per_opt_pred)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "653efe98-2ae1-450c-821b-2ee1407c601e",
   "metadata": {},
   "source": [
    "# Mutil-Layer_P"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "abe3bded-8390-4692-bb8e-32d9b7fbf9e2",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'activation': 'relu', 'alpha': 0.0001, 'batch_size': 'auto', 'beta_1': 0.9, 'beta_2': 0.999, 'early_stopping': False, 'epsilon': 1e-08, 'hidden_layer_sizes': (100,), 'learning_rate': 'constant', 'learning_rate_init': 0.001, 'max_fun': 15000, 'max_iter': 200, 'momentum': 0.9, 'n_iter_no_change': 10, 'nesterovs_momentum': True, 'power_t': 0.5, 'random_state': None, 'shuffle': True, 'solver': 'adam', 'tol': 0.0001, 'validation_fraction': 0.1, 'verbose': False, 'warm_start': False}\n"
     ]
    }
   ],
   "source": [
    "print(MLPClassifier().get_params())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "25e90c03-29d7-46a3-bac3-ed2ef694b0ed",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-2 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: black;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-2 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-2 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-2 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-2 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-2 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-2 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-2 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-2 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-2 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-2 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-2 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-2 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-2 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-2 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 1ex;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-2 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-2 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-2\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>MLPClassifier()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-2\" type=\"checkbox\" checked><label for=\"sk-estimator-id-2\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;MLPClassifier<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.5/modules/generated/sklearn.neural_network.MLPClassifier.html\">?<span>Documentation for MLPClassifier</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>MLPClassifier()</pre></div> </div></div></div></div>"
      ],
      "text/plain": [
       "MLPClassifier()"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Create a model for Support Vector (Machine) Classifier using default parameters\n",
    "mlp_clf = MLPClassifier()\n",
    "# fit the data to the model, both features and labels to train it\n",
    "mlp_clf.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "4250ee8b-3986-4a4d-bc0c-ebc977119666",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0,\n",
       "       1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1,\n",
       "       0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0,\n",
       "       0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1,\n",
       "       0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1,\n",
       "       1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,\n",
       "       0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0],\n",
       "      dtype=int64)"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# use the model to classify the datapoints within the test set\n",
    "mlp_pred = mlp_clf.predict(X_test)\n",
    "# print predicted classifications\n",
    "mlp_pred"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "3e6485d2-b2cb-442f-95ec-8f5b3cfa57c4",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MLP Accuracy: 0.59\n"
     ]
    }
   ],
   "source": [
    "mlp_acc = accuracy_score(y_test, mlp_pred)\n",
    "print(f\"MLP Accuracy: {mlp_acc:.2f}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "875253a5-8e2b-4414-81dc-808725d2d886",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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OnVKrVq1UosWLTxHSUmJvvzyS0nSp59+qpSUFK81zv38fZ9++qncbrf69+9f55gPHTqk/fv365577vGK48knn/SKo1u3bmrWrFmd4gAQHGhtAPUsNTVVubm5Cg0NVWxsrNeGyubNm3tdW11dLafTqYKCghrzXH755abWDw8P9/k71dXVkr5tbyQnJ3ud+08LxjAMU/EAaNxIJIB61rx5c3Xo0KFO1/7oRz9SaWmpmjRpoquvvrrWazp16qQtW7bol7/8pWdsy5Yt550zISFB4eHheu+99zRu3Lga5/+zJ6KqqsozFhMToyuvvFK7d+/W6NGja523c+fOev3113XmzBlPsnKhOAAEB1obQAN2yy23KCUlRcOHD9e6deu0Z88ebd68Wb/5zW+0detWSdKkSZO0cOFCLVy4UJ9//rmmT5+unTt3nnfOpk2basqUKZo8ebKWLFmiL7/8Ulu2bNGrr74qSYqOjlZ4eLjy8vJ08OBBnThxQtK3D7lyuVx67rnn9Pnnn6u4uFiLFi3SnDlzJEmjRo3SZZddpnvuuUeffPKJ1q5dq6efftri3yEAgUYiATRgNptNa9euVe/evXX33XerY8eOuvPOO7Vnzx7FxMRIkkaOHKknnnhCU6ZMUY8ePbR3717df//9F5z38ccf1yOPPKInnnhCnTp10siRI1VWViZJatKkiZ5//nm98sorio2N1bBhwyRJ48aN04IFC/Taa6/p+uuvV58+ffTaa695bhdt0aKF/vSnP+mTTz5R9+7dNW3aND311FMW/u4AaAhsBo1NAABgEhUJAABgGokEAAAwjUQCAACYRiIBAABMI5EAAACmkUgAAADTSCQAAIBpJBIAAMA0EgkAAGAaiQQAADCNRAIAAJj2/wC9bxqxebgJpwAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0      0.821     0.465     0.594        99\n",
      "           1      0.459     0.818     0.588        55\n",
      "\n",
      "    accuracy                          0.591       154\n",
      "   macro avg      0.640     0.641     0.591       154\n",
      "weighted avg      0.692     0.591     0.592       154\n",
      "\n"
     ]
    }
   ],
   "source": [
    "Draw_cm(y_test, mlp_pred)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "c27968b1-e449-4ee0-87b4-d7c2d804b342",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n",
      "D:\\anaconda\\Lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:690: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (200) reached and the optimization hasn't converged yet.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best Params: {'alpha': 0.01, 'hidden_layer_sizes': (32, 64, 128), 'learning_rate_init': 0.01}\n",
      "Best Score: 0.7361721977875517\n"
     ]
    }
   ],
   "source": [
    "param_grid = {\n",
    "    'hidden_layer_sizes': [(50,), (100,), (50, 50),(32,64,128)],\n",
    "    'alpha': [0.00005, 0.0001, 0.001, 0.01],\n",
    "    'learning_rate_init': [0.0005, 0.001, 0.01]\n",
    "}\n",
    "\n",
    "grid_search = GridSearchCV(MLPClassifier(), param_grid, cv=5, scoring='accuracy')\n",
    "grid_search.fit(X_train, y_train)\n",
    "\n",
    "print(\"Best Params:\", grid_search.best_params_)\n",
    "print(\"Best Score:\", grid_search.best_score_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "69b19443-3081-41cd-bb00-2b04a369043a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-4 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: black;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-4 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-4 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-4 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-4 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-4 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-4 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-4 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-4 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-4 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-4 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-4 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-4 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-4 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-4 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-4 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "#sk-container-id-4 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-4 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-4 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-4 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-4 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-4 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-4 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-4 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-4 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-4 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-4 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-4 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-4 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-4 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-4 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-4 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-4 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-4 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-4 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-4 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-4 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-4 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 1ex;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-4 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-4 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-4 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-4 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-4\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>MLPClassifier(alpha=0.01, hidden_layer_sizes=(32, 64, 128),\n",
       "              learning_rate_init=0.01)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-4\" type=\"checkbox\" checked><label for=\"sk-estimator-id-4\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;MLPClassifier<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.5/modules/generated/sklearn.neural_network.MLPClassifier.html\">?<span>Documentation for MLPClassifier</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>MLPClassifier(alpha=0.01, hidden_layer_sizes=(32, 64, 128),\n",
       "              learning_rate_init=0.01)</pre></div> </div></div></div></div>"
      ],
      "text/plain": [
       "MLPClassifier(alpha=0.01, hidden_layer_sizes=(32, 64, 128),\n",
       "              learning_rate_init=0.01)"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Create a model for Support Vector (Machine) Classifier using default parameters\n",
    "mlp_clf_opt = MLPClassifier(alpha=0.01, hidden_layer_sizes=(32, 64, 128), learning_rate_init=0.01)\n",
    "# fit the data to the model, both features and labels to train it\n",
    "mlp_clf_opt.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "cd630dfd-bdc8-479a-9a2f-c3a19b649301",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0,\n",
       "       0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1,\n",
       "       0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0,\n",
       "       0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0,\n",
       "       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0,\n",
       "       0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1,\n",
       "       0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0],\n",
       "      dtype=int64)"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# use the model to classify the datapoints within the test set\n",
    "mlp_opt_pred = mlp_clf_opt.predict(X_test)\n",
    "# print predicted classifications\n",
    "mlp_opt_pred"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "061f12e7-fdec-420e-8da4-723909a99758",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MLP Accuracy: 0.71\n"
     ]
    }
   ],
   "source": [
    "mlp_opt_acc = accuracy_score(y_test, mlp_opt_pred)\n",
    "print(f\"MLP Accuracy: {mlp_opt_acc:.2f}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "772dcd53-cec2-47c5-acf3-3ca89c1de80f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0      0.755     0.808     0.780        99\n",
      "           1      0.604     0.527     0.563        55\n",
      "\n",
      "    accuracy                          0.708       154\n",
      "   macro avg      0.679     0.668     0.672       154\n",
      "weighted avg      0.701     0.708     0.703       154\n",
      "\n"
     ]
    }
   ],
   "source": [
    "Draw_cm(y_test, mlp_opt_pred)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e0adad9b-22b2-4c5c-b9bf-0f95cfaedab7",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:base] *",
   "language": "python",
   "name": "conda-base-py"
  },
  "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
}
