From 0f0ce335efc958e8a7274170bc3e3a03ec690bbd Mon Sep 17 00:00:00 2001
From: christosPro123 <protopapaschristos@gmail.com>
Date: Fri, 2 Jun 2023 12:20:53 +0100
Subject: [PATCH] Removed unnecessary files, added report draft

---
 COMP3217.docx   | Bin 0 -> 13832 bytes
 part1 (2).ipynb | 537 ------------------------------------------
 part1.ipynb     | 615 ++++++++++++++++++++++++++----------------------
 part1.py        |  25 --
 4 files changed, 333 insertions(+), 844 deletions(-)
 create mode 100644 COMP3217.docx
 delete mode 100644 part1 (2).ipynb
 delete mode 100644 part1.py

diff --git a/COMP3217.docx b/COMP3217.docx
new file mode 100644
index 0000000000000000000000000000000000000000..e4bd96f44bf0065b1cc577a2cd42134a8fa508e1
GIT binary patch
literal 13832
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

literal 0
HcmV?d00001

diff --git a/part1 (2).ipynb b/part1 (2).ipynb
deleted file mode 100644
index 93a16f5..0000000
--- a/part1 (2).ipynb	
+++ /dev/null
@@ -1,537 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "code",
-   "execution_count": 1,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "import pandas as pd\n",
-    "import numpy as np\n",
-    "import sklearn\n",
-    "import scipy\n",
-    "from sklearn.model_selection import train_test_split\n",
-    "from sklearn.metrics import accuracy_score\n",
-    "from sklearn.preprocessing import StandardScaler\n",
-    "from sklearn.linear_model import LogisticRegression\n",
-    "import matplotlib.pyplot as plt\n",
-    "from sklearn.decomposition import PCA\n",
-    "from sklearn.impute import SimpleImputer\n",
-    "from sklearn.model_selection import GridSearchCV\n",
-    "import numpy as np\n",
-    "import pandas as pd\n",
-    "from sklearn.preprocessing import StandardScaler\n",
-    "from sklearn.impute import SimpleImputer\n",
-    "from sklearn.decomposition import PCA\n",
-    "from sklearn.model_selection import train_test_split\n",
-    "from sklearn.linear_model import LogisticRegression\n",
-    "from sklearn.metrics import accuracy_score, confusion_matrix, classification_report\n",
-    "from sklearn.model_selection import GridSearchCV\n",
-    "import pandas as pd\n",
-    "from sklearn.impute import SimpleImputer\n",
-    "from sklearn.model_selection import RandomizedSearchCV\n"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 2,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "#Read CSV file as Pandas Dataframe\n",
-    "train_df = pd.read_csv('TrainingDataBinary.csv')"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 3,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "<class 'pandas.core.frame.DataFrame'>\n",
-      "RangeIndex: 6000 entries, 0 to 5999\n",
-      "Columns: 129 entries, 1 to 129\n",
-      "dtypes: float64(112), int64(17)\n",
-      "memory usage: 5.9 MB\n",
-      "None\n"
-     ]
-    }
-   ],
-   "source": [
-    "print(train_df.info())"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 4,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "(array([3000.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,\n",
-       "        3000.]),\n",
-       " array([0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ]),\n",
-       " <BarContainer object of 10 artists>)"
-      ]
-     },
-     "execution_count": 4,
-     "metadata": {},
-     "output_type": "execute_result"
-    },
-    {
-     "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjAAAAGdCAYAAAAMm0nCAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAmMElEQVR4nO3dfXRU5YHH8V8IzAQ0kxgxmWQJyMsRCAJqqGGqUNBsAkSqRzyVQoG2ERY78RxIFzAry2tr2Phei3KstbFnoYB7xNUEAyEYqBBAU7Lymi0SN3hggorJAEJe7/7Rk6sjAZ2YF574/Zxzz3HufebOc5+i8+3kTgixLMsSAACAQbp19gQAAACCRcAAAADjEDAAAMA4BAwAADAOAQMAAIxDwAAAAOMQMAAAwDgEDAAAME73zp5Ae2lqatLJkycVHh6ukJCQzp4OAAD4FizL0tmzZxUXF6du3S7/OUuXDZiTJ08qPj6+s6cBAABa4cSJE+rTp89lj3fZgAkPD5f0jwVwuVydPBsAAPBt+P1+xcfH2+/jl9NlA6b5x0Yul4uAAQDAMN90+wc38QIAAOMQMAAAwDgEDAAAMA4BAwAAjEPAAAAA4xAwAADAOAQMAAAwDgEDAACMQ8AAAADjEDAAAMA4QQXMiy++qBEjRti/nt/j8ejtt9+2j1+8eFFer1fXX3+9rr32Wk2ZMkVVVVUB56isrFRaWpp69eql6OhoLViwQA0NDQFjiouLddttt8npdGrQoEHKzc1t/RUCAIAuJ6iA6dOnj1atWqXS0lK9//77uuuuu3Tvvffq0KFDkqT58+frrbfe0muvvaYdO3bo5MmTuv/+++3nNzY2Ki0tTXV1ddq9e7deffVV5ebmasmSJfaYiooKpaWlafz48SorK9O8efP00EMPacuWLW10yQAAwHQhlmVZ3+UEUVFReuKJJ/TAAw/ohhtu0Lp16/TAAw9Iko4ePaqhQ4eqpKREo0eP1ttvv6177rlHJ0+eVExMjCRpzZo1WrRokT755BM5HA4tWrRI+fn5OnjwoP0aU6dOVXV1tQoKCr71vPx+vyIiIlRTU8Nf5ggAgCG+7ft3q++BaWxs1Pr163X+/Hl5PB6Vlpaqvr5eycnJ9pghQ4aob9++KikpkSSVlJRo+PDhdrxIUmpqqvx+v/0pTklJScA5msc0n+Nyamtr5ff7AzYAANA1dQ/2CQcOHJDH49HFixd17bXXatOmTUpISFBZWZkcDociIyMDxsfExMjn80mSfD5fQLw0H28+dqUxfr9fFy5cUM+ePVucV3Z2tpYvXx7s5bTKjY/md8jrtKWPVqV19hQAAJfB+0rwgv4EZvDgwSorK9PevXv18MMPa9asWTp8+HB7zC0oWVlZqqmpsbcTJ0509pQAAEA7CfoTGIfDoUGDBkmSEhMT9d577+m5557Tgw8+qLq6OlVXVwd8ClNVVSW32y1Jcrvd2rdvX8D5mr+l9NUxX//mUlVVlVwu12U/fZEkp9Mpp9MZ7OUAAAADfeffA9PU1KTa2lolJiaqR48eKioqso+Vl5ersrJSHo9HkuTxeHTgwAGdPn3aHlNYWCiXy6WEhAR7zFfP0Tym+RwAAABBfQKTlZWliRMnqm/fvjp79qzWrVun4uJibdmyRREREUpPT1dmZqaioqLkcrn0yCOPyOPxaPTo0ZKklJQUJSQkaMaMGcrJyZHP59PixYvl9XrtT0/mzp2r3//+91q4cKF++ctfavv27dq4caPy8837+SAAAGgfQQXM6dOnNXPmTJ06dUoREREaMWKEtmzZon/+53+WJD3zzDPq1q2bpkyZotraWqWmpuqFF16wnx8aGqq8vDw9/PDD8ng8uuaaazRr1iytWLHCHtO/f3/l5+dr/vz5eu6559SnTx+9/PLLSk1NbaNLBgAApvvOvwfmatWevweGu8UBAG2J95UvtfvvgQEAAOgsBAwAADAOAQMAAIxDwAAAAOMQMAAAwDgEDAAAMA4BAwAAjEPAAAAA4xAwAADAOAQMAAAwDgEDAACMQ8AAAADjEDAAAMA4BAwAADAOAQMAAIxDwAAAAOMQMAAAwDgEDAAAMA4BAwAAjEPAAAAA4xAwAADAOAQMAAAwDgEDAACMQ8AAAADjEDAAAMA4BAwAADAOAQMAAIxDwAAAAOMQMAAAwDgEDAAAMA4BAwAAjEPAAAAA4xAwAADAOAQMAAAwDgEDAACMQ8AAAADjEDAAAMA4BAwAADAOAQMAAIxDwAAAAOMQMAAAwDgEDAAAMA4BAwAAjEPAAAAA4xAwAADAOAQMAAAwDgEDAACMQ8AAAADjBBUw2dnZ+sEPfqDw8HBFR0frvvvuU3l5ecCYcePGKSQkJGCbO3duwJjKykqlpaWpV69eio6O1oIFC9TQ0BAwpri4WLfddpucTqcGDRqk3Nzc1l0hAADocoIKmB07dsjr9WrPnj0qLCxUfX29UlJSdP78+YBxs2fP1qlTp+wtJyfHPtbY2Ki0tDTV1dVp9+7devXVV5Wbm6slS5bYYyoqKpSWlqbx48errKxM8+bN00MPPaQtW7Z8x8sFAABdQfdgBhcUFAQ8zs3NVXR0tEpLSzV27Fh7f69eveR2u1s8x9atW3X48GFt27ZNMTExuuWWW7Ry5UotWrRIy5Ytk8Ph0Jo1a9S/f3899dRTkqShQ4fq3Xff1TPPPKPU1NRgrxEAAHQx3+kemJqaGklSVFRUwP61a9eqd+/euvnmm5WVlaUvvvjCPlZSUqLhw4crJibG3peamiq/369Dhw7ZY5KTkwPOmZqaqpKSksvOpba2Vn6/P2ADAABdU1CfwHxVU1OT5s2bpzvuuEM333yzvX/atGnq16+f4uLi9MEHH2jRokUqLy/X66+/Lkny+XwB8SLJfuzz+a44xu/368KFC+rZs+cl88nOztby5ctbezkAAMAgrQ4Yr9ergwcP6t133w3YP2fOHPufhw8frtjYWN1999368MMPNXDgwNbP9BtkZWUpMzPTfuz3+xUfH99urwcAADpPq36ElJGRoby8PL3zzjvq06fPFccmJSVJko4dOyZJcrvdqqqqChjT/Lj5vpnLjXG5XC1++iJJTqdTLpcrYAMAAF1TUAFjWZYyMjK0adMmbd++Xf379//G55SVlUmSYmNjJUkej0cHDhzQ6dOn7TGFhYVyuVxKSEiwxxQVFQWcp7CwUB6PJ5jpAgCALiqogPF6vfrP//xPrVu3TuHh4fL5fPL5fLpw4YIk6cMPP9TKlStVWlqqjz76SG+++aZmzpypsWPHasSIEZKklJQUJSQkaMaMGfqf//kfbdmyRYsXL5bX65XT6ZQkzZ07V8ePH9fChQt19OhRvfDCC9q4caPmz5/fxpcPAABMFFTAvPjii6qpqdG4ceMUGxtrbxs2bJAkORwObdu2TSkpKRoyZIh+/etfa8qUKXrrrbfsc4SGhiovL0+hoaHyeDz62c9+ppkzZ2rFihX2mP79+ys/P1+FhYUaOXKknnrqKb388st8hRoAAEgK8iZey7KueDw+Pl47duz4xvP069dPmzdvvuKYcePGaf/+/cFMDwAAfE/wdyEBAADjEDAAAMA4BAwAADAOAQMAAIxDwAAAAOMQMAAAwDgEDAAAMA4BAwAAjEPAAAAA4xAwAADAOAQMAAAwDgEDAACMQ8AAAADjEDAAAMA4BAwAADAOAQMAAIxDwAAAAOMQMAAAwDgEDAAAMA4BAwAAjEPAAAAA4xAwAADAOAQMAAAwDgEDAACMQ8AAAADjEDAAAMA4BAwAADAOAQMAAIxDwAAAAOMQMAAAwDgEDAAAMA4BAwAAjEPAAAAA4xAwAADAOAQMAAAwDgEDAACMQ8AAAADjEDAAAMA4BAwAADAOAQMAAIxDwAAAAOMQMAAAwDgEDAAAMA4BAwAAjEPAAAAA4xAwAADAOAQMAAAwTlABk52drR/84AcKDw9XdHS07rvvPpWXlweMuXjxorxer66//npde+21mjJliqqqqgLGVFZWKi0tTb169VJ0dLQWLFighoaGgDHFxcW67bbb5HQ6NWjQIOXm5rbuCgEAQJcTVMDs2LFDXq9Xe/bsUWFhoerr65WSkqLz58/bY+bPn6+33npLr732mnbs2KGTJ0/q/vvvt483NjYqLS1NdXV12r17t1599VXl5uZqyZIl9piKigqlpaVp/PjxKisr07x58/TQQw9py5YtbXDJAADAdCGWZVmtffInn3yi6Oho7dixQ2PHjlVNTY1uuOEGrVu3Tg888IAk6ejRoxo6dKhKSko0evRovf3227rnnnt08uRJxcTESJLWrFmjRYsW6ZNPPpHD4dCiRYuUn5+vgwcP2q81depUVVdXq6Cg4FvNze/3KyIiQjU1NXK5XK29xBbd+Gh+m56vI3y0Kq2zpwAAuAzeV770bd+/v9M9MDU1NZKkqKgoSVJpaanq6+uVnJxsjxkyZIj69u2rkpISSVJJSYmGDx9ux4skpaamyu/369ChQ/aYr56jeUzzOQAAwPdb99Y+sampSfPmzdMdd9yhm2++WZLk8/nkcDgUGRkZMDYmJkY+n88e89V4aT7efOxKY/x+vy5cuKCePXteMp/a2lrV1tbaj/1+f2svDQAAXOVa/QmM1+vVwYMHtX79+racT6tlZ2crIiLC3uLj4zt7SgAAoJ20KmAyMjKUl5end955R3369LH3u91u1dXVqbq6OmB8VVWV3G63Pebr30pqfvxNY1wuV4ufvkhSVlaWampq7O3EiROtuTQAAGCAoALGsixlZGRo06ZN2r59u/r37x9wPDExUT169FBRUZG9r7y8XJWVlfJ4PJIkj8ejAwcO6PTp0/aYwsJCuVwuJSQk2GO+eo7mMc3naInT6ZTL5QrYAABA1xTUPTBer1fr1q3Tf//3fys8PNy+ZyUiIkI9e/ZURESE0tPTlZmZqaioKLlcLj3yyCPyeDwaPXq0JCklJUUJCQmaMWOGcnJy5PP5tHjxYnm9XjmdTknS3Llz9fvf/14LFy7UL3/5S23fvl0bN25Ufr55d2kDAIC2F9QnMC+++KJqamo0btw4xcbG2tuGDRvsMc8884zuueceTZkyRWPHjpXb7dbrr79uHw8NDVVeXp5CQ0Pl8Xj0s5/9TDNnztSKFSvsMf3791d+fr4KCws1cuRIPfXUU3r55ZeVmpraBpcMAABM951+D8zVjN8DE4jfAwMAVy/eV77UIb8HBgAAoDMQMAAAwDgEDAAAMA4BAwAAjEPAAAAA4xAwAADAOAQMAAAwDgEDAACMQ8AAAADjEDAAAMA4BAwAADAOAQMAAIxDwAAAAOMQMAAAwDgEDAAAMA4BAwAAjEPAAAAA4xAwAADAOAQMAAAwDgEDAACMQ8AAAADjEDAAAMA4BAwAADAOAQMAAIxDwAAAAOMQMAAAwDgEDAAAMA4BAwAAjEPAAAAA4xAwAADAOAQMAAAwDgEDAACMQ8AAAADjEDAAAMA4BAwAADAOAQMAAIxDwAAAAOMQMAAAwDgEDAAAMA4BAwAAjEPAAAAA4xAwAADAOAQMAAAwDgEDAACMQ8AAAADjEDAAAMA4BAwAADAOAQMAAIwTdMDs3LlTkydPVlxcnEJCQvTGG28EHP/5z3+ukJCQgG3ChAkBY86cOaPp06fL5XIpMjJS6enpOnfuXMCYDz74QGPGjFFYWJji4+OVk5MT/NUBAIAuKeiAOX/+vEaOHKnVq1dfdsyECRN06tQpe/vLX/4ScHz69Ok6dOiQCgsLlZeXp507d2rOnDn2cb/fr5SUFPXr10+lpaV64okntGzZMr300kvBThcAAHRB3YN9wsSJEzVx4sQrjnE6nXK73S0eO3LkiAoKCvTee+9p1KhRkqTnn39ekyZN0pNPPqm4uDitXbtWdXV1euWVV+RwODRs2DCVlZXp6aefDggdAADw/dQu98AUFxcrOjpagwcP1sMPP6zPPvvMPlZSUqLIyEg7XiQpOTlZ3bp10969e+0xY8eOlcPhsMekpqaqvLxcn3/+eYuvWVtbK7/fH7ABAICuqc0DZsKECfrzn/+soqIi/cd//Id27NihiRMnqrGxUZLk8/kUHR0d8Jzu3bsrKipKPp/PHhMTExMwpvlx85ivy87OVkREhL3Fx8e39aUBAICrRNA/QvomU6dOtf95+PDhGjFihAYOHKji4mLdfffdbf1ytqysLGVmZtqP/X4/EQMAQBfV7l+jHjBggHr37q1jx45Jktxut06fPh0wpqGhQWfOnLHvm3G73aqqqgoY0/z4cvfWOJ1OuVyugA0AAHRN7R4wH3/8sT777DPFxsZKkjwej6qrq1VaWmqP2b59u5qampSUlGSP2blzp+rr6+0xhYWFGjx4sK677rr2njIAALjKBR0w586dU1lZmcrKyiRJFRUVKisrU2Vlpc6dO6cFCxZoz549+uijj1RUVKR7771XgwYNUmpqqiRp6NChmjBhgmbPnq19+/Zp165dysjI0NSpUxUXFydJmjZtmhwOh9LT03Xo0CFt2LBBzz33XMCPiAAAwPdX0AHz/vvv69Zbb9Wtt94qScrMzNStt96qJUuWKDQ0VB988IF+/OMf66abblJ6eroSExP117/+VU6n0z7H2rVrNWTIEN19992aNGmS7rzzzoDf8RIREaGtW7eqoqJCiYmJ+vWvf60lS5bwFWoAACCpFTfxjhs3TpZlXfb4li1bvvEcUVFRWrdu3RXHjBgxQn/961+DnR4AAPge4O9CAgAAxiFgAACAcQgYAABgHAIGAAAYh4ABAADGIWAAAIBxCBgAAGAcAgYAABiHgAEAAMYhYAAAgHEIGAAAYBwCBgAAGIeAAQAAxiFgAACAcQgYAABgHAIGAAAYh4ABAADGIWAAAIBxCBgAAGAcAgYAABiHgAEAAMYhYAAAgHEIGAAAYBwCBgAAGIeAAQAAxiFgAACAcQgYAABgHAIGAAAYh4ABAADGIWAAAIBxCBgAAGAcAgYAABiHgAEAAMYhYAAAgHEIGAAAYBwCBgAAGIeAAQAAxiFgAACAcQgYAABgHAIGAAAYh4ABAADGIWAAAIBxCBgAAGAcAgYAABiHgAEAAMYhYAAAgHEIGAAAYBwCBgAAGCfogNm5c6cmT56suLg4hYSE6I033gg4blmWlixZotjYWPXs2VPJycn6+9//HjDmzJkzmj59ulwulyIjI5Wenq5z584FjPnggw80ZswYhYWFKT4+Xjk5OcFfHQAA6JKCDpjz589r5MiRWr16dYvHc3Jy9Lvf/U5r1qzR3r17dc011yg1NVUXL160x0yfPl2HDh1SYWGh8vLytHPnTs2ZM8c+7vf7lZKSon79+qm0tFRPPPGEli1bppdeeqkVlwgAALqa7sE+YeLEiZo4cWKLxyzL0rPPPqvFixfr3nvvlST9+c9/VkxMjN544w1NnTpVR44cUUFBgd577z2NGjVKkvT8889r0qRJevLJJxUXF6e1a9eqrq5Or7zyihwOh4YNG6aysjI9/fTTAaEDAAC+n9r0HpiKigr5fD4lJyfb+yIiIpSUlKSSkhJJUklJiSIjI+14kaTk5GR169ZNe/futceMHTtWDofDHpOamqry8nJ9/vnnLb52bW2t/H5/wAYAALqmNg0Yn88nSYqJiQnYHxMTYx/z+XyKjo4OON69e3dFRUUFjGnpHF99ja/Lzs5WRESEvcXHx3/3CwIAAFelLvMtpKysLNXU1NjbiRMnOntKAACgnbRpwLjdbklSVVVVwP6qqir7mNvt1unTpwOONzQ06MyZMwFjWjrHV1/j65xOp1wuV8AGAAC6pjYNmP79+8vtdquoqMje5/f7tXfvXnk8HkmSx+NRdXW1SktL7THbt29XU1OTkpKS7DE7d+5UfX29PaawsFCDBw/Wdddd15ZTBgAABgo6YM6dO6eysjKVlZVJ+seNu2VlZaqsrFRISIjmzZun3/zmN3rzzTd14MABzZw5U3FxcbrvvvskSUOHDtWECRM0e/Zs7du3T7t27VJGRoamTp2quLg4SdK0adPkcDiUnp6uQ4cOacOGDXruueeUmZnZZhcOAADMFfTXqN9//32NHz/eftwcFbNmzVJubq4WLlyo8+fPa86cOaqurtadd96pgoIChYWF2c9Zu3atMjIydPfdd6tbt26aMmWKfve739nHIyIitHXrVnm9XiUmJqp3795asmQJX6EGAACSpBDLsqzOnkR78Pv9ioiIUE1NTZvfD3Pjo/lter6O8NGqtM6eAgDgMnhf+dK3ff/uMt9CAgAA3x8EDAAAMA4BAwAAjEPAAAAA4xAwAADAOAQMAAAwDgEDAACMQ8AAAADjEDAAAMA4BAwAADAOAQMAAIxDwAAAAOMQMAAAwDgEDAAAMA4BAwAAjEPAAAAA4xAwAADAOAQMAAAwDgEDAACMQ8AAAADjEDAAAMA4BAwAADAOAQMAAIxDwAAAAOMQMAAAwDgEDAAAMA4BAwAAjEPAAAAA4xAwAADAOAQMAAAwDgEDAACMQ8AAAADjEDAAAMA4BAwAADAOAQMAAIxDwAAAAOMQMAAAwDgEDAAAMA4BAwAAjEPAAAAA4xAwAADAOAQMAAAwDgEDAACMQ8AAAADjEDAAAMA4BAwAADAOAQMAAIzT5gGzbNkyhYSEBGxDhgyxj1+8eFFer1fXX3+9rr32Wk2ZMkVVVVUB56isrFRaWpp69eql6OhoLViwQA0NDW09VQAAYKju7XHSYcOGadu2bV++SPcvX2b+/PnKz8/Xa6+9poiICGVkZOj+++/Xrl27JEmNjY1KS0uT2+3W7t27derUKc2cOVM9evTQ448/3h7TBQAAhmmXgOnevbvcbvcl+2tqavTHP/5R69at01133SVJ+tOf/qShQ4dqz549Gj16tLZu3arDhw9r27ZtiomJ0S233KKVK1dq0aJFWrZsmRwOR3tMGQAAGKRd7oH5+9//rri4OA0YMEDTp09XZWWlJKm0tFT19fVKTk62xw4ZMkR9+/ZVSUmJJKmkpETDhw9XTEyMPSY1NVV+v1+HDh1qj+kCAADDtPknMElJScrNzdXgwYN16tQpLV++XGPGjNHBgwfl8/nkcDgUGRkZ8JyYmBj5fD5Jks/nC4iX5uPNxy6ntrZWtbW19mO/399GVwQAAK42bR4wEydOtP95xIgRSkpKUr9+/bRx40b17NmzrV/Olp2dreXLl7fb+QEAwNWj3b9GHRkZqZtuuknHjh2T2+1WXV2dqqurA8ZUVVXZ98y43e5LvpXU/Lil+2qaZWVlqaamxt5OnDjRthcCAACuGu0eMOfOndOHH36o2NhYJSYmqkePHioqKrKPl5eXq7KyUh6PR5Lk8Xh04MABnT592h5TWFgol8ulhISEy76O0+mUy+UK2AAAQNfU5j9C+td//VdNnjxZ/fr108mTJ7V06VKFhobqpz/9qSIiIpSenq7MzExFRUXJ5XLpkUcekcfj0ejRoyVJKSkpSkhI0IwZM5STkyOfz6fFixfL6/XK6XS29XQBAICB2jxgPv74Y/30pz/VZ599phtuuEF33nmn9uzZoxtuuEGS9Mwzz6hbt26aMmWKamtrlZqaqhdeeMF+fmhoqPLy8vTwww/L4/Hommuu0axZs7RixYq2nioAADBUmwfM+vXrr3g8LCxMq1ev1urVqy87pl+/ftq8eXNbTw0AAHQR/F1IAADAOAQMAAAwDgEDAACMQ8AAAADjEDAAAMA4BAwAADAOAQMAAIxDwAAAAOMQMAAAwDgEDAAAMA4BAwAAjEPAAAAA4xAwAADAOAQMAAAwDgEDAACMQ8AAAADjEDAAAMA4BAwAADAOAQMAAIxDwAAAAOMQMAAAwDgEDAAAMA4BAwAAjEPAAAAA4xAwAADAOAQMAAAwDgEDAACMQ8AAAADjEDAAAMA4BAwAADAOAQMAAIxDwAAAAOMQMAAAwDgEDAAAMA4BAwAAjEPAAAAA4xAwAADAOAQMAAAwDgEDAACMQ8AAAADjEDAAAMA4BAwAADAOAQMAAIxDwAAAAOMQMAAAwDgEDAAAMA4BAwAAjEPAAAAA41zVAbN69WrdeOONCgsLU1JSkvbt29fZUwIAAFeBqzZgNmzYoMzMTC1dulR/+9vfNHLkSKWmpur06dOdPTUAANDJrtqAefrppzV79mz94he/UEJCgtasWaNevXrplVde6eypAQCATta9syfQkrq6OpWWliorK8ve161bNyUnJ6ukpKTF59TW1qq2ttZ+XFNTI0ny+/1tPr+m2i/a/JztrT3WAQDQNnhfufS8lmVdcdxVGTCffvqpGhsbFRMTE7A/JiZGR48ebfE52dnZWr58+SX74+Pj22WOpol4trNnAADoStr7feXs2bOKiIi47PGrMmBaIysrS5mZmfbjpqYmnTlzRtdff71CQkLa7HX8fr/i4+N14sQJuVyuNjsvLsVadwzWuWOwzh2Dde4Y7bnOlmXp7NmziouLu+K4qzJgevfurdDQUFVVVQXsr6qqktvtbvE5TqdTTqczYF9kZGR7TVEul4t/OToIa90xWOeOwTp3DNa5Y7TXOl/pk5dmV+VNvA6HQ4mJiSoqKrL3NTU1qaioSB6PpxNnBgAArgZX5ScwkpSZmalZs2Zp1KhRuv322/Xss8/q/Pnz+sUvftHZUwMAAJ3sqg2YBx98UJ988omWLFkin8+nW265RQUFBZfc2NvRnE6nli5desmPq9D2WOuOwTp3DNa5Y7DOHeNqWOcQ65u+pwQAAHCVuSrvgQEAALgSAgYAABiHgAEAAMYhYAAAgHEImBasXr1aN954o8LCwpSUlKR9+/Zdcfxrr72mIUOGKCwsTMOHD9fmzZs7aKbmC2at//CHP2jMmDG67rrrdN111yk5Ofkb/7fBPwT7Z7rZ+vXrFRISovvuu699J9hFBLvO1dXV8nq9io2NldPp1E033cR/P76FYNf52Wef1eDBg9WzZ0/Fx8dr/vz5unjxYgfN1kw7d+7U5MmTFRcXp5CQEL3xxhvf+Jzi4mLddtttcjqdGjRokHJzc9t3khYCrF+/3nI4HNYrr7xiHTp0yJo9e7YVGRlpVVVVtTh+165dVmhoqJWTk2MdPnzYWrx4sdWjRw/rwIEDHTxz8wS71tOmTbNWr15t7d+/3zpy5Ij185//3IqIiLA+/vjjDp65WYJd52YVFRXWP/3TP1ljxoyx7r333o6ZrMGCXefa2lpr1KhR1qRJk6x3333XqqiosIqLi62ysrIOnrlZgl3ntWvXWk6n01q7dq1VUVFhbdmyxYqNjbXmz5/fwTM3y+bNm63HHnvMev311y1J1qZNm644/vjx41avXr2szMxM6/Dhw9bzzz9vhYaGWgUFBe02RwLma26//XbL6/XajxsbG624uDgrOzu7xfE/+clPrLS0tIB9SUlJ1r/8y7+06zy7gmDX+usaGhqs8PBw69VXX22vKXYJrVnnhoYG64c//KH18ssvW7NmzSJgvoVg1/nFF1+0BgwYYNXV1XXUFLuEYNfZ6/Vad911V8C+zMxM64477mjXeXYl3yZgFi5caA0bNixg34MPPmilpqa227z4EdJX1NXVqbS0VMnJyfa+bt26KTk5WSUlJS0+p6SkJGC8JKWmpl52PP6hNWv9dV988YXq6+sVFRXVXtM0XmvXecWKFYqOjlZ6enpHTNN4rVnnN998Ux6PR16vVzExMbr55pv1+OOPq7GxsaOmbZzWrPMPf/hDlZaW2j9mOn78uDZv3qxJkyZ1yJy/LzrjvfCq/U28neHTTz9VY2PjJb/tNyYmRkePHm3xOT6fr8XxPp+v3ebZFbRmrb9u0aJFiouLu+RfGnypNev87rvv6o9//KPKyso6YIZdQ2vW+fjx49q+fbumT5+uzZs369ixY/rVr36l+vp6LV26tCOmbZzWrPO0adP06aef6s4775RlWWpoaNDcuXP1b//2bx0x5e+Ny70X+v1+XbhwQT179mzz1+QTGBhp1apVWr9+vTZt2qSwsLDOnk6XcfbsWc2YMUN/+MMf1Lt3786eTpfW1NSk6OhovfTSS0pMTNSDDz6oxx57TGvWrOnsqXUpxcXFevzxx/XCCy/ob3/7m15//XXl5+dr5cqVnT01fEd8AvMVvXv3VmhoqKqqqgL2V1VVye12t/gct9sd1Hj8Q2vWutmTTz6pVatWadu2bRoxYkR7TtN4wa7zhx9+qI8++kiTJ0+29zU1NUmSunfvrvLycg0cOLB9J22g1vx5jo2NVY8ePRQaGmrvGzp0qHw+n+rq6uRwONp1ziZqzTr/+7//u2bMmKGHHnpIkjR8+HCdP39ec+bM0WOPPaZu3fj/8W3hcu+FLperXT59kfgEJoDD4VBiYqKKiorsfU1NTSoqKpLH42nxOR6PJ2C8JBUWFl52PP6hNWstSTk5OVq5cqUKCgo0atSojpiq0YJd5yFDhujAgQMqKyuztx//+McaP368ysrKFB8f35HTN0Zr/jzfcccdOnbsmB2IkvS///u/io2NJV4uozXr/MUXX1wSKc3RaPFXAbaZTnkvbLfbgw21fv16y+l0Wrm5udbhw4etOXPmWJGRkZbP57Msy7JmzJhhPfroo/b4Xbt2Wd27d7eefPJJ68iRI9bSpUv5GvW3FOxar1q1ynI4HNZ//dd/WadOnbK3s2fPdtYlGCHYdf46voX07QS7zpWVlVZ4eLiVkZFhlZeXW3l5eVZ0dLT1m9/8prMuwQjBrvPSpUut8PBw6y9/+Yt1/Phxa+vWrdbAgQOtn/zkJ511CUY4e/astX//fmv//v2WJOvpp5+29u/fb/3f//2fZVmW9eijj1ozZsywxzd/jXrBggXWkSNHrNWrV/M16s7w/PPPW3379rUcDod1++23W3v27LGP/ehHP7JmzZoVMH7jxo3WTTfdZDkcDmvYsGFWfn5+B8/YXMGsdb9+/SxJl2xLly7t+IkbJtg/019FwHx7wa7z7t27raSkJMvpdFoDBgywfvvb31oNDQ0dPGvzBLPO9fX11rJly6yBAwdaYWFhVnx8vPWrX/3K+vzzzzt+4gZ55513WvzvbfPazpo1y/rRj350yXNuueUWy+FwWAMGDLD+9Kc/tescQyyLz9AAAIBZuAcGAAAYh4ABAADGIWAAAIBxCBgAAGAcAgYAABiHgAEAAMYhYAAAgHEIGAAAYBwCBgAAGIeAAQAAxiFgAACAcQgYAABgnP8HQI1HGawPwtEAAAAASUVORK5CYII=",
-      "text/plain": [
-       "<Figure size 640x480 with 1 Axes>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "# Create a histogram to show the distribution of a column\n",
-    "plt.hist(train_df['129'])"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 5,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "scaler = StandardScaler()\n",
-    "\n",
-    "# Separate the features from the target variable\n",
-    "X = train_df.drop('129', axis=1)\n",
-    "y = train_df['129']\n",
-    "\n",
-    "#Fix infinite value error\n",
-    "# X[X == np.inf] = np.finfo('float64').max\n",
-    "X.replace([np.inf,-np.inf],0,inplace=True)\n",
-    "\n",
-    "# Create a SimpleImputer object to replace NaN values with the mean value of the corresponding column\n",
-    "imputer = SimpleImputer(strategy='mean')\n",
-    "\n",
-    "# Impute the missing values in the features data\n",
-    "X_imputed = imputer.fit_transform(X)\n",
-    "\n",
-    "# Fit the scaler to the features data and transform the data\n",
-    "X_scaled = scaler.fit_transform(X_imputed)\n",
-    "\n",
-    "# # The transformed data will be a numpy array, so you can convert it back to a DataFrame\n",
-    "# X_scaled_df = pd.DataFrame(X_scaled, columns=X.columns)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 6,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "#PCA\n",
-    "pca = PCA(n_components=100)\n",
-    "X_pca = pca.fit_transform(X_scaled)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 7,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Accuracy: 0.895\n",
-      "Classification Report:\n",
-      "               precision    recall  f1-score   support\n",
-      "\n",
-      "           0       0.86      0.94      0.90       588\n",
-      "           1       0.93      0.86      0.89       612\n",
-      "\n",
-      "    accuracy                           0.90      1200\n",
-      "   macro avg       0.90      0.90      0.89      1200\n",
-      "weighted avg       0.90      0.90      0.89      1200\n",
-      "\n"
-     ]
-    },
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
-      "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
-      "\n",
-      "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
-      "    https://scikit-learn.org/stable/modules/preprocessing.html\n",
-      "Please also refer to the documentation for alternative solver options:\n",
-      "    https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
-      "  n_iter_i = _check_optimize_result(\n"
-     ]
-    }
-   ],
-   "source": [
-    "#split data\n",
-    "X_train, X_test, y_train, y_test = train_test_split(X_pca, y, test_size=0.2, random_state=42)\n",
-    "\n",
-    "#train the model\n",
-    "log_reg = LogisticRegression()\n",
-    "log_reg.fit(X_train, y_train)\n",
-    "\n",
-    "# 5. Evaluate the model on the testing set\n",
-    "y_pred = log_reg.predict(X_test)\n",
-    "accuracy = accuracy_score(y_test, y_pred)\n",
-    "\n",
-    "report = classification_report(y_test, y_pred)\n",
-    "\n",
-    "print(\"Accuracy:\", accuracy)\n",
-    "\n",
-    "print(\"Classification Report:\\n\", report)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 8,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Confusion Matrix:\n",
-      " [[550  38]\n",
-      " [ 88 524]]\n"
-     ]
-    }
-   ],
-   "source": [
-    "conf_matrix = confusion_matrix(y_test, y_pred)\n",
-    "print(\"Confusion Matrix:\\n\", conf_matrix)"
-   ]
-  },
-  {
-   "attachments": {},
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "[[True Negatives (TN), False Positives (FP)],\n",
-    " [False Negatives (FN), True Positives (TP)]]"
-   ]
-  },
-  {
-   "attachments": {},
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Fine tuning"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 9,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Fitting 3 folds for each of 100 candidates, totalling 300 fits\n"
-     ]
-    },
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\model_selection\\_validation.py:378: FitFailedWarning: \n",
-      "120 fits failed out of a total of 300.\n",
-      "The score on these train-test partitions for these parameters will be set to nan.\n",
-      "If these failures are not expected, you can try to debug them by setting error_score='raise'.\n",
-      "\n",
-      "Below are more details about the failures:\n",
-      "--------------------------------------------------------------------------------\n",
-      "24 fits failed with the following error:\n",
-      "Traceback (most recent call last):\n",
-      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\model_selection\\_validation.py\", line 686, in _fit_and_score\n",
-      "    estimator.fit(X_train, y_train, **fit_params)\n",
-      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 1162, in fit\n",
-      "    solver = _check_solver(self.solver, self.penalty, self.dual)\n",
-      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 54, in _check_solver\n",
-      "    raise ValueError(\n",
-      "ValueError: Solver newton-cg supports only 'l2' or 'none' penalties, got elasticnet penalty.\n",
-      "\n",
-      "--------------------------------------------------------------------------------\n",
-      "15 fits failed with the following error:\n",
-      "Traceback (most recent call last):\n",
-      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\model_selection\\_validation.py\", line 686, in _fit_and_score\n",
-      "    estimator.fit(X_train, y_train, **fit_params)\n",
-      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 1162, in fit\n",
-      "    solver = _check_solver(self.solver, self.penalty, self.dual)\n",
-      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 71, in _check_solver\n",
-      "    raise ValueError(\"penalty='none' is not supported for the liblinear solver\")\n",
-      "ValueError: penalty='none' is not supported for the liblinear solver\n",
-      "\n",
-      "--------------------------------------------------------------------------------\n",
-      "18 fits failed with the following error:\n",
-      "Traceback (most recent call last):\n",
-      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\model_selection\\_validation.py\", line 686, in _fit_and_score\n",
-      "    estimator.fit(X_train, y_train, **fit_params)\n",
-      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 1162, in fit\n",
-      "    solver = _check_solver(self.solver, self.penalty, self.dual)\n",
-      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 54, in _check_solver\n",
-      "    raise ValueError(\n",
-      "ValueError: Solver lbfgs supports only 'l2' or 'none' penalties, got l1 penalty.\n",
-      "\n",
-      "--------------------------------------------------------------------------------\n",
-      "6 fits failed with the following error:\n",
-      "Traceback (most recent call last):\n",
-      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\model_selection\\_validation.py\", line 686, in _fit_and_score\n",
-      "    estimator.fit(X_train, y_train, **fit_params)\n",
-      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 1291, in fit\n",
-      "    fold_coefs_ = Parallel(n_jobs=self.n_jobs, verbose=self.verbose, prefer=prefer)(\n",
-      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\utils\\parallel.py\", line 63, in __call__\n",
-      "    return super().__call__(iterable_with_config)\n",
-      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\joblib\\parallel.py\", line 1085, in __call__\n",
-      "    if self.dispatch_one_batch(iterator):\n",
-      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\joblib\\parallel.py\", line 901, in dispatch_one_batch\n",
-      "    self._dispatch(tasks)\n",
-      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\joblib\\parallel.py\", line 819, in _dispatch\n",
-      "    job = self._backend.apply_async(batch, callback=cb)\n",
-      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\joblib\\_parallel_backends.py\", line 208, in apply_async\n",
-      "    result = ImmediateResult(func)\n",
-      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\joblib\\_parallel_backends.py\", line 597, in __init__\n",
-      "    self.results = batch()\n",
-      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\joblib\\parallel.py\", line 288, in __call__\n",
-      "    return [func(*args, **kwargs)\n",
-      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\joblib\\parallel.py\", line 288, in <listcomp>\n",
-      "    return [func(*args, **kwargs)\n",
-      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\utils\\parallel.py\", line 123, in __call__\n",
-      "    return self.function(*args, **kwargs)\n",
-      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 521, in _logistic_regression_path\n",
-      "    alpha = (1.0 / C) * (1 - l1_ratio)\n",
-      "TypeError: unsupported operand type(s) for -: 'int' and 'NoneType'\n",
-      "\n",
-      "--------------------------------------------------------------------------------\n",
-      "21 fits failed with the following error:\n",
-      "Traceback (most recent call last):\n",
-      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\model_selection\\_validation.py\", line 686, in _fit_and_score\n",
-      "    estimator.fit(X_train, y_train, **fit_params)\n",
-      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 1162, in fit\n",
-      "    solver = _check_solver(self.solver, self.penalty, self.dual)\n",
-      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 64, in _check_solver\n",
-      "    raise ValueError(\n",
-      "ValueError: Only 'saga' solver supports elasticnet penalty, got solver=liblinear.\n",
-      "\n",
-      "--------------------------------------------------------------------------------\n",
-      "12 fits failed with the following error:\n",
-      "Traceback (most recent call last):\n",
-      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\model_selection\\_validation.py\", line 686, in _fit_and_score\n",
-      "    estimator.fit(X_train, y_train, **fit_params)\n",
-      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 1162, in fit\n",
-      "    solver = _check_solver(self.solver, self.penalty, self.dual)\n",
-      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 54, in _check_solver\n",
-      "    raise ValueError(\n",
-      "ValueError: Solver sag supports only 'l2' or 'none' penalties, got l1 penalty.\n",
-      "\n",
-      "--------------------------------------------------------------------------------\n",
-      "9 fits failed with the following error:\n",
-      "Traceback (most recent call last):\n",
-      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\model_selection\\_validation.py\", line 686, in _fit_and_score\n",
-      "    estimator.fit(X_train, y_train, **fit_params)\n",
-      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 1162, in fit\n",
-      "    solver = _check_solver(self.solver, self.penalty, self.dual)\n",
-      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 54, in _check_solver\n",
-      "    raise ValueError(\n",
-      "ValueError: Solver sag supports only 'l2' or 'none' penalties, got elasticnet penalty.\n",
-      "\n",
-      "--------------------------------------------------------------------------------\n",
-      "6 fits failed with the following error:\n",
-      "Traceback (most recent call last):\n",
-      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\model_selection\\_validation.py\", line 686, in _fit_and_score\n",
-      "    estimator.fit(X_train, y_train, **fit_params)\n",
-      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 1162, in fit\n",
-      "    solver = _check_solver(self.solver, self.penalty, self.dual)\n",
-      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 54, in _check_solver\n",
-      "    raise ValueError(\n",
-      "ValueError: Solver lbfgs supports only 'l2' or 'none' penalties, got elasticnet penalty.\n",
-      "\n",
-      "--------------------------------------------------------------------------------\n",
-      "9 fits failed with the following error:\n",
-      "Traceback (most recent call last):\n",
-      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\model_selection\\_validation.py\", line 686, in _fit_and_score\n",
-      "    estimator.fit(X_train, y_train, **fit_params)\n",
-      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 1162, in fit\n",
-      "    solver = _check_solver(self.solver, self.penalty, self.dual)\n",
-      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 54, in _check_solver\n",
-      "    raise ValueError(\n",
-      "ValueError: Solver newton-cg supports only 'l2' or 'none' penalties, got l1 penalty.\n",
-      "\n",
-      "  warnings.warn(some_fits_failed_message, FitFailedWarning)\n",
-      "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\model_selection\\_search.py:952: UserWarning: One or more of the test scores are non-finite: [       nan 0.87666667 0.92083333        nan        nan 0.87416667\n",
-      "        nan 0.87666667 0.864375   0.87645833 0.78208333 0.87854167\n",
-      " 0.72333333 0.87854167 0.85645833        nan        nan        nan\n",
-      " 0.85083333 0.72333333 0.5025     0.92020833 0.78208333 0.918125\n",
-      " 0.86458333 0.87666667        nan 0.9225     0.90375           nan\n",
-      " 0.78208333        nan 0.5025            nan        nan        nan\n",
-      "        nan 0.78208333        nan 0.78208333 0.85645833 0.628125\n",
-      " 0.918125          nan 0.49916667 0.85875           nan 0.49916667\n",
-      "        nan        nan 0.87791667 0.86520833        nan 0.9225\n",
-      "        nan 0.918125   0.865625   0.84166667        nan 0.9225\n",
-      " 0.90375    0.918125   0.87375    0.918125   0.864375          nan\n",
-      "        nan 0.87666667        nan 0.90375    0.85625    0.62895833\n",
-      "        nan        nan 0.85625           nan        nan 0.87854167\n",
-      " 0.85645833        nan 0.87791667 0.90395833 0.87854167        nan\n",
-      "        nan 0.87375    0.78208333 0.87666667        nan        nan\n",
-      " 0.78208333 0.90270833        nan        nan 0.85625           nan\n",
-      " 0.86583333        nan        nan        nan]\n",
-      "  warnings.warn(\n",
-      "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:1173: FutureWarning: `penalty='none'`has been deprecated in 1.2 and will be removed in 1.4. To keep the past behaviour, set `penalty=None`.\n",
-      "  warnings.warn(\n",
-      "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:1181: UserWarning: Setting penalty=None will ignore the C and l1_ratio parameters\n",
-      "  warnings.warn(\n"
-     ]
-    },
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Best Parameters: {'solver': 'newton-cg', 'penalty': 'none', 'max_iter': 100, 'C': 0.005994842503189409}\n",
-      "Best Score: 0.9225\n",
-      "Accuracy: 0.9325\n",
-      "Confusion Matrix:\n",
-      " [[557  31]\n",
-      " [ 50 562]]\n",
-      "Classification Report:\n",
-      "               precision    recall  f1-score   support\n",
-      "\n",
-      "           0       0.92      0.95      0.93       588\n",
-      "           1       0.95      0.92      0.93       612\n",
-      "\n",
-      "    accuracy                           0.93      1200\n",
-      "   macro avg       0.93      0.93      0.93      1200\n",
-      "weighted avg       0.93      0.93      0.93      1200\n",
-      "\n"
-     ]
-    },
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\utils\\optimize.py:210: ConvergenceWarning: newton-cg failed to converge. Increase the number of iterations.\n",
-      "  warnings.warn(\n"
-     ]
-    }
-   ],
-   "source": [
-    "\n",
-    "param_dist = {\n",
-    "    'penalty': ['l1', 'l2', 'elasticnet', 'none'],\n",
-    "    'C': np.logspace(-4, 4, 10),\n",
-    "    'solver': ['newton-cg', 'lbfgs', 'liblinear', 'sag', 'saga'],\n",
-    "    'max_iter': [100, 500, 1000],\n",
-    "}\n",
-    "\n",
-    "# Create the RandomizedSearchCV object with the logistic regression model, hyperparameters, and cross-validation\n",
-    "log_reg = LogisticRegression()\n",
-    "random_search = RandomizedSearchCV(log_reg, param_dist, n_iter=100, cv=3, n_jobs=-1, verbose=1, random_state=42)\n",
-    "\n",
-    "# Fit the random search to the training data\n",
-    "random_search.fit(X_train, y_train)\n",
-    "\n",
-    "# Check the best hyperparameters found\n",
-    "print(\"Best Parameters:\", random_search.best_params_)\n",
-    "print(\"Best Score:\", random_search.best_score_)\n",
-    "\n",
-    "# Use the best estimator for predictions and evaluation\n",
-    "best_model = random_search.best_estimator_\n",
-    "y_pred = best_model.predict(X_test)\n",
-    "accuracy = accuracy_score(y_test, y_pred)\n",
-    "conf_matrix = confusion_matrix(y_test, y_pred)\n",
-    "report = classification_report(y_test, y_pred)\n",
-    "\n",
-    "print(\"Accuracy:\", accuracy)\n",
-    "print(\"Confusion Matrix:\\n\", conf_matrix)\n",
-    "print(\"Classification Report:\\n\", report)\n"
-   ]
-  },
-  {
-   "attachments": {},
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Predict"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 13,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "test_data = pd.read_csv('TestingDataBinary.csv')"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 14,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# Preprocessing\n",
-    "X_new = test_data\n",
-    "X_new.replace([np.inf, -np.inf], 0, inplace=True)\n",
-    "\n",
-    "# Impute the missing values in the features data\n",
-    "X_imputed_new = imputer.transform(X_new)\n",
-    "\n",
-    "# Scale the features data\n",
-    "X_scaled_new = scaler.transform(X_imputed_new)\n",
-    "\n",
-    "# Apply PCA transformation\n",
-    "X_pca_new = pca.transform(X_scaled_new)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 16,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# Use the best estimator for predictions on the new data\n",
-    "y_pred_new = best_model.predict(X_pca_new)\n",
-    "\n",
-    "# Save the predictions to a new column in the DataFrame\n",
-    "test_data['predicted_marker'] = y_pred_new\n",
-    "\n",
-    "# Save the updated DataFrame to a new CSV file\n",
-    "test_data.to_csv('TestingDataBinary_with_predictions.csv', index=False)"
-   ]
-  }
- ],
- "metadata": {
-  "kernelspec": {
-   "display_name": "Python 3",
-   "language": "python",
-   "name": "python3"
-  },
-  "language_info": {
-   "codemirror_mode": {
-    "name": "ipython",
-    "version": 3
-   },
-   "file_extension": ".py",
-   "mimetype": "text/x-python",
-   "name": "python",
-   "nbconvert_exporter": "python",
-   "pygments_lexer": "ipython3",
-   "version": "3.9.0"
-  },
-  "orig_nbformat": 4
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
diff --git a/part1.ipynb b/part1.ipynb
index 0824ced..4d6c92e 100644
--- a/part1.ipynb
+++ b/part1.ipynb
@@ -17,7 +17,19 @@
     "import matplotlib.pyplot as plt\n",
     "from sklearn.decomposition import PCA\n",
     "from sklearn.impute import SimpleImputer\n",
-    "from sklearn.model_selection import GridSearchCV"
+    "from sklearn.model_selection import GridSearchCV\n",
+    "import numpy as np\n",
+    "import pandas as pd\n",
+    "from sklearn.preprocessing import StandardScaler\n",
+    "from sklearn.impute import SimpleImputer\n",
+    "from sklearn.decomposition import PCA\n",
+    "from sklearn.model_selection import train_test_split\n",
+    "from sklearn.linear_model import LogisticRegression\n",
+    "from sklearn.metrics import accuracy_score, confusion_matrix, classification_report\n",
+    "from sklearn.model_selection import GridSearchCV\n",
+    "import pandas as pd\n",
+    "from sklearn.impute import SimpleImputer\n",
+    "from sklearn.model_selection import RandomizedSearchCV\n"
    ]
   },
   {
@@ -34,6 +46,28 @@
    "cell_type": "code",
    "execution_count": 3,
    "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "<class 'pandas.core.frame.DataFrame'>\n",
+      "RangeIndex: 6000 entries, 0 to 5999\n",
+      "Columns: 129 entries, 1 to 129\n",
+      "dtypes: float64(112), int64(17)\n",
+      "memory usage: 5.9 MB\n",
+      "None\n"
+     ]
+    }
+   ],
+   "source": [
+    "print(train_df.info())"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "metadata": {},
    "outputs": [
     {
      "data": {
@@ -44,7 +78,7 @@
        " <BarContainer object of 10 artists>)"
       ]
      },
-     "execution_count": 3,
+     "execution_count": 4,
      "metadata": {},
      "output_type": "execute_result"
     },
@@ -61,7 +95,7 @@
    ],
    "source": [
     "# Create a histogram to show the distribution of a column\n",
-    "plt.hist(train_df['marker'])"
+    "plt.hist(train_df['129'])"
    ]
   },
   {
@@ -73,11 +107,10 @@
     "scaler = StandardScaler()\n",
     "\n",
     "# Separate the features from the target variable\n",
-    "X = train_df.drop('marker', axis=1)\n",
-    "y = train_df['marker']\n",
+    "X = train_df.drop('129', axis=1)\n",
+    "y = train_df['129']\n",
     "\n",
     "#Fix infinite value error\n",
-    "# X[X == np.inf] = np.finfo('float64').max\n",
     "X.replace([np.inf,-np.inf],0,inplace=True)\n",
     "\n",
     "# Create a SimpleImputer object to replace NaN values with the mean value of the corresponding column\n",
@@ -95,101 +128,106 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 13,
+   "execution_count": 6,
    "metadata": {},
    "outputs": [],
    "source": [
-    "n_components = 100\n",
-    "pca = PCA(n_components=n_components)\n",
-    "principal_components = pca.fit_transform(X_scaled)\n",
-    "\n",
-    "# Create a DataFrame with the loadings\n",
-    "loadings = pd.DataFrame(pca.components_.T, columns=[f'PC{i+1}' for i in range(n_components)], index=X.columns)\n",
-    "\n",
-    "# Apply PCA to the scaled data\n",
-    "# pca = PCA(n_components=100)\n",
-    "# X_pca = pca.fit_transform(X_scaled)\n",
-    "\n",
-    "# Split the data into training and testing sets\n",
-    "X_train, X_test, y_train, y_test = train_test_split(pca, y, test_size=0.2,random_state=42)\n",
-    "\n",
-    "# # Train the model on the training data\n",
-    "# lr.fit(X_train, y_train)\n",
-    "\n",
-    "# # Predict the labels for the test data\n",
-    "# y_pred = lr.predict(X_test)\n",
-    "\n",
-    "# # Evaluate the model performance\n",
-    "# print(\"Accuracy:\", accuracy_score(y_test, y_pred))"
+    "#PCA\n",
+    "pca = PCA(n_components=100)\n",
+    "X_pca = pca.fit_transform(X_scaled)"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 7,
    "metadata": {},
-   "outputs": [],
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Accuracy: 0.895\n",
+      "Classification Report:\n",
+      "               precision    recall  f1-score   support\n",
+      "\n",
+      "           0       0.86      0.94      0.90       588\n",
+      "           1       0.93      0.86      0.89       612\n",
+      "\n",
+      "    accuracy                           0.90      1200\n",
+      "   macro avg       0.90      0.90      0.89      1200\n",
+      "weighted avg       0.90      0.90      0.89      1200\n",
+      "\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
+      "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
+      "\n",
+      "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
+      "    https://scikit-learn.org/stable/modules/preprocessing.html\n",
+      "Please also refer to the documentation for alternative solver options:\n",
+      "    https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
+      "  n_iter_i = _check_optimize_result(\n"
+     ]
+    }
+   ],
    "source": [
-    "X_test_pca = pca.transform(X_test_scaled)\n",
-    "clf = LogisticRegression(random_state=42)\n",
-    "clf.fit(X_train_pca, y_train)\n",
-    "\n",
+    "#split data\n",
+    "X_train, X_test, y_train, y_test = train_test_split(X_pca, y, test_size=0.2, random_state=42)\n",
     "\n",
-    "y_pred = clf.predict(X_test_pca)\n",
+    "#train the model\n",
+    "log_reg = LogisticRegression()\n",
+    "log_reg.fit(X_train, y_train)\n",
     "\n",
-    "# Calculate and print the accuracy of the model\n",
+    "# 5. Evaluate the model on the testing set\n",
+    "y_pred = log_reg.predict(X_test)\n",
     "accuracy = accuracy_score(y_test, y_pred)\n",
-    "print(\"Accuracy:\", accuracy)"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 14,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# Read the test dataset\n",
-    "test_df = pd.read_csv('TestingDataBinary.csv')"
+    "\n",
+    "report = classification_report(y_test, y_pred)\n",
+    "\n",
+    "print(\"Accuracy:\", accuracy)\n",
+    "\n",
+    "print(\"Classification Report:\\n\", report)"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 10,
+   "execution_count": 8,
    "metadata": {},
    "outputs": [
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "Top 100 components:\n",
-      " [[ 3.72196354e+00 -5.87941588e+00 -4.02934784e-01 ...  4.15787367e-03\n",
-      "   1.89567282e-03  2.81043971e-03]\n",
-      " [ 1.25401316e+00 -5.82245182e+00 -7.51607953e-01 ...  5.71178351e-04\n",
-      "   1.64284342e-04  3.97691294e-03]\n",
-      " [ 1.24713154e+00 -5.82164239e+00 -7.59379345e-01 ...  3.40089202e-03\n",
-      "   2.59366304e-04  4.28360451e-03]\n",
-      " ...\n",
-      " [-6.89160079e-01 -5.50909843e+00 -4.69952506e-01 ... -2.71254494e-03\n",
-      "  -9.03351989e-05 -2.02581895e-03]\n",
-      " [ 7.34703326e-01 -5.58643030e+00 -5.41845944e-01 ... -3.62008786e-03\n",
-      "  -8.72999728e-05 -2.60358277e-03]\n",
-      " [ 7.35621169e-01 -5.58380312e+00 -5.36559421e-01 ... -3.46823833e-03\n",
-      "   3.30081328e-04 -2.83803266e-03]]\n"
+      "Confusion Matrix:\n",
+      " [[550  38]\n",
+      " [ 88 524]]\n"
      ]
     }
    ],
    "source": [
-    "# explained_variance_ratio = pca.explained_variance_ratio_\n",
-    "\n",
-    "\n",
-    "# sorted_indices = np.argsort(explained_variance_ratio)[::-1]\n",
-    "\n",
-    "# # Get the top 100 components\n",
-    "# top_100_indices = sorted_indices[:100]\n",
-    "# top_100_components = principal_components[:, top_100_indices]\n",
-    "# top_100_explained_variance_ratio = explained_variance_ratio[top_100_indices]\n",
-    "\n",
-    "\n",
-    "# print(\"Top 100 components:\\n\", top_100_components)"
+    "conf_matrix = confusion_matrix(y_test, y_pred)\n",
+    "print(\"Confusion Matrix:\\n\", conf_matrix)"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "[[True Negatives (TN), False Positives (FP)],\n",
+    " [False Negatives (FN), True Positives (TP)]]"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Fine tuning"
    ]
   },
   {
@@ -197,266 +235,279 @@
    "execution_count": 9,
    "metadata": {},
    "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Fitting 3 folds for each of 100 candidates, totalling 300 fits\n"
+     ]
+    },
     {
      "name": "stderr",
      "output_type": "stream",
      "text": [
-      "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
-      "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
-      "\n",
-      "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
-      "    https://scikit-learn.org/stable/modules/preprocessing.html\n",
-      "Please also refer to the documentation for alternative solver options:\n",
-      "    https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
-      "  n_iter_i = _check_optimize_result(\n",
-      "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
-      "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
+      "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\model_selection\\_validation.py:378: FitFailedWarning: \n",
+      "120 fits failed out of a total of 300.\n",
+      "The score on these train-test partitions for these parameters will be set to nan.\n",
+      "If these failures are not expected, you can try to debug them by setting error_score='raise'.\n",
       "\n",
-      "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
-      "    https://scikit-learn.org/stable/modules/preprocessing.html\n",
-      "Please also refer to the documentation for alternative solver options:\n",
-      "    https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
-      "  n_iter_i = _check_optimize_result(\n",
-      "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
-      "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
-      "\n",
-      "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
-      "    https://scikit-learn.org/stable/modules/preprocessing.html\n",
-      "Please also refer to the documentation for alternative solver options:\n",
-      "    https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
-      "  n_iter_i = _check_optimize_result(\n",
-      "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
-      "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
-      "\n",
-      "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
-      "    https://scikit-learn.org/stable/modules/preprocessing.html\n",
-      "Please also refer to the documentation for alternative solver options:\n",
-      "    https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
-      "  n_iter_i = _check_optimize_result(\n",
-      "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
-      "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
-      "\n",
-      "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
-      "    https://scikit-learn.org/stable/modules/preprocessing.html\n",
-      "Please also refer to the documentation for alternative solver options:\n",
-      "    https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
-      "  n_iter_i = _check_optimize_result(\n",
-      "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
-      "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
-      "\n",
-      "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
-      "    https://scikit-learn.org/stable/modules/preprocessing.html\n",
-      "Please also refer to the documentation for alternative solver options:\n",
-      "    https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
-      "  n_iter_i = _check_optimize_result(\n",
-      "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
-      "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
+      "Below are more details about the failures:\n",
+      "--------------------------------------------------------------------------------\n",
+      "24 fits failed with the following error:\n",
+      "Traceback (most recent call last):\n",
+      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\model_selection\\_validation.py\", line 686, in _fit_and_score\n",
+      "    estimator.fit(X_train, y_train, **fit_params)\n",
+      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 1162, in fit\n",
+      "    solver = _check_solver(self.solver, self.penalty, self.dual)\n",
+      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 54, in _check_solver\n",
+      "    raise ValueError(\n",
+      "ValueError: Solver newton-cg supports only 'l2' or 'none' penalties, got elasticnet penalty.\n",
       "\n",
-      "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
-      "    https://scikit-learn.org/stable/modules/preprocessing.html\n",
-      "Please also refer to the documentation for alternative solver options:\n",
-      "    https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
-      "  n_iter_i = _check_optimize_result(\n",
-      "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
-      "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
+      "--------------------------------------------------------------------------------\n",
+      "15 fits failed with the following error:\n",
+      "Traceback (most recent call last):\n",
+      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\model_selection\\_validation.py\", line 686, in _fit_and_score\n",
+      "    estimator.fit(X_train, y_train, **fit_params)\n",
+      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 1162, in fit\n",
+      "    solver = _check_solver(self.solver, self.penalty, self.dual)\n",
+      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 71, in _check_solver\n",
+      "    raise ValueError(\"penalty='none' is not supported for the liblinear solver\")\n",
+      "ValueError: penalty='none' is not supported for the liblinear solver\n",
       "\n",
-      "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
-      "    https://scikit-learn.org/stable/modules/preprocessing.html\n",
-      "Please also refer to the documentation for alternative solver options:\n",
-      "    https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
-      "  n_iter_i = _check_optimize_result(\n",
-      "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
-      "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
+      "--------------------------------------------------------------------------------\n",
+      "18 fits failed with the following error:\n",
+      "Traceback (most recent call last):\n",
+      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\model_selection\\_validation.py\", line 686, in _fit_and_score\n",
+      "    estimator.fit(X_train, y_train, **fit_params)\n",
+      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 1162, in fit\n",
+      "    solver = _check_solver(self.solver, self.penalty, self.dual)\n",
+      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 54, in _check_solver\n",
+      "    raise ValueError(\n",
+      "ValueError: Solver lbfgs supports only 'l2' or 'none' penalties, got l1 penalty.\n",
       "\n",
-      "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
-      "    https://scikit-learn.org/stable/modules/preprocessing.html\n",
-      "Please also refer to the documentation for alternative solver options:\n",
-      "    https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
-      "  n_iter_i = _check_optimize_result(\n",
-      "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
-      "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
+      "--------------------------------------------------------------------------------\n",
+      "6 fits failed with the following error:\n",
+      "Traceback (most recent call last):\n",
+      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\model_selection\\_validation.py\", line 686, in _fit_and_score\n",
+      "    estimator.fit(X_train, y_train, **fit_params)\n",
+      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 1291, in fit\n",
+      "    fold_coefs_ = Parallel(n_jobs=self.n_jobs, verbose=self.verbose, prefer=prefer)(\n",
+      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\utils\\parallel.py\", line 63, in __call__\n",
+      "    return super().__call__(iterable_with_config)\n",
+      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\joblib\\parallel.py\", line 1085, in __call__\n",
+      "    if self.dispatch_one_batch(iterator):\n",
+      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\joblib\\parallel.py\", line 901, in dispatch_one_batch\n",
+      "    self._dispatch(tasks)\n",
+      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\joblib\\parallel.py\", line 819, in _dispatch\n",
+      "    job = self._backend.apply_async(batch, callback=cb)\n",
+      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\joblib\\_parallel_backends.py\", line 208, in apply_async\n",
+      "    result = ImmediateResult(func)\n",
+      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\joblib\\_parallel_backends.py\", line 597, in __init__\n",
+      "    self.results = batch()\n",
+      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\joblib\\parallel.py\", line 288, in __call__\n",
+      "    return [func(*args, **kwargs)\n",
+      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\joblib\\parallel.py\", line 288, in <listcomp>\n",
+      "    return [func(*args, **kwargs)\n",
+      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\utils\\parallel.py\", line 123, in __call__\n",
+      "    return self.function(*args, **kwargs)\n",
+      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 521, in _logistic_regression_path\n",
+      "    alpha = (1.0 / C) * (1 - l1_ratio)\n",
+      "TypeError: unsupported operand type(s) for -: 'int' and 'NoneType'\n",
       "\n",
-      "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
-      "    https://scikit-learn.org/stable/modules/preprocessing.html\n",
-      "Please also refer to the documentation for alternative solver options:\n",
-      "    https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
-      "  n_iter_i = _check_optimize_result(\n",
-      "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
-      "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
+      "--------------------------------------------------------------------------------\n",
+      "21 fits failed with the following error:\n",
+      "Traceback (most recent call last):\n",
+      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\model_selection\\_validation.py\", line 686, in _fit_and_score\n",
+      "    estimator.fit(X_train, y_train, **fit_params)\n",
+      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 1162, in fit\n",
+      "    solver = _check_solver(self.solver, self.penalty, self.dual)\n",
+      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 64, in _check_solver\n",
+      "    raise ValueError(\n",
+      "ValueError: Only 'saga' solver supports elasticnet penalty, got solver=liblinear.\n",
       "\n",
-      "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
-      "    https://scikit-learn.org/stable/modules/preprocessing.html\n",
-      "Please also refer to the documentation for alternative solver options:\n",
-      "    https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
-      "  n_iter_i = _check_optimize_result(\n",
-      "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
-      "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
+      "--------------------------------------------------------------------------------\n",
+      "12 fits failed with the following error:\n",
+      "Traceback (most recent call last):\n",
+      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\model_selection\\_validation.py\", line 686, in _fit_and_score\n",
+      "    estimator.fit(X_train, y_train, **fit_params)\n",
+      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 1162, in fit\n",
+      "    solver = _check_solver(self.solver, self.penalty, self.dual)\n",
+      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 54, in _check_solver\n",
+      "    raise ValueError(\n",
+      "ValueError: Solver sag supports only 'l2' or 'none' penalties, got l1 penalty.\n",
       "\n",
-      "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
-      "    https://scikit-learn.org/stable/modules/preprocessing.html\n",
-      "Please also refer to the documentation for alternative solver options:\n",
-      "    https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
-      "  n_iter_i = _check_optimize_result(\n",
-      "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
-      "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
+      "--------------------------------------------------------------------------------\n",
+      "9 fits failed with the following error:\n",
+      "Traceback (most recent call last):\n",
+      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\model_selection\\_validation.py\", line 686, in _fit_and_score\n",
+      "    estimator.fit(X_train, y_train, **fit_params)\n",
+      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 1162, in fit\n",
+      "    solver = _check_solver(self.solver, self.penalty, self.dual)\n",
+      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 54, in _check_solver\n",
+      "    raise ValueError(\n",
+      "ValueError: Solver sag supports only 'l2' or 'none' penalties, got elasticnet penalty.\n",
       "\n",
-      "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
-      "    https://scikit-learn.org/stable/modules/preprocessing.html\n",
-      "Please also refer to the documentation for alternative solver options:\n",
-      "    https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
-      "  n_iter_i = _check_optimize_result(\n",
-      "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
-      "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
+      "--------------------------------------------------------------------------------\n",
+      "6 fits failed with the following error:\n",
+      "Traceback (most recent call last):\n",
+      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\model_selection\\_validation.py\", line 686, in _fit_and_score\n",
+      "    estimator.fit(X_train, y_train, **fit_params)\n",
+      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 1162, in fit\n",
+      "    solver = _check_solver(self.solver, self.penalty, self.dual)\n",
+      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 54, in _check_solver\n",
+      "    raise ValueError(\n",
+      "ValueError: Solver lbfgs supports only 'l2' or 'none' penalties, got elasticnet penalty.\n",
       "\n",
-      "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
-      "    https://scikit-learn.org/stable/modules/preprocessing.html\n",
-      "Please also refer to the documentation for alternative solver options:\n",
-      "    https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
-      "  n_iter_i = _check_optimize_result(\n",
-      "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
-      "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
+      "--------------------------------------------------------------------------------\n",
+      "9 fits failed with the following error:\n",
+      "Traceback (most recent call last):\n",
+      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\model_selection\\_validation.py\", line 686, in _fit_and_score\n",
+      "    estimator.fit(X_train, y_train, **fit_params)\n",
+      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 1162, in fit\n",
+      "    solver = _check_solver(self.solver, self.penalty, self.dual)\n",
+      "  File \"c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 54, in _check_solver\n",
+      "    raise ValueError(\n",
+      "ValueError: Solver newton-cg supports only 'l2' or 'none' penalties, got l1 penalty.\n",
       "\n",
-      "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
-      "    https://scikit-learn.org/stable/modules/preprocessing.html\n",
-      "Please also refer to the documentation for alternative solver options:\n",
-      "    https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
-      "  n_iter_i = _check_optimize_result(\n",
-      "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\svm\\_base.py:1244: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n",
-      "  warnings.warn(\n",
-      "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\svm\\_base.py:1244: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n",
-      "  warnings.warn(\n",
-      "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\svm\\_base.py:1244: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n",
+      "  warnings.warn(some_fits_failed_message, FitFailedWarning)\n",
+      "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\model_selection\\_search.py:952: UserWarning: One or more of the test scores are non-finite: [       nan 0.87666667 0.92083333        nan        nan 0.87416667\n",
+      "        nan 0.87666667 0.864375   0.87645833 0.78208333 0.87854167\n",
+      " 0.72333333 0.87854167 0.85645833        nan        nan        nan\n",
+      " 0.85083333 0.72333333 0.5025     0.92020833 0.78208333 0.918125\n",
+      " 0.86458333 0.87666667        nan 0.9225     0.90375           nan\n",
+      " 0.78208333        nan 0.5025            nan        nan        nan\n",
+      "        nan 0.78208333        nan 0.78208333 0.85645833 0.628125\n",
+      " 0.918125          nan 0.49916667 0.85875           nan 0.49916667\n",
+      "        nan        nan 0.87791667 0.86520833        nan 0.9225\n",
+      "        nan 0.918125   0.865625   0.84166667        nan 0.9225\n",
+      " 0.90375    0.918125   0.87375    0.918125   0.864375          nan\n",
+      "        nan 0.87666667        nan 0.90375    0.85625    0.62895833\n",
+      "        nan        nan 0.85625           nan        nan 0.87854167\n",
+      " 0.85645833        nan 0.87791667 0.90395833 0.87854167        nan\n",
+      "        nan 0.87375    0.78208333 0.87666667        nan        nan\n",
+      " 0.78208333 0.90270833        nan        nan 0.85625           nan\n",
+      " 0.86583333        nan        nan        nan]\n",
       "  warnings.warn(\n",
-      "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\svm\\_base.py:1244: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n",
+      "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:1173: FutureWarning: `penalty='none'`has been deprecated in 1.2 and will be removed in 1.4. To keep the past behaviour, set `penalty=None`.\n",
       "  warnings.warn(\n",
-      "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\svm\\_base.py:1244: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n",
-      "  warnings.warn(\n",
-      "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
-      "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
-      "\n",
-      "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
-      "    https://scikit-learn.org/stable/modules/preprocessing.html\n",
-      "Please also refer to the documentation for alternative solver options:\n",
-      "    https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
-      "  n_iter_i = _check_optimize_result(\n",
-      "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
-      "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
-      "\n",
-      "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
-      "    https://scikit-learn.org/stable/modules/preprocessing.html\n",
-      "Please also refer to the documentation for alternative solver options:\n",
-      "    https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
-      "  n_iter_i = _check_optimize_result(\n",
-      "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
-      "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
-      "\n",
-      "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
-      "    https://scikit-learn.org/stable/modules/preprocessing.html\n",
-      "Please also refer to the documentation for alternative solver options:\n",
-      "    https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
-      "  n_iter_i = _check_optimize_result(\n",
-      "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
-      "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
-      "\n",
-      "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
-      "    https://scikit-learn.org/stable/modules/preprocessing.html\n",
-      "Please also refer to the documentation for alternative solver options:\n",
-      "    https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
-      "  n_iter_i = _check_optimize_result(\n",
-      "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
-      "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
-      "\n",
-      "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
-      "    https://scikit-learn.org/stable/modules/preprocessing.html\n",
-      "Please also refer to the documentation for alternative solver options:\n",
-      "    https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
-      "  n_iter_i = _check_optimize_result(\n"
+      "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:1181: UserWarning: Setting penalty=None will ignore the C and l1_ratio parameters\n",
+      "  warnings.warn(\n"
      ]
     },
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "Best hyperparameters:  {'C': 100, 'solver': 'liblinear'}\n",
-      "Best accuracy score:  0.8968333333333334\n"
+      "Best Parameters: {'solver': 'newton-cg', 'penalty': 'none', 'max_iter': 100, 'C': 0.005994842503189409}\n",
+      "Best Score: 0.9225\n",
+      "Accuracy: 0.9325\n",
+      "Confusion Matrix:\n",
+      " [[557  31]\n",
+      " [ 50 562]]\n",
+      "Classification Report:\n",
+      "               precision    recall  f1-score   support\n",
+      "\n",
+      "           0       0.92      0.95      0.93       588\n",
+      "           1       0.95      0.92      0.93       612\n",
+      "\n",
+      "    accuracy                           0.93      1200\n",
+      "   macro avg       0.93      0.93      0.93      1200\n",
+      "weighted avg       0.93      0.93      0.93      1200\n",
+      "\n"
      ]
     },
     {
      "name": "stderr",
      "output_type": "stream",
      "text": [
-      "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\svm\\_base.py:1244: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n",
+      "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\utils\\optimize.py:210: ConvergenceWarning: newton-cg failed to converge. Increase the number of iterations.\n",
       "  warnings.warn(\n"
      ]
     }
    ],
    "source": [
-    "# Create a Logistic Regression model\n",
-    "lr = LogisticRegression()\n",
     "\n",
-    "# Define the parameter grid to search over\n",
-    "param_grid = {'C': [0.1, 1, 10, 100], 'solver': ['liblinear', 'lbfgs']}\n",
+    "param_dist = {\n",
+    "    'penalty': ['l1', 'l2', 'elasticnet', 'none'],\n",
+    "    'C': np.logspace(-4, 4, 10),\n",
+    "    'solver': ['newton-cg', 'lbfgs', 'liblinear', 'sag', 'saga'],\n",
+    "    'max_iter': [100, 500, 1000],\n",
+    "}\n",
+    "\n",
+    "# Create the RandomizedSearchCV object with the logistic regression model, hyperparameters, and cross-validation\n",
+    "log_reg = LogisticRegression()\n",
+    "random_search = RandomizedSearchCV(log_reg, param_dist, n_iter=100, cv=3, n_jobs=-1, verbose=1, random_state=42)\n",
     "\n",
-    "# Create a GridSearchCV object and fit it to the data\n",
-    "grid_search = GridSearchCV(lr, param_grid, cv=5)\n",
-    "grid_search.fit(X_scaled, y)\n",
+    "# Fit the random search to the training data\n",
+    "random_search.fit(X_train, y_train)\n",
     "\n",
-    "# Print the best hyperparameters and the corresponding accuracy score\n",
-    "print(\"Best hyperparameters: \", grid_search.best_params_)\n",
-    "print(\"Best accuracy score: \", grid_search.best_score_)"
+    "# Check the best hyperparameters found\n",
+    "print(\"Best Parameters:\", random_search.best_params_)\n",
+    "print(\"Best Score:\", random_search.best_score_)\n",
+    "\n",
+    "# Use the best estimator for predictions and evaluation\n",
+    "best_model = random_search.best_estimator_\n",
+    "y_pred = best_model.predict(X_test)\n",
+    "accuracy = accuracy_score(y_test, y_pred)\n",
+    "conf_matrix = confusion_matrix(y_test, y_pred)\n",
+    "report = classification_report(y_test, y_pred)\n",
+    "\n",
+    "print(\"Accuracy:\", accuracy)\n",
+    "print(\"Confusion Matrix:\\n\", conf_matrix)\n",
+    "print(\"Classification Report:\\n\", report)\n"
+   ]
+  },
+  {
+   "attachments": {},
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Predict"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 10,
+   "execution_count": 13,
    "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Accuracy: 0.9158333333333334\n"
-     ]
-    },
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\lib\\site-packages\\sklearn\\svm\\_base.py:1244: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n",
-      "  warnings.warn(\n"
-     ]
-    }
-   ],
+   "outputs": [],
+   "source": [
+    "test_data = pd.read_csv('TestingDataBinary.csv')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 14,
+   "metadata": {},
+   "outputs": [],
    "source": [
-    "lr = LogisticRegression(C=100, solver='liblinear')\n",
-    "# Train the model on the training data\n",
-    "lr.fit(X_train, y_train)\n",
+    "# Preprocessing\n",
+    "X_new = test_data\n",
+    "X_new.replace([np.inf, -np.inf], 0, inplace=True)\n",
+    "\n",
+    "# Impute the missing values in the features data\n",
+    "X_imputed_new = imputer.transform(X_new)\n",
     "\n",
-    "# Predict the labels for the test data\n",
-    "y_pred = lr.predict(X_test)\n",
+    "# Scale the features data\n",
+    "X_scaled_new = scaler.transform(X_imputed_new)\n",
     "\n",
-    "# Evaluate the model performance\n",
-    "print(\"Accuracy:\", accuracy_score(y_test, y_pred))"
+    "# Apply PCA transformation\n",
+    "X_pca_new = pca.transform(X_scaled_new)"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 16,
    "metadata": {},
    "outputs": [],
    "source": [
-    "# Normalize the features\n",
-    "test_df_scaled = scaler.transform(test_df)\n",
-    "\n",
-    "# Select the top 15 features\n",
-    "test_df_selected = test_df_scaled[:, :top_n]\n",
+    "# Use the best estimator for predictions on the new data\n",
+    "y_pred_new = best_model.predict(X_pca_new)\n",
     "\n",
-    "# Use the chosen model to predict AQI scores for the test dataset\n",
-    "test_predictions = rf_reg_selected.predict(test_df_selected)\n",
+    "# Save the predictions to a new column in the DataFrame\n",
+    "test_data['predicted_marker'] = y_pred_new\n",
     "\n",
-    "# Save the predictions to the subs.csv file\n",
-    "submission_df = pd.DataFrame({'AQI_Bucket': test_predictions})\n",
-    "# submission_df.to_csv(\"C:\\Users\\andre\\Downloads\\subs.csv\", index=False)"
+    "# Save the updated DataFrame to a new CSV file\n",
+    "test_data.to_csv('TestingDataBinary_with_predictions.csv', index=False)"
    ]
   }
  ],
diff --git a/part1.py b/part1.py
deleted file mode 100644
index 251f068..0000000
--- a/part1.py
+++ /dev/null
@@ -1,25 +0,0 @@
-import pandas as pd
-import numpy as np
-import sklearn
-import scipy
-from sklearn.model_selection import train_test_split
-from sklearn.metrics import accuracy_score
-import matplotlib.pyplot as plt
-
-#Read CSV file as Pandas Dataframe
-train_df = pd.read_csv('TrainingDataBinary.csv')
-test_df = pd.read_csv('TestingDataBinary.csv')
-
-#Confirm reading of files
-print(train_df.head)
-print("----------------------------------")
-print(test_df.head)
-
-# Get the summary statistics of the data
-print(train_df.describe())
-
-# Get the information about the columns of the DataFrame
-print(train_df.info())
-
-# Create a histogram to show the distribution of a column
-plt.hist(train_df['marker'])
\ No newline at end of file
-- 
GitLab