4755 lines (4754 with data), 286.1 kB
{
"cells": [
{
"cell_type": "markdown",
"id": "073c1361-bcae-45d9-ad98-a07133b4f412",
"metadata": {},
"source": [
"Liver Disease Prediction"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "ce0cfb84-91cc-46d0-9971-3478aa0045a4",
"metadata": {},
"outputs": [
{
"ename": "ModuleNotFoundError",
"evalue": "No module named 'seaborn'",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[1;32mIn[1], line 3\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mnumpy\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mnp\u001b[39;00m\n\u001b[0;32m 2\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mpandas\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mpd\u001b[39;00m\n\u001b[1;32m----> 3\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mseaborn\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01msns\u001b[39;00m\n\u001b[0;32m 4\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mmatplotlib\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m pyplot \u001b[38;5;28;01mas\u001b[39;00m plt\n\u001b[0;32m 6\u001b[0m \u001b[38;5;66;03m# Ignore Warnings\u001b[39;00m\n",
"\u001b[1;31mModuleNotFoundError\u001b[0m: No module named 'seaborn'"
]
}
],
"source": [
"\n",
"import numpy as np\n",
"import pandas as pd\n",
"import seaborn as sns\n",
"from matplotlib import pyplot as plt\n",
"\n",
"# Ignore Warnings\n",
"import warnings\n",
"warnings.filterwarnings(\"ignore\")\n",
"\n",
"from math import sqrt\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.metrics import accuracy_score, confusion_matrix, classification_report\n",
"\n",
"from sklearn.model_selection import GridSearchCV\n",
"\n",
"\n",
"\n",
"from sklearn.linear_model import LogisticRegression\n",
"from sklearn.tree import DecisionTreeClassifier\n",
"from sklearn.svm import SVC\n",
"from sklearn.preprocessing import StandardScaler\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.neighbors import KNeighborsClassifier\n",
"\n",
"plt.style.use('ggplot')\n"
]
},
{
"cell_type": "code",
"execution_count": 133,
"id": "5d94117e-65b4-4806-b4d4-36eab6594700",
"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>Age of the patient</th>\n",
" <th>Gender of the patient</th>\n",
" <th>Total Bilirubin</th>\n",
" <th>Direct Bilirubin</th>\n",
" <th>Alkphos Alkaline Phosphotase</th>\n",
" <th>Sgpt Alamine Aminotransferase</th>\n",
" <th>Sgot Aspartate Aminotransferase</th>\n",
" <th>Total Protiens</th>\n",
" <th>ALB Albumin</th>\n",
" <th>A/G Ratio Albumin and Globulin Ratio</th>\n",
" <th>Result</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>65.0</td>\n",
" <td>Female</td>\n",
" <td>0.7</td>\n",
" <td>0.1</td>\n",
" <td>187.0</td>\n",
" <td>16.0</td>\n",
" <td>18.0</td>\n",
" <td>6.8</td>\n",
" <td>3.3</td>\n",
" <td>0.90</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>62.0</td>\n",
" <td>Male</td>\n",
" <td>10.9</td>\n",
" <td>5.5</td>\n",
" <td>699.0</td>\n",
" <td>64.0</td>\n",
" <td>100.0</td>\n",
" <td>7.5</td>\n",
" <td>3.2</td>\n",
" <td>0.74</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>62.0</td>\n",
" <td>Male</td>\n",
" <td>7.3</td>\n",
" <td>4.1</td>\n",
" <td>490.0</td>\n",
" <td>60.0</td>\n",
" <td>68.0</td>\n",
" <td>7.0</td>\n",
" <td>3.3</td>\n",
" <td>0.89</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>58.0</td>\n",
" <td>Male</td>\n",
" <td>1.0</td>\n",
" <td>0.4</td>\n",
" <td>182.0</td>\n",
" <td>14.0</td>\n",
" <td>20.0</td>\n",
" <td>6.8</td>\n",
" <td>3.4</td>\n",
" <td>1.00</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>72.0</td>\n",
" <td>Male</td>\n",
" <td>3.9</td>\n",
" <td>2.0</td>\n",
" <td>195.0</td>\n",
" <td>27.0</td>\n",
" <td>59.0</td>\n",
" <td>7.3</td>\n",
" <td>2.4</td>\n",
" <td>0.40</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Age of the patient Gender of the patient Total Bilirubin \\\n",
"0 65.0 Female 0.7 \n",
"1 62.0 Male 10.9 \n",
"2 62.0 Male 7.3 \n",
"3 58.0 Male 1.0 \n",
"4 72.0 Male 3.9 \n",
"\n",
" Direct Bilirubin Alkphos Alkaline Phosphotase \\\n",
"0 0.1 187.0 \n",
"1 5.5 699.0 \n",
"2 4.1 490.0 \n",
"3 0.4 182.0 \n",
"4 2.0 195.0 \n",
"\n",
" Sgpt Alamine Aminotransferase Sgot Aspartate Aminotransferase \\\n",
"0 16.0 18.0 \n",
"1 64.0 100.0 \n",
"2 60.0 68.0 \n",
"3 14.0 20.0 \n",
"4 27.0 59.0 \n",
"\n",
" Total Protiens ALB Albumin A/G Ratio Albumin and Globulin Ratio Result \n",
"0 6.8 3.3 0.90 1 \n",
"1 7.5 3.2 0.74 1 \n",
"2 7.0 3.3 0.89 1 \n",
"3 6.8 3.4 1.00 1 \n",
"4 7.3 2.4 0.40 1 "
]
},
"execution_count": 133,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df=pd.read_csv(r'datasets\\Liver.csv',encoding='ISO-8859-1')\n",
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 134,
"id": "2a8f3ab1-5de2-4b9d-9aa9-8cc2d1e8e6f7",
"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>Age of the patient</th>\n",
" <th>Gender of the patient</th>\n",
" <th>Total Bilirubin</th>\n",
" <th>Direct Bilirubin</th>\n",
" <th>Alkphos Alkaline Phosphotase</th>\n",
" <th>Sgpt Alamine Aminotransferase</th>\n",
" <th>Aspartate_Aminotransferase</th>\n",
" <th>Total Protiens</th>\n",
" <th>ALB Albumin</th>\n",
" <th>A/G Ratio Albumin and Globulin Ratio</th>\n",
" <th>Result</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>65.0</td>\n",
" <td>Female</td>\n",
" <td>0.7</td>\n",
" <td>0.1</td>\n",
" <td>187.0</td>\n",
" <td>16.0</td>\n",
" <td>18.0</td>\n",
" <td>6.8</td>\n",
" <td>3.3</td>\n",
" <td>0.90</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>62.0</td>\n",
" <td>Male</td>\n",
" <td>10.9</td>\n",
" <td>5.5</td>\n",
" <td>699.0</td>\n",
" <td>64.0</td>\n",
" <td>100.0</td>\n",
" <td>7.5</td>\n",
" <td>3.2</td>\n",
" <td>0.74</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>62.0</td>\n",
" <td>Male</td>\n",
" <td>7.3</td>\n",
" <td>4.1</td>\n",
" <td>490.0</td>\n",
" <td>60.0</td>\n",
" <td>68.0</td>\n",
" <td>7.0</td>\n",
" <td>3.3</td>\n",
" <td>0.89</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>58.0</td>\n",
" <td>Male</td>\n",
" <td>1.0</td>\n",
" <td>0.4</td>\n",
" <td>182.0</td>\n",
" <td>14.0</td>\n",
" <td>20.0</td>\n",
" <td>6.8</td>\n",
" <td>3.4</td>\n",
" <td>1.00</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>72.0</td>\n",
" <td>Male</td>\n",
" <td>3.9</td>\n",
" <td>2.0</td>\n",
" <td>195.0</td>\n",
" <td>27.0</td>\n",
" <td>59.0</td>\n",
" <td>7.3</td>\n",
" <td>2.4</td>\n",
" <td>0.40</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Age of the patient Gender of the patient Total Bilirubin \\\n",
"0 65.0 Female 0.7 \n",
"1 62.0 Male 10.9 \n",
"2 62.0 Male 7.3 \n",
"3 58.0 Male 1.0 \n",
"4 72.0 Male 3.9 \n",
"\n",
" Direct Bilirubin Alkphos Alkaline Phosphotase \\\n",
"0 0.1 187.0 \n",
"1 5.5 699.0 \n",
"2 4.1 490.0 \n",
"3 0.4 182.0 \n",
"4 2.0 195.0 \n",
"\n",
" Sgpt Alamine Aminotransferase Aspartate_Aminotransferase Total Protiens \\\n",
"0 16.0 18.0 6.8 \n",
"1 64.0 100.0 7.5 \n",
"2 60.0 68.0 7.0 \n",
"3 14.0 20.0 6.8 \n",
"4 27.0 59.0 7.3 \n",
"\n",
" ALB Albumin A/G Ratio Albumin and Globulin Ratio Result \n",
"0 3.3 0.90 1 \n",
"1 3.2 0.74 1 \n",
"2 3.3 0.89 1 \n",
"3 3.4 1.00 1 \n",
"4 2.4 0.40 1 "
]
},
"execution_count": 134,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"column_rename_dict = {\n",
" 'Sgot Aspartate Aminotransferase': 'Aspartate_Aminotransferase'\n",
"}\n",
"\n",
"df.rename(columns=column_rename_dict, inplace=True)\n",
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 135,
"id": "beafdf96",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1]\n",
"M\n"
]
}
],
"source": [
"from sklearn.linear_model import LogisticRegression\n",
"input_data =(26.0,0,0.7,0.2,185.0,16.0,22.0,7.3,3.7,1.00\n",
")\n",
"#100,12,1,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,0,1) \n",
"\n",
"'''(14.36,0.09779,0.08129,0.04781,0.1885,0.05766,0.7886,23.56,0.008462,\n",
"0.0146,0.02387,0.01315,0.0198,0.0023,15.11,711.2,0.144,0.1773,0.239,0.1288,0.2977,0.07259\n",
")'''\n",
"\n",
"input_data_as_numpy_array = np.asarray(input_data)\n",
"\n",
"# reshape the array as we are predicting for one instance\n",
"input_data_reshaped = input_data_as_numpy_array.reshape(1,-1)\n",
"predictions = svc.predict(input_data_reshaped)\n",
"print(predictions)\n",
"if (predictions == 0):\n",
" print('B')\n",
"else:\n",
" print('M')"
]
},
{
"cell_type": "code",
"execution_count": 136,
"id": "da3fe93c-cf85-44bd-b380-6b76b8047fba",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(30691, 11)"
]
},
"execution_count": 136,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.shape"
]
},
{
"cell_type": "markdown",
"id": "5ffcf663-aa04-47bc-9006-68315a8e1cf6",
"metadata": {},
"source": [
"\n",
"Exploratory Data Analysis"
]
},
{
"cell_type": "code",
"execution_count": 137,
"id": "40315d82-475f-439f-aa15-cb287393b7a7",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"5425"
]
},
"execution_count": 137,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.isna().sum().sum()"
]
},
{
"cell_type": "code",
"execution_count": 138,
"id": "2ce172d1-e6ec-46a3-941c-bb414dab5192",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Age of the patient 0\n",
"Gender of the patient 0\n",
"Total Bilirubin 0\n",
"Direct Bilirubin 0\n",
" Alkphos Alkaline Phosphotase 0\n",
" Sgpt Alamine Aminotransferase 0\n",
"Aspartate_Aminotransferase 0\n",
"Total Protiens 0\n",
" ALB Albumin 0\n",
"A/G Ratio Albumin and Globulin Ratio 0\n",
"Result 0\n",
"dtype: int64"
]
},
"execution_count": 138,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = df.dropna()\n",
"df.isna().sum()"
]
},
{
"cell_type": "markdown",
"id": "b58e5846-2b1f-45a7-8689-57a17d124404",
"metadata": {},
"source": [
"Distribution of Numerical Features"
]
},
{
"cell_type": "code",
"execution_count": 139,
"id": "4716666d-5d2e-4d7c-a366-5907ce220b57",
"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>Age of the patient</th>\n",
" <th>Gender of the patient</th>\n",
" <th>Total Bilirubin</th>\n",
" <th>Direct Bilirubin</th>\n",
" <th>Alkphos Alkaline Phosphotase</th>\n",
" <th>Sgpt Alamine Aminotransferase</th>\n",
" <th>Aspartate_Aminotransferase</th>\n",
" <th>Total Protiens</th>\n",
" <th>ALB Albumin</th>\n",
" <th>A/G Ratio Albumin and Globulin Ratio</th>\n",
" <th>Result</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>5090</th>\n",
" <td>29.0</td>\n",
" <td>Female</td>\n",
" <td>1.3</td>\n",
" <td>0.6</td>\n",
" <td>166.0</td>\n",
" <td>49.0</td>\n",
" <td>42.0</td>\n",
" <td>5.6</td>\n",
" <td>2.5</td>\n",
" <td>0.80</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3055</th>\n",
" <td>16.0</td>\n",
" <td>Male</td>\n",
" <td>0.6</td>\n",
" <td>0.1</td>\n",
" <td>186.0</td>\n",
" <td>20.0</td>\n",
" <td>21.0</td>\n",
" <td>6.2</td>\n",
" <td>3.3</td>\n",
" <td>1.10</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24182</th>\n",
" <td>38.0</td>\n",
" <td>Male</td>\n",
" <td>1.1</td>\n",
" <td>0.5</td>\n",
" <td>128.0</td>\n",
" <td>20.0</td>\n",
" <td>30.0</td>\n",
" <td>3.9</td>\n",
" <td>1.9</td>\n",
" <td>0.95</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>30230</th>\n",
" <td>60.0</td>\n",
" <td>Female</td>\n",
" <td>1.4</td>\n",
" <td>0.7</td>\n",
" <td>195.0</td>\n",
" <td>36.0</td>\n",
" <td>16.0</td>\n",
" <td>7.9</td>\n",
" <td>3.7</td>\n",
" <td>0.90</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20921</th>\n",
" <td>56.0</td>\n",
" <td>Male</td>\n",
" <td>5.0</td>\n",
" <td>2.1</td>\n",
" <td>103.0</td>\n",
" <td>18.0</td>\n",
" <td>40.0</td>\n",
" <td>5.0</td>\n",
" <td>2.1</td>\n",
" <td>1.72</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Age of the patient Gender of the patient Total Bilirubin \\\n",
"5090 29.0 Female 1.3 \n",
"3055 16.0 Male 0.6 \n",
"24182 38.0 Male 1.1 \n",
"30230 60.0 Female 1.4 \n",
"20921 56.0 Male 5.0 \n",
"\n",
" Direct Bilirubin Alkphos Alkaline Phosphotase \\\n",
"5090 0.6 166.0 \n",
"3055 0.1 186.0 \n",
"24182 0.5 128.0 \n",
"30230 0.7 195.0 \n",
"20921 2.1 103.0 \n",
"\n",
" Sgpt Alamine Aminotransferase Aspartate_Aminotransferase \\\n",
"5090 49.0 42.0 \n",
"3055 20.0 21.0 \n",
"24182 20.0 30.0 \n",
"30230 36.0 16.0 \n",
"20921 18.0 40.0 \n",
"\n",
" Total Protiens ALB Albumin A/G Ratio Albumin and Globulin Ratio \\\n",
"5090 5.6 2.5 0.80 \n",
"3055 6.2 3.3 1.10 \n",
"24182 3.9 1.9 0.95 \n",
"30230 7.9 3.7 0.90 \n",
"20921 5.0 2.1 1.72 \n",
"\n",
" Result \n",
"5090 2 \n",
"3055 2 \n",
"24182 2 \n",
"30230 2 \n",
"20921 1 "
]
},
"execution_count": 139,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.sample(5)\n"
]
},
{
"cell_type": "code",
"execution_count": 140,
"id": "fd8f4fb9-7d74-49c2-ad94-284b09263880",
"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>Age of the patient</th>\n",
" <th>Total Bilirubin</th>\n",
" <th>Direct Bilirubin</th>\n",
" <th>Alkphos Alkaline Phosphotase</th>\n",
" <th>Sgpt Alamine Aminotransferase</th>\n",
" <th>Aspartate_Aminotransferase</th>\n",
" <th>Total Protiens</th>\n",
" <th>ALB Albumin</th>\n",
" <th>A/G Ratio Albumin and Globulin Ratio</th>\n",
" <th>Result</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>27158.000000</td>\n",
" <td>27158.000000</td>\n",
" <td>27158.000000</td>\n",
" <td>27158.000000</td>\n",
" <td>27158.000000</td>\n",
" <td>27158.000000</td>\n",
" <td>27158.000000</td>\n",
" <td>27158.000000</td>\n",
" <td>27158.000000</td>\n",
" <td>27158.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>44.125046</td>\n",
" <td>3.407909</td>\n",
" <td>1.541630</td>\n",
" <td>290.142021</td>\n",
" <td>81.279292</td>\n",
" <td>112.102879</td>\n",
" <td>6.472605</td>\n",
" <td>3.124044</td>\n",
" <td>0.943567</td>\n",
" <td>1.282790</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>15.971563</td>\n",
" <td>6.332486</td>\n",
" <td>2.895084</td>\n",
" <td>239.595473</td>\n",
" <td>181.571537</td>\n",
" <td>283.616005</td>\n",
" <td>1.081477</td>\n",
" <td>0.792329</td>\n",
" <td>0.324205</td>\n",
" <td>0.450363</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>4.000000</td>\n",
" <td>0.400000</td>\n",
" <td>0.100000</td>\n",
" <td>63.000000</td>\n",
" <td>10.000000</td>\n",
" <td>10.000000</td>\n",
" <td>2.700000</td>\n",
" <td>0.900000</td>\n",
" <td>0.300000</td>\n",
" <td>1.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>33.000000</td>\n",
" <td>0.800000</td>\n",
" <td>0.200000</td>\n",
" <td>175.000000</td>\n",
" <td>23.000000</td>\n",
" <td>26.000000</td>\n",
" <td>5.800000</td>\n",
" <td>2.600000</td>\n",
" <td>0.700000</td>\n",
" <td>1.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>45.000000</td>\n",
" <td>1.000000</td>\n",
" <td>0.300000</td>\n",
" <td>209.000000</td>\n",
" <td>36.000000</td>\n",
" <td>42.000000</td>\n",
" <td>6.600000</td>\n",
" <td>3.100000</td>\n",
" <td>0.900000</td>\n",
" <td>1.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>55.000000</td>\n",
" <td>2.700000</td>\n",
" <td>1.300000</td>\n",
" <td>298.000000</td>\n",
" <td>62.000000</td>\n",
" <td>88.000000</td>\n",
" <td>7.200000</td>\n",
" <td>3.700000</td>\n",
" <td>1.100000</td>\n",
" <td>2.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>90.000000</td>\n",
" <td>75.000000</td>\n",
" <td>19.700000</td>\n",
" <td>2110.000000</td>\n",
" <td>2000.000000</td>\n",
" <td>4929.000000</td>\n",
" <td>9.600000</td>\n",
" <td>5.500000</td>\n",
" <td>2.800000</td>\n",
" <td>2.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Age of the patient Total Bilirubin Direct Bilirubin \\\n",
"count 27158.000000 27158.000000 27158.000000 \n",
"mean 44.125046 3.407909 1.541630 \n",
"std 15.971563 6.332486 2.895084 \n",
"min 4.000000 0.400000 0.100000 \n",
"25% 33.000000 0.800000 0.200000 \n",
"50% 45.000000 1.000000 0.300000 \n",
"75% 55.000000 2.700000 1.300000 \n",
"max 90.000000 75.000000 19.700000 \n",
"\n",
" Alkphos Alkaline Phosphotase Sgpt Alamine Aminotransferase \\\n",
"count 27158.000000 27158.000000 \n",
"mean 290.142021 81.279292 \n",
"std 239.595473 181.571537 \n",
"min 63.000000 10.000000 \n",
"25% 175.000000 23.000000 \n",
"50% 209.000000 36.000000 \n",
"75% 298.000000 62.000000 \n",
"max 2110.000000 2000.000000 \n",
"\n",
" Aspartate_Aminotransferase Total Protiens ALB Albumin \\\n",
"count 27158.000000 27158.000000 27158.000000 \n",
"mean 112.102879 6.472605 3.124044 \n",
"std 283.616005 1.081477 0.792329 \n",
"min 10.000000 2.700000 0.900000 \n",
"25% 26.000000 5.800000 2.600000 \n",
"50% 42.000000 6.600000 3.100000 \n",
"75% 88.000000 7.200000 3.700000 \n",
"max 4929.000000 9.600000 5.500000 \n",
"\n",
" A/G Ratio Albumin and Globulin Ratio Result \n",
"count 27158.000000 27158.000000 \n",
"mean 0.943567 1.282790 \n",
"std 0.324205 0.450363 \n",
"min 0.300000 1.000000 \n",
"25% 0.700000 1.000000 \n",
"50% 0.900000 1.000000 \n",
"75% 1.100000 2.000000 \n",
"max 2.800000 2.000000 "
]
},
"execution_count": 140,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.describe()"
]
},
{
"cell_type": "code",
"execution_count": 141,
"id": "a5454137-8361-4e5e-90b5-88a55e8cd37e",
"metadata": {},
"outputs": [],
"source": [
"## if score==negative, mark 0 ;else 1 \n",
"def partition(x):\n",
" if x == 2:\n",
" return 0\n",
" return 1\n",
"\n",
"\n",
"df['Result'] = df['Result'].map(partition)"
]
},
{
"cell_type": "code",
"execution_count": 142,
"id": "047d3234-04c3-47f3-8027-4f6a959c9a33",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Number of patients that are male: 19478\n",
"Number of patients that are female: 7680\n"
]
},
{
"data": {
"image/png": "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/D/vBNxhIhYsq9fxbTbbdd8T5VMhqjEiRAEwixAF1ORLIcqnLucBAAD4C0IUAACACYQoAAAAEwhRAAAAJhCiAAAATCBEAQAAmECIAgAAMIEQBQAAYAIhCgAAwARCFAAAgAmEKAAAABMIUQAAACYQogAAAEwwHaI+//xzORyOOtsdDoc+//xzs8MDAAD4NNMh6p133lFeXl6d7cePH9c777xjdngAAACfVm+X8y5fvqzAwMD6Gh4AAKBBWW+k86lTp1RQUGBsHz58WJWVlTX6Xbx4UX/5y18UERFx0wUCAAD4ohsKUXv37lVmZqaxvW3bNm3btq3Wvs2bN9cLL7xwc9UBAAD4qBsKUf3799cDDzwgj8ejl19+WSNHjlS3bt1q9GvWrJnatWvH5TwAANBo3VCIatmypVq2bClJeuWVV3TXXXcpLCysXgoDAADwZTcUoq51zz333Mo6AAAA/IrpECVJBw4c0GeffSaHw6GLFy/K4/F4tVssFr399ts3VSAAAIAvMh2iNmzYoJUrV8put+vuu+9Wp06dbmVdAAAAPs10iNqyZYvuu+8+/b//9/9ktd7UhBYAAIDfMb3Y5sWLF/WjH/2IAAUAAO5IpkNUbGyszp49eytrAQAA8BumQ9S4ceO0d+9e7dq161bWAwAA4BdMX4v7/e9/r8rKSr399ttaunSpWrdurYAA70xmsVi0YMGCmy4SAADA15gOUSEhIWrRogW/jwcAAO5IpkPUrFmzbmEZAAAA/sX0PVEAAAB3MtMzUbm5udfVj5+HAQAAjZHpEDV79uzr6rd69WqzLwEAAOCzTIeoV155pca+qqoqORwOffrpp6qqqtKYMWNuqjgAAABfZTpEfd9lupSUFL3yyivKycnRfffdd91j5ubmasOGDTp58qRKSko0depU9ejRw2j3eDxas2aNPv30U128eFFdunTR+PHjvb4hWFZWpvfee09fffWVLBaLevbsqWeffVbNmjUz+pw6dUrp6ek6ceKEQkNDNXDgQD3xxBNetezZs0erV6+W0+lU+/btNWbMGHXv3v26jwUAADRu9XJjeUBAgB566CF99tlnN/S8K1euKDo6WuPGjau1ff369froo480YcIE/e53v1PTpk01d+5cXb161ejz1ltvqbCwUNOnT9dLL72kw4cP69133zXay8vLNWfOHLVp00bz58/XU089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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"\n",
"sns.countplot(data=df, x = 'Result', label='Count')\n",
"\n",
"M, F = df['Result'].value_counts()\n",
"print('Number of patients that are male: ',M)\n",
"print('Number of patients that are female: ',F)"
]
},
{
"cell_type": "code",
"execution_count": 160,
"id": "bad0e537-76f6-4224-b489-bd47eab5e849",
"metadata": {},
"outputs": [],
"source": [
"## if score==negative, mark 0 ;else 1 \n",
"def partition(x):\n",
" if x =='Male':\n",
" return 0\n",
" return 1\n",
"\n",
"df['Gender of the patient'] = df['Gender of the patient'].map(partition)"
]
},
{
"cell_type": "code",
"execution_count": 161,
"id": "5943a716",
"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>Age of the patient</th>\n",
" <th>Gender of the patient</th>\n",
" <th>Total Bilirubin</th>\n",
" <th>Direct Bilirubin</th>\n",
" <th>Alkphos Alkaline Phosphotase</th>\n",
" <th>Sgpt Alamine Aminotransferase</th>\n",
" <th>Aspartate_Aminotransferase</th>\n",
" <th>Total Protiens</th>\n",
" <th>ALB Albumin</th>\n",
" <th>A/G Ratio Albumin and Globulin Ratio</th>\n",
" <th>Result</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>52.0</td>\n",
" <td>1</td>\n",
" <td>0.9</td>\n",
" <td>0.2</td>\n",
" <td>116.0</td>\n",
" <td>36.0</td>\n",
" <td>16.0</td>\n",
" <td>6.2</td>\n",
" <td>3.2</td>\n",
" <td>1.00</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>36.0</td>\n",
" <td>1</td>\n",
" <td>0.7</td>\n",
" <td>0.2</td>\n",
" <td>188.0</td>\n",
" <td>11.0</td>\n",
" <td>10.0</td>\n",
" <td>5.5</td>\n",
" <td>2.3</td>\n",
" <td>0.71</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>28.0</td>\n",
" <td>0</td>\n",
" <td>0.5</td>\n",
" <td>0.1</td>\n",
" <td>162.0</td>\n",
" <td>155.0</td>\n",
" <td>108.0</td>\n",
" <td>8.1</td>\n",
" <td>4.0</td>\n",
" <td>0.90</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>49.0</td>\n",
" <td>0</td>\n",
" <td>0.7</td>\n",
" <td>0.2</td>\n",
" <td>188.0</td>\n",
" <td>13.0</td>\n",
" <td>21.0</td>\n",
" <td>6.0</td>\n",
" <td>3.2</td>\n",
" <td>1.10</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>51.0</td>\n",
" <td>0</td>\n",
" <td>1.0</td>\n",
" <td>0.3</td>\n",
" <td>75.0</td>\n",
" <td>25.0</td>\n",
" <td>26.0</td>\n",
" <td>5.1</td>\n",
" <td>2.9</td>\n",
" <td>1.30</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Age of the patient Gender of the patient Total Bilirubin \\\n",
"0 52.0 1 0.9 \n",
"1 36.0 1 0.7 \n",
"2 28.0 0 0.5 \n",
"3 49.0 0 0.7 \n",
"4 51.0 0 1.0 \n",
"\n",
" Direct Bilirubin Alkphos Alkaline Phosphotase \\\n",
"0 0.2 116.0 \n",
"1 0.2 188.0 \n",
"2 0.1 162.0 \n",
"3 0.2 188.0 \n",
"4 0.3 75.0 \n",
"\n",
" Sgpt Alamine Aminotransferase Aspartate_Aminotransferase Total Protiens \\\n",
"0 36.0 16.0 6.2 \n",
"1 11.0 10.0 5.5 \n",
"2 155.0 108.0 8.1 \n",
"3 13.0 21.0 6.0 \n",
"4 25.0 26.0 5.1 \n",
"\n",
" ALB Albumin A/G Ratio Albumin and Globulin Ratio Result \n",
"0 3.2 1.00 0 \n",
"1 2.3 0.71 0 \n",
"2 4.0 0.90 1 \n",
"3 3.2 1.10 0 \n",
"4 2.9 1.30 1 "
]
},
"execution_count": 161,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 145,
"id": "39cc88eb",
"metadata": {},
"outputs": [],
"source": [
"# Filter rows for each class\n",
"class_0 = df[df['Result'] == 0] # Replace 'target' with your column name\n",
"class_1 = df[df['Result'] == 1]\n",
"\n",
"# Downsample class 1 to 10,000 samples\n",
"class_1_downsampled = class_1.sample(n=10000, random_state=42)\n",
"\n",
"# Combine the two classes\n",
"df = pd.concat([class_0, class_1_downsampled])\n",
"\n",
"# Shuffle the resulting DataFrame to mix the classes\n",
"df = balanced_df.sample(frac=1, random_state=42).reset_index(drop=True)\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 146,
"id": "24000c18",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Number of patients that are male: 10000\n",
"Number of patients that are female: 7680\n"
]
},
{
"data": {
"image/png": "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U1MlSV26dFFJSYk++OADpaWlWWeLysrKFB0dbb2vrKxM8fHxki6eUSovL/fabk1NjSoqKqz3R0VFWWel6tS9rhsDAACubwH103nnz59XUJD3lIOCgqwqjY2NVVRUlL755htrvcvlUn5+vhITEyVdvK+qsrJSBQUF1picnBx5PB4lJCRYY3Jzc70uwx04cEAdO3a85KU8AABw/QmoiOrfv7/Wr1+vr776SsXFxdqzZ482b95s/SSezWbTyJEjtX79eu3bt08nTpzQsmXLFB0dbY2Ji4tTSkqKli9frvz8fB0+fFgrV67UkCFDFBMTI0m69dZbZbfb9eabb6qwsFBZWVnaunWr1z1PAADg+mbz+NPFxZ9RVVWl1atXa8+ePSorK1NMTIxSU1M1fvx46yfp6h62mZmZKZfLpV69emnq1Knq2LGjtZ2Kigqlp6d7PWxzypQpl33YZuvWrTVixAiNHTv2qudcUlLi9egDALhSp38/zddTAPxOh6UrmnT7Dofjim8sD6iICkREFABTRBRQnz9FVEBdzgMAAPAXRBQAAIABIgoAAMBAQD0nCvVxzwRQX1PfMwEAEmeiAAAAjBBRAAAABogoAAAAA0QUAACAASIKAADAABEFAABggIgCAAAwQEQBAAAYIKIAAAAMEFEAAAAGiCgAAAADRBQAAIABIgoAAMAAEQUAAGCAiAIAADBARAEAABggogAAAAwQUQAAAAaIKAAAAANEFAAAgAEiCgAAwAARBQAAYICIAgAAMEBEAQAAGCCiAAAADBBRAAAABogoAAAAA0QUAACAASIKAADAABEFAABggIgCAAAwQEQBAAAYIKIAAAAMEFEAAAAGiCgAAAADRBQAAIABIgoAAMAAEQUAAGCAiAIAADBARAEAABggogAAAAwQUQAAAAaIKAAAAANEFAAAgAEiCgAAwAARBQAAYICIAgAAMEBEAQAAGCCiAAAADBBRAAAABogoAAAAA0QUAACAASIKAADAABEFAABggIgCAAAwYPf1BK7W2bNn9c477yg7O1vnz59X+/btNWPGDPXo0UOS5PF4tGbNGu3YsUOVlZXq1auXpk2bpg4dOljbqKio0MqVK7V//37ZbDYNGjRIDz/8sFq2bGmN+e6775Senq5jx44pIiJCI0aM0JgxY675/gIAAP8UUBFVUVGhefPm6eabb9acOXMUERGh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q5vN/yPGT6uqqtKzzz6rZ599VqGhob6eDoBGxPGNyyGiLiMiIkJBQUFyOp1ey51OZ72zU9LF04sE0/XL4/Ho22+/lcfj8fVUADQyjm9cDjeWX4bdblf37t2Vk5NjLautrVVOTo4SExN9ODMAAOAPOBP1E0aPHq3XXntN3bt3V0JCgrZs2aLz588rLS3N11MDAAA+RkT9hCFDhqi8vFxr1qyR0+lUfHy85syZc8nLebi+ORwOjR8/nku6QDPE8Y3LsXm4yAsAAHDVuCcKAADAABEFAABggIgCAAAwQEQBAAAY4KfzgEawbds2ffjhh3I6nerataumTJmihIQEX08LQAMcOnRImzZt0rfffqvS0lI9+eSTGjhwoK+nBT/CmSiggbKyspSRkaHx48dryZIl6tq1qxYuXKiysjJfTw1AA5w/f17x8fGaOnWqr6cCP0VEAQ20efNm3X777Ro2bJji4uI0ffp0tWjRQp999pmvpwagAfr166f77ruPs0+4LCIKaAC3262CggIlJSVZy4KCgpSUlKS8vDwfzgwA0NSIKKABysvLVVtbW+8p9lFRUfV+eTUAoHkhogAAAAwQUUADREREKCgoqN5ZJ6fTye9YBIBmjogCGsBut6t79+7KycmxltXW1ionJ0eJiYk+nBkAoKnxnCiggUaPHq3XXntN3bt3V0JCgrZs2aLz588rLS3N11MD0ADnzp3T999/b70uLi7W8ePHFR4errZt2/pwZvAXNo/H4/H1JIBAt23bNm3atElOp1Px8fF6+OGH1bNnT19PC0ADHDx4UPPnz6+3fOjQoZo5c6YPZgR/Q0QBAAAY4J4oAAAAA0QUAACAASIKAADAABEFAABggIgCAAAwQEQBAAAYIKIAAAAMEFEAAAAGiCgA8IEJEyZozZo1vp4GgAbgd+cBaJZ27typ119/3XodFBSkyMhI9e3bV/fff79iYmJ8OLv6jhw5oq+//lqjRo1SWFiYr6cD4AoQUQCatQkTJig2NlbV1dU6evSodu7cqcOHD+uFF15QixYtfD09y5EjR7Ru3TqlpaURUUCAIKIANGv9+vVTjx49JEm33367WrdurY0bN2rfvn0aMmSIj2cHIJARUQCuK71799bGjRv197//3Vp26tQpvf/++8rJydGFCxfUuXNnjR8/Xrfccos1xu12a8OGDfr888/1v//7vwoJCVGnTp30r//6r+rbt68k6dlnn/X6u85rr72mQ4cO6bXXXrvknNasWaN169ZJkmbNmmUtX7ZsmWJjYxtjtwE0ASIKwHWluLhYkqxLZoWFhZo3b55iYmI0duxYhYSEaPfu3Vq6dKl+97vfaeDAgZKktWvX6oMPPtBtt92mhIQEVVVV6dixYyooKLAiytSgQYN0+vRpffHFF5o8ebJat24tSYqIiGjQdgE0LSIKQLPmcrlUXl5u3RO1bt06ORwO9e/fX5K0atUqtW3bVosWLZLD4ZAkDR8+XE8//bTeffddK6K++uor9evXT7/5zW8afY5du3ZVt27d9MUXX2jAgAGcfQICBBEFoFn7r//6L6/X7dq106OPPqo2bdqooqJCOTk5mjBhgqqqqlRVVWWNS05O1po1a3T27FnFxMQoLCxMhYWFOn36tDp06HCtdwOAHyKiADRrU6dOVYcOHeRyufTZZ58pNzfXOuP0/fffy+PxaPXq1Vq9evUl319WVqaYmBhNmDBBS5cu1eOPP67OnTsrJSVF//zP/6yuXbtey90B4EeIKADNWkJCgvXTeQMHDtS8efP08ssv6+WXX1Ztba0k6V/+5V+UnJx8yfe3b99eknTTTTfp1Vdf1d69e/X111/r008/1UcffaTp06fr9ttvlyTZbDZ5PJ5626j7HADNCxEF4LoRFBSkBx54QPPnz9e2bds0bNgwSVJwcPAV3RweHh6uYcOGadiwYTp37pyeeeYZrV271oqosLAwr5/6q3PmzJmf3bbNZrvKvQHga/zaFwDXlZtvvlkJCQn66KOPFBoaqptvvlmZmZkqLS2tN7a8vNz69w8//OC1rmXLlrrhhhtUXV1tLbvhhhtUVFTk9b7jx4/r8OHDPzuvkJAQSRdvhAcQGDgTBeC6c/fdd+vFF1/Uzp07NXXqVM2bN09PPvmkbr/9dsXGxqqsrEx5eXk6e/asli5dKkl64okndNNNN6l79+4KDw/XsWPH9OWXX2r48OHWdocNG6bNmzdr4cKFGjZsmMrLy7V9+3Z17tzZ66b1S+nevbsk6b333lNqaqqCg4PVv39/tWzZsum+EAAahIgCcN0ZOHCgbrjhBn344Ye64447tHjxYq1du1Y7d+7UDz/8oMjISMXHx+vee++13nPXXXdp3759OnDggKqrq9WuXTtNnDhRd999tzUmLi5Os2bN0po1a5SRkWG93rVrlw4dOvSTc0pISNDEiRO1fft2ZWdny+PxaNmyZUQU4MdsnkvdBQkAAICfxD1RAAAABogoAAAAA0QUAACAASIKAADAABEFAABggIgCAAAwQEQBAAAYIKIAAAAMEFEAAAAGiCgAAAADRBQAAIABIgoAAMDA/wF/c0g/H9/HlQAAAABJRU5ErkJggg==",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"\n",
"sns.countplot(data=df, x = 'Result', label='Count')\n",
"\n",
"M, F = df['Result'].value_counts()\n",
"print('Number of patients that are male: ',M)\n",
"print('Number of patients that are female: ',F)"
]
},
{
"cell_type": "code",
"execution_count": 147,
"id": "ca0ada46-6d91-41c6-b6dc-a11dddf657d2",
"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>Age of the patient</th>\n",
" <th>Gender of the patient</th>\n",
" <th>Total Bilirubin</th>\n",
" <th>Direct Bilirubin</th>\n",
" <th>Alkphos Alkaline Phosphotase</th>\n",
" <th>Sgpt Alamine Aminotransferase</th>\n",
" <th>Aspartate_Aminotransferase</th>\n",
" <th>Total Protiens</th>\n",
" <th>ALB Albumin</th>\n",
" <th>A/G Ratio Albumin and Globulin Ratio</th>\n",
" <th>Result</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>52.0</td>\n",
" <td>Female</td>\n",
" <td>0.9</td>\n",
" <td>0.2</td>\n",
" <td>116.0</td>\n",
" <td>36.0</td>\n",
" <td>16.0</td>\n",
" <td>6.2</td>\n",
" <td>3.2</td>\n",
" <td>1.00</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>36.0</td>\n",
" <td>Female</td>\n",
" <td>0.7</td>\n",
" <td>0.2</td>\n",
" <td>188.0</td>\n",
" <td>11.0</td>\n",
" <td>10.0</td>\n",
" <td>5.5</td>\n",
" <td>2.3</td>\n",
" <td>0.71</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>28.0</td>\n",
" <td>Male</td>\n",
" <td>0.5</td>\n",
" <td>0.1</td>\n",
" <td>162.0</td>\n",
" <td>155.0</td>\n",
" <td>108.0</td>\n",
" <td>8.1</td>\n",
" <td>4.0</td>\n",
" <td>0.90</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>49.0</td>\n",
" <td>Male</td>\n",
" <td>0.7</td>\n",
" <td>0.2</td>\n",
" <td>188.0</td>\n",
" <td>13.0</td>\n",
" <td>21.0</td>\n",
" <td>6.0</td>\n",
" <td>3.2</td>\n",
" <td>1.10</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>51.0</td>\n",
" <td>Male</td>\n",
" <td>1.0</td>\n",
" <td>0.3</td>\n",
" <td>75.0</td>\n",
" <td>25.0</td>\n",
" <td>26.0</td>\n",
" <td>5.1</td>\n",
" <td>2.9</td>\n",
" <td>1.30</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Age of the patient Gender of the patient Total Bilirubin \\\n",
"0 52.0 Female 0.9 \n",
"1 36.0 Female 0.7 \n",
"2 28.0 Male 0.5 \n",
"3 49.0 Male 0.7 \n",
"4 51.0 Male 1.0 \n",
"\n",
" Direct Bilirubin Alkphos Alkaline Phosphotase \\\n",
"0 0.2 116.0 \n",
"1 0.2 188.0 \n",
"2 0.1 162.0 \n",
"3 0.2 188.0 \n",
"4 0.3 75.0 \n",
"\n",
" Sgpt Alamine Aminotransferase Aspartate_Aminotransferase Total Protiens \\\n",
"0 36.0 16.0 6.2 \n",
"1 11.0 10.0 5.5 \n",
"2 155.0 108.0 8.1 \n",
"3 13.0 21.0 6.0 \n",
"4 25.0 26.0 5.1 \n",
"\n",
" ALB Albumin A/G Ratio Albumin and Globulin Ratio Result \n",
"0 3.2 1.00 0 \n",
"1 2.3 0.71 0 \n",
"2 4.0 0.90 1 \n",
"3 3.2 1.10 0 \n",
"4 2.9 1.30 1 "
]
},
"execution_count": 147,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "6b6b87ad",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "2c629af8-771d-46a6-9689-d8167458d448",
"metadata": {},
"source": [
"Data Cleaning"
]
},
{
"cell_type": "code",
"execution_count": 148,
"id": "9a11c005-9add-4b4d-b1a2-b21bc2496d87",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(12181, 11)\n"
]
}
],
"source": [
"df = df.drop_duplicates()\n",
"print( df.shape )"
]
},
{
"cell_type": "markdown",
"id": "bcfbdec2-af4a-4159-9eba-31573a5d2fba",
"metadata": {},
"source": [
"Removing Outliers"
]
},
{
"cell_type": "code",
"execution_count": 149,
"id": "a0bfed13-3cff-43cd-893b-5729743fab71",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<Axes: ylabel='Aspartate_Aminotransferase'>"
]
},
"execution_count": 149,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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BAAA4ISABAAA4ISABAAA4ISABAAA4ISABAAA4ISABAAA4ISABAAA4ISABAAA4ISABAAA4ISABAAA4ISABAAA4ISABAAA4KTaASkrK0tJSUkqLCx0RT0AAABuZzogHTp0SE899ZSmTZum559/XgkJCZKk3NxcPffcczp48KDLigQAAKhNpgLS4cOHtWTJEjVu3Fj33XefQ1uTJk3UrFkz7d692xX1AQAA1DpTAelvf/ubOnfurNdee03Dhw+/pj08PFxnz56tdnEAAADuYCogJScn684777xue9OmTZWbm2u6KAAAAHcyFZAaNWr0o5uyL168qKCgINNFAQAAuJOpgNSlSxft2bNHJSUl17RlZ2dr586dioiIqHZxAAAA7mAqII0bN06ZmZl64YUX9Pnnn0uSjh07pg0bNuiZZ56RJN17772uqxIAAKAWWcrKysrMfDElJUVr165VbGysw/3OnTvr4YcfVmhoaLWL+/jjj7V+/Xr99re/1YMPPihJKioqUnR0tPbv36/i4mJFRERoypQpstlsxvcyMjK0evVqxcXFyc/PTwMGDND48ePl7e1t9ImLi1N0dLRSUlLUvHlzjRkzRgMHDrzhGtPT01VcXFzN3xQAANQGq9Wqli1b/mQ/H7N/wM0336yXX35ZeXl5Sk1NVVlZmVq1aqUmTZqYHdJBQkKCPv/8c91yyy0O99etW6cjR45o5syZCggIUFRUlJYuXarXXntNklRaWqoFCxbIZrPp9ddfV1ZWllauXClvb2+NHz9ekpSWlqaFCxdq6NChmjFjhmJjY/XOO+/IZrMpMjLSJfUDAADPVe2TtIOCgtShQwd17NjRZeGosLBQK1as0COPPKLAwEDjfkFBgXbt2qVJkyapa9euCgsL0/Tp03Xq1CnFx8dLkr7++mudP39eM2bMULt27dSjRw+NHTtW27dvl91ulyTt2LFDwcHBmjhxokJDQzVixAj17t1bW7dudUn9AADAs5maQTpx4oTOnj2ru+++27i3a9cubdq0SXa7XX379tXEiRPl5WUuf61Zs0Y9evRQ9+7d9dFHHxn3ExMTVVJSom7duhn32rRpoxYtWig+Pl7h4eGKj49X27ZtHZbcIiMjtWbNGqWkpKh9+/Y6ffq0wxiSFBERobVr1163puLiYoelNIvFIn9/f+MzAACoP0wFpE2bNqlFixbGdXJyslavXq22bdvqpptu0meffSabzaZ77rnnhsfet2+fzp49qwULFlzTlp2dLR8fH4dZJenquUvZ2dlGn4rhqLy9vK38Z/m9in0uX76soqIi+fr6XvNnb9myRZs3bzau27dvr0WLFlVpHRMAAHgWUwHpu+++U69evYzrL774Qv7+/vrDH/6gRo0a6c9//rO++OKLGw5IGRkZWrt2rV566aVKQ4o7jR49WiNHjjSuy2eN0tPTjaU7AABQt/n4+NTcJu3CwkJjeUm6+oh/ZGSkGjVqJEnq0KGDYmJibnjcxMRE5eTk6PnnnzfulZaW6ptvvtE///lPzZkzR3a7Xfn5+Q6zSDk5Ocaskc1mM16cW7G9vK38Z/m9in38/f2vG8ysVqusVmulbSYfBAQAAHWUqYDUokULnTlzRoMGDVJqaqpSUlIcZlfy8vKuGyZ+TLdu3bRkyRKHe2+//bZCQkI0atQotWjRQt7e3jpx4oR69+4tSbpw4YIyMjIUHh4u6ep74D766CPl5OQYy2jHjx+Xv7+/cfRAx44ddfToUYc/5/jx48YYAACgYTMVkPr166fNmzcrMzNT58+fV2BgoO644w6jPTExUa1bt77hcf39/dW2bVuHe40aNVLjxo2N+4MGDVJ0dLSCgoIUEBCg9957T+Hh4Ua4iYiIUGhoqFauXKkJEyYoOztbGzZs0PDhw43QNmzYMG3fvl0ffPCBfv3rXys2NlYHDhzQ7Nmzzfx1AACAesZUQPrd734nu92uo0ePqkWLFpo+fbqx5JWXl6e4uDj99re/dWmh5SZNmiSLxaKlS5fKbrcbB0WW8/Ly0uzZs7VmzRq99NJLatSokQYMGKCxY8cafYKDgzV79mytW7dO27ZtU/PmzTVt2jTOQAIAAJKqcZI2ruIkbQAAPEdVT9Ku9kGRAAAA9Y3pV40UFRXpq6++0tmzZ1VQUKDS0lKHdovFokcffbTaBQIAANQ2UwEpPT1d8+bNU3p6ugICAlRQUKCgoCAjKDVu3Fh+fn6urhUAAKBWmFpie//991VQUKD58+frrbfekiQ9/fTTio6O1oQJE+Tr66s5c+a4tFAAAIDaYiogxcXFadiwYerQoYPxvrWysjJZrVbdfffd6tq164++1wwAAKAuMxWQrly5ouDgYEkyTtQuKCgw2sPDw/Xtt9+6oDwAAIDaZyogtWjRQpcuXZIkeXt7q1mzZjp9+rTRfv78+Tr3LjUAAICqMrVJu2vXrjp8+LDuu+8+SdLAgQP18ccfKy8vT2VlZfriiy80YMAAlxYKAABQW0wFpHvuuUcJCQkqLi6W1WrV6NGjlZWVpa+++kpeXl7q16+fJk6c6OpaAQAAagUnaVcTJ2kDAOA5auwk7StXrmjy5Mn6+9//bqowAACAuu6GA1KjRo3k7e2tRo0a1UQ9AAAAbmfqKbZevXrpyy+/FKtzAACgPjK1B+nkyZOKiopS48aNNXjwYLVs2bLSx/rDwsJcUmRdxh4kAAA8R1X3IJkKSGPHjq1Sv40bN97o0B6HgAQAgOeoakAy9Zj/o48+auZrAAAAHoHH/KuJGSQAADxHjT3m7ywrK0tJSUkqLCys7lAAAAB1gumAdOjQIT311FOaNm2ann/+eSUkJEiScnNz9dxzz+ngwYMuKxIAAKA2mQpIhw8f1pIlS9S4cWPjfWzlmjRpombNmmn37t2uqA8AAKDWmQpIf/vb39S5c2e99tprGj58+DXt4eHhOnv2bLWLAwAAcAdTASk5OVl33nnnddubNm2q3Nxc00UBAAC4k6mA1KhRox/dlH3x4kUFBQWZLgoAAMCdTAWkLl26aM+ePSopKbmmLTs7Wzt37lRERES1iwMAAHAHUwFp3LhxyszM1AsvvKDPP/9cknTs2DFt2LBBzzzzjCTp3nvvdV2VAAAAtcj0QZEpKSlau3atYmNjHe537txZDz/8sEJDQ11SYF3HQZEAAHgOl76L7dy5c2rZsqUCAgKuacvLy1NqaqrKysrUqlUrNWnSxFzFHoqABACA53DpSdrPPfecjhw5YlzPmzdPJ06ckCQFBQWpQ4cO6tixY4MLRwAAoH6qUkDy9fXVlStXjOuTJ08qJyenxooCAABwJ5+qdGrXrp0+/fRTeXl5GctsCQkJslqtP/q9Xr16Vb9CAACAWlalPUhnzpzRsmXLlJGRcUODb9y40XRhnoI9SAAAeA6XbtKWpJKSEl28eFHZ2dmaN2+eRo8ere7du//odzp37ly1aj0YAQkAAM9R1YBUpSU2SfL29lZISIhCQkI0YMAA9ezZUx07dqxWkQAAAHWR6XOQKmO322W32+Xn5+eqIes8ZpAAAPAcLp9Bqmjfvn06ffq0HnzwQePepk2b9NFHH0mSbrvtNs2YMaNBBSUAAFB/mHrVyKeffurw2P+pU6e0efNmRURE6K677tKxY8eMsAQAAOBpTM0gpaamasCAAcb13r17ZbPZ9Oyzz8rb21ulpaX66quvNH78eJcVCgAAUFtMzSDZ7XaHM5COHz+uyMhIeXt7S5JCQ0N16dIl11QIAABQy0wFpODgYONVI2fOnFFqaqoiIyON9pycHPYfAQAAj2VqiW3IkCFau3atzp8/r0uXLqlZs2bq2bOn0X7q1CndfPPNLisSAACgNpkKSL/5zW9ktVp19OhRhYWFadSoUfL19ZUk5eXlKTs7W0OHDnVpoQAAALXFpecgNUScgwQAgOeo6jlIpvYgAQAA1Gemltgk6dixY9q1a5fS0tKUn58v54koi8WiFStWVLtAAACA2mYqIP3973/Xhx9+KJvNpltvvVVt27Z1dV0AAABuYyogbdu2TV27dtULL7wgHx/Tk1AAAAB1kqk9SPn5+erduzfhCAAA1EumAlKHDh104cIFV9cCAABQJ5gKSA8//LAOHjyovXv3uroeAAAAtzN1DtKsWbOUl5enrKws+fn5qXnz5vLycsxaFotFixcvdlmhdRXnIAEA4Dmqeg6SqU1EQUFBaty4sVq3bm3m6wAAAHUaJ2lXEzNIAAB4Dk7SBgAAMKlaz+nb7XZduHBBBQUFKi0tvaa9c+fO1RkeAADALUwFpNLSUq1fv147duzQlStXrttv48aNpgsDAABwF1MBacuWLfrHP/6hIUOGqFOnTlq5cqUmTJiggIAA7dixQxaLRRMmTHB1rQAAALXC1B6k3bt3684779TUqVMVGRkpSQoLC9OQIUP0xz/+UZIUGxvrsiIBAABqk6kZpMzMTI0aNUrS1d3gklRUVHR1QB8f9e/fX1u3btX48eNvaNwdO3Zox44dSk9PlySFhobq3nvvVY8ePYw/Izo6Wvv371dxcbEiIiI0ZcoU2Ww2Y4yMjAytXr1acXFx8vPz04ABAzR+/Hh5e3sbfeLi4hQdHa2UlBQ1b95cY8aM0cCBA838VQAAgHrI9DlIhYWFkiQ/Pz/5+/srLS3NoU9eXt4Nj9usWTONHz9erVu3VllZmfbs2aM33nhDb7zxhm6++WatW7dOR44c0cyZMxUQEKCoqCgtXbpUr732mqSre6MWLFggm82m119/XVlZWVq5cqW8vb2NsJaWlqaFCxdq6NChmjFjhmJjY/XOO+/IZrMZs2EAAKBhM7XE1r59eyUkJBjXXbp00datW/Xtt9/qm2++0WeffaZ27drd8Li33367brvtNrVu3VohISEaN26c/Pz8dPr0aRUUFGjXrl2aNGmSunbtqrCwME2fPl2nTp1SfHy8JOnrr7/W+fPnNWPGDLVr1049evTQ2LFjtX37dtntdklXZ6mCg4M1ceJEhYaGasSIEerdu7e2bt1q5q8CAADUQ6ZmkAYPHqw9e/aouLhYVqtV48aN0yuvvKJXXnlFkhQYGKgHHnigWoWVlpbqwIEDunLlisLDw5WYmKiSkhJ169bN6NOmTRu1aNFC8fHxCg8PV3x8vNq2beuw5BYZGak1a9YoJSVF7du31+nTpx3GkKSIiAitXbv2R+spLi52OBDSYrHI39/f+AygfkhKStLSpUuN62eeecbUf/AB8GymAtIdd9yhO+64w7gODQ3VihUrFBcXJy8vL/385z9XUFCQqYKSk5M1Z84cFRcXy8/PT7NmzVJoaKiSkpLk4+OjwMBAh/5NmzZVdna2JCk7O9shHJW3l7eV/yy/V7HP5cuXVVRUJF9f30rr2rJlizZv3mxct2/fXosWLarSaZwAPMO99957zb3ysFTx338A9d8NB6SioiL95S9/UZcuXXT77bcb9wMCAhxCk1khISFavHixCgoK9OWXX+pPf/qT5s2bV+1xq2v06NEaOXKkcV0+a5Senm4s3wHwXDNmzHC4/tWvfqUvvvjCuL733nu1YsWK2i4LgIv5+PjUzMtqfX199a9//UuhoaGmCvspPj4+uummmyRdPTrgzJkz2rZtm/r06SO73a78/HyHWaScnBxj1shmsznsjSpvL28r/1l+r2Iff3//684eSVef1it/Ys8Zr7MDPFtSUpLxefbs2QoJCZF0NRRduHBBCxculCSdPXuW5TaggTC1STssLEwpKSmurqVSpaWlKi4uVlhYmLy9vXXixAmj7cKFC8rIyFB4eLgkKTw8XMnJyQ4B6Pjx4/L39zcCXceOHR3GKO9TPgaAhmfZsmXG5/JwVNl1xX4A6jdTAWnSpEnat2+fdu7cqZKSEpcVs379ep08eVJpaWlKTk42rvv376+AgAANGjRI0dHRio2NVWJiolatWqXw8HAj3ERERCg0NFQrV65UUlKSjh07pg0bNmj48OHG7M+wYcOUlpamDz74QN999522b9+u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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sns.boxplot(df.Aspartate_Aminotransferase)"
]
},
{
"cell_type": "code",
"execution_count": 150,
"id": "b4d93eea-ac9d-49f4-a853-146942bdea52",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"2987 4929.0\n",
"6010 4929.0\n",
"6619 4929.0\n",
"11615 4929.0\n",
"12126 4929.0\n",
"Name: Aspartate_Aminotransferase, dtype: float64"
]
},
"execution_count": 150,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.Aspartate_Aminotransferase.sort_values(ascending=False).head()"
]
},
{
"cell_type": "code",
"execution_count": 151,
"id": "b2d8955c-67d3-4030-b2df-c8314c479ca8",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(12165, 11)"
]
},
"execution_count": 151,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = df[df.Aspartate_Aminotransferase <=3000 ]\n",
"df.shape"
]
},
{
"cell_type": "code",
"execution_count": 152,
"id": "52c13b7b-7acc-48b3-a056-41d8245aef16",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<Axes: ylabel='Aspartate_Aminotransferase'>"
]
},
"execution_count": 152,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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6OKLL1Z4eLg3blvrcZI2AAD+o7InaV9wQDpz5ozef/99de3aVb179zZdYF1BQAIAwH9U26tGgoKC9MUXXyg3N9dUYQAAALWdqT1IMTExSk9P93YtAAAAtYKpgDR+/Hht3bpVGzduVHFxsbdrAgAA8ClTm7SnTp2q//73v3I4HLLZbGratKmCgoLcb2yxaM6cOV4rtLZiDxIAAP6jsnuQTJ2DFB4eroYNGyoyMtLMjwMAANRqXnvMv75iBgkAAP9RbU+xSdLmzZvLvVqkrOzsbG3evNnMrQEAAHzOVEBauHChUlJSztm/b98+LVy40HRRAAAAvmQqIP2WwsJCBQYGVsetAQAAql2lN2kfOnRIaWlpRvvHH3+s8BH//Px8ff7552rdurVXCgQAAKhpld6kvXLlSq1atapSNw0NDdX999+vXr16Vak4f8AmbQAA/IfX38WWk5OjnJwcuVwu/fWvf9Vtt92mnj17lhsXHBysli1b1pslNgISAAD+o9peVitJycnJatOmjRo3bmyquLqEgAQAgP+o1oMiu3TpYnw+cuSIsrOzJUktWrRQVFSUmVsCAADUGqYCkiR9++23Wr58ebnzkCIiIjR+/Hj17t27ysUBAAD4gqkltl27dumll15SixYtNGjQIGPW6MiRI9q4caOys7M1bdo0xcfHe7veWoclNqBuSUtL07x584z2ww8/rOjoaN8VBMCrqnUP0vTp0+V0OjVz5kwFBwe79RUWFuqpp56SzWbTc889d6G39jsEJKDueOCBB87ZN3/+/BqsBEB1qdZXjRw+fFgDBgwoF46ks0+xDRw4UIcPHzZzawDwCc9wdNVVV523H0DdZmoPks1mU15e3jn78/LyZLPZTBcFADWp7CG406ZNU2RkpCTp1ltvVUZGhl544QVjHMttQP1gagapW7duWrt2bYXvY9u3b5/WrVun7t27V7k4AKgJZfcclYajitplxwGo20zNIN1+++2aPn26nnzySXXs2NH4D0hGRoZSU1PVuHFjjR071quFAkB181xWK9W3b19t27athqsB4EumZpAiIiI0d+5cXXvttcrPz9e2bdu0bds25efn6/e//73mzJmjiIgIb9cKANUqISGhwuuEI6D+MX0OUuPGjXXnnXd6sRQA8I2HH37YWD7LyMhwW1bLyMhwGwegfjAdkACgrii78bp0Q3ZFy2ps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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sns.boxplot(df.Aspartate_Aminotransferase)"
]
},
{
"cell_type": "code",
"execution_count": 153,
"id": "041012fb-531e-458a-8560-7ed33f16ac3b",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"10996 2946.0\n",
"8375 2946.0\n",
"5602 2946.0\n",
"6813 2946.0\n",
"5133 2946.0\n",
"Name: Aspartate_Aminotransferase, dtype: float64"
]
},
"execution_count": 153,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.Aspartate_Aminotransferase.sort_values(ascending=False).head()"
]
},
{
"cell_type": "code",
"execution_count": 154,
"id": "b0c9c216-bdee-4ed3-a100-5e621276c8fa",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(12149, 11)"
]
},
"execution_count": 154,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = df[df.Aspartate_Aminotransferase <=2500 ]\n",
"df.shape"
]
},
{
"cell_type": "code",
"execution_count": 155,
"id": "1a1b9373-19dc-4416-95a6-c1a9d3900f49",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 155,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.isnull().values.any()"
]
},
{
"cell_type": "code",
"execution_count": 156,
"id": "3194fba5-d50d-4f53-9deb-f3ca78b51a7e",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(12149, 11)"
]
},
"execution_count": 156,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df=df.dropna(how='any') \n",
"df.shape"
]
},
{
"cell_type": "code",
"execution_count": 157,
"id": "0d2b6ba0-8197-4a18-9faf-2f3d582a419a",
"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>Age of the patient</th>\n",
" <th>Gender of the patient</th>\n",
" <th>Total Bilirubin</th>\n",
" <th>Direct Bilirubin</th>\n",
" <th>Alkphos Alkaline Phosphotase</th>\n",
" <th>Sgpt Alamine Aminotransferase</th>\n",
" <th>Aspartate_Aminotransferase</th>\n",
" <th>Total Protiens</th>\n",
" <th>ALB Albumin</th>\n",
" <th>A/G Ratio Albumin and Globulin Ratio</th>\n",
" <th>Result</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>52.0</td>\n",
" <td>Female</td>\n",
" <td>0.9</td>\n",
" <td>0.2</td>\n",
" <td>116.0</td>\n",
" <td>36.0</td>\n",
" <td>16.0</td>\n",
" <td>6.2</td>\n",
" <td>3.2</td>\n",
" <td>1.00</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>36.0</td>\n",
" <td>Female</td>\n",
" <td>0.7</td>\n",
" <td>0.2</td>\n",
" <td>188.0</td>\n",
" <td>11.0</td>\n",
" <td>10.0</td>\n",
" <td>5.5</td>\n",
" <td>2.3</td>\n",
" <td>0.71</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>28.0</td>\n",
" <td>Male</td>\n",
" <td>0.5</td>\n",
" <td>0.1</td>\n",
" <td>162.0</td>\n",
" <td>155.0</td>\n",
" <td>108.0</td>\n",
" <td>8.1</td>\n",
" <td>4.0</td>\n",
" <td>0.90</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>49.0</td>\n",
" <td>Male</td>\n",
" <td>0.7</td>\n",
" <td>0.2</td>\n",
" <td>188.0</td>\n",
" <td>13.0</td>\n",
" <td>21.0</td>\n",
" <td>6.0</td>\n",
" <td>3.2</td>\n",
" <td>1.10</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>51.0</td>\n",
" <td>Male</td>\n",
" <td>1.0</td>\n",
" <td>0.3</td>\n",
" <td>75.0</td>\n",
" <td>25.0</td>\n",
" <td>26.0</td>\n",
" <td>5.1</td>\n",
" <td>2.9</td>\n",
" <td>1.30</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Age of the patient Gender of the patient Total Bilirubin \\\n",
"0 52.0 Female 0.9 \n",
"1 36.0 Female 0.7 \n",
"2 28.0 Male 0.5 \n",
"3 49.0 Male 0.7 \n",
"4 51.0 Male 1.0 \n",
"\n",
" Direct Bilirubin Alkphos Alkaline Phosphotase \\\n",
"0 0.2 116.0 \n",
"1 0.2 188.0 \n",
"2 0.1 162.0 \n",
"3 0.2 188.0 \n",
"4 0.3 75.0 \n",
"\n",
" Sgpt Alamine Aminotransferase Aspartate_Aminotransferase Total Protiens \\\n",
"0 36.0 16.0 6.2 \n",
"1 11.0 10.0 5.5 \n",
"2 155.0 108.0 8.1 \n",
"3 13.0 21.0 6.0 \n",
"4 25.0 26.0 5.1 \n",
"\n",
" ALB Albumin A/G Ratio Albumin and Globulin Ratio Result \n",
"0 3.2 1.00 0 \n",
"1 2.3 0.71 0 \n",
"2 4.0 0.90 1 \n",
"3 3.2 1.10 0 \n",
"4 2.9 1.30 1 "
]
},
"execution_count": 157,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.head()"
]
},
{
"cell_type": "markdown",
"id": "574de37d-d4fb-4b68-95f6-330e61a2320b",
"metadata": {},
"source": [
"Machine Learning Models"
]
},
{
"cell_type": "markdown",
"id": "abce595d-98c0-4e66-9a05-8e84facfdd4a",
"metadata": {},
"source": [
"Data Preparation"
]
},
{
"cell_type": "code",
"execution_count": 163,
"id": "274c73aa-a739-45a3-b4ac-fec2f5e8f0b2",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(8504, 10) (3645, 10) (8504,) (3645,)\n"
]
}
],
"source": [
"# Create separate object for target variable\n",
"y = df.Result\n",
"\n",
"# Create separate object for input features\n",
"X = df.drop('Result', axis=1)\n",
"# Split X and y into train and test sets\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, \n",
" test_size=0.3, \n",
" random_state=0,\n",
" stratify=df.Result)\n",
"# Print number of observations in X_train, X_test, y_train, and y_test\n",
"print(X_train.shape, X_test.shape, y_train.shape, y_test.shape)"
]
},
{
"cell_type": "markdown",
"id": "467f4e74-e6fa-4ae4-8cf6-6d5d92e67e11",
"metadata": {},
"source": [
"Data standardization"
]
},
{
"cell_type": "code",
"execution_count": 164,
"id": "c1f9a786-f74d-4a33-af65-11aa3126b3fb",
"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>Age of the patient</th>\n",
" <th>Gender of the patient</th>\n",
" <th>Total Bilirubin</th>\n",
" <th>Direct Bilirubin</th>\n",
" <th>Alkphos Alkaline Phosphotase</th>\n",
" <th>Sgpt Alamine Aminotransferase</th>\n",
" <th>Aspartate_Aminotransferase</th>\n",
" <th>Total Protiens</th>\n",
" <th>ALB Albumin</th>\n",
" <th>A/G Ratio Albumin and Globulin Ratio</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>8.504000e+03</td>\n",
" <td>8.504000e+03</td>\n",
" <td>8.504000e+03</td>\n",
" <td>8.504000e+03</td>\n",
" <td>8.504000e+03</td>\n",
" <td>8.504000e+03</td>\n",
" <td>8.504000e+03</td>\n",
" <td>8.504000e+03</td>\n",
" <td>8.504000e+03</td>\n",
" <td>8.504000e+03</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>-1.215710e-16</td>\n",
" <td>1.215710e-16</td>\n",
" <td>1.169755e-17</td>\n",
" <td>-6.182992e-17</td>\n",
" <td>1.932185e-18</td>\n",
" <td>-8.982049e-18</td>\n",
" <td>-2.548395e-17</td>\n",
" <td>-2.197469e-16</td>\n",
" <td>-3.843481e-17</td>\n",
" <td>-1.478905e-16</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>1.000000e+00</td>\n",
" <td>1.000000e+00</td>\n",
" <td>1.000000e+00</td>\n",
" <td>1.000000e+00</td>\n",
" <td>1.000000e+00</td>\n",
" <td>1.000000e+00</td>\n",
" <td>1.000000e+00</td>\n",
" <td>1.000000e+00</td>\n",
" <td>1.000000e+00</td>\n",
" <td>1.000000e+00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>-2.422689e+00</td>\n",
" <td>-6.412252e-01</td>\n",
" <td>-4.594191e-01</td>\n",
" <td>-4.656438e-01</td>\n",
" <td>-9.303106e-01</td>\n",
" <td>-4.163797e-01</td>\n",
" <td>-4.956979e-01</td>\n",
" <td>-3.476604e+00</td>\n",
" <td>-2.820396e+00</td>\n",
" <td>-2.052873e+00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>-7.125996e-01</td>\n",
" <td>-6.412252e-01</td>\n",
" <td>-3.878698e-01</td>\n",
" <td>-4.279415e-01</td>\n",
" <td>-4.664464e-01</td>\n",
" <td>-3.305702e-01</td>\n",
" <td>-4.089980e-01</td>\n",
" <td>-6.316850e-01</td>\n",
" <td>-6.980597e-01</td>\n",
" <td>-7.707068e-01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>8.137060e-02</td>\n",
" <td>-6.412252e-01</td>\n",
" <td>-3.699824e-01</td>\n",
" <td>-3.902392e-01</td>\n",
" <td>-3.387774e-01</td>\n",
" <td>-2.590623e-01</td>\n",
" <td>-3.099125e-01</td>\n",
" <td>1.024876e-01</td>\n",
" <td>-7.384312e-02</td>\n",
" <td>1.361914e-01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>6.921169e-01</td>\n",
" <td>1.559331e+00</td>\n",
" <td>-1.374469e-01</td>\n",
" <td>-8.862079e-02</td>\n",
" <td>3.571851e-02</td>\n",
" <td>-8.029253e-02</td>\n",
" <td>-6.839148e-02</td>\n",
" <td>6.531171e-01</td>\n",
" <td>8.000601e-01</td>\n",
" <td>4.489149e-01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>2.829729e+00</td>\n",
" <td>1.559331e+00</td>\n",
" <td>1.288454e+01</td>\n",
" <td>6.924007e+00</td>\n",
" <td>7.780974e+00</td>\n",
" <td>1.152544e+01</td>\n",
" <td>9.350928e+00</td>\n",
" <td>2.855635e+00</td>\n",
" <td>2.922396e+00</td>\n",
" <td>5.765214e+00</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Age of the patient Gender of the patient Total Bilirubin \\\n",
"count 8.504000e+03 8.504000e+03 8.504000e+03 \n",
"mean -1.215710e-16 1.215710e-16 1.169755e-17 \n",
"std 1.000000e+00 1.000000e+00 1.000000e+00 \n",
"min -2.422689e+00 -6.412252e-01 -4.594191e-01 \n",
"25% -7.125996e-01 -6.412252e-01 -3.878698e-01 \n",
"50% 8.137060e-02 -6.412252e-01 -3.699824e-01 \n",
"75% 6.921169e-01 1.559331e+00 -1.374469e-01 \n",
"max 2.829729e+00 1.559331e+00 1.288454e+01 \n",
"\n",
" Direct Bilirubin Alkphos Alkaline Phosphotase \\\n",
"count 8.504000e+03 8.504000e+03 \n",
"mean -6.182992e-17 1.932185e-18 \n",
"std 1.000000e+00 1.000000e+00 \n",
"min -4.656438e-01 -9.303106e-01 \n",
"25% -4.279415e-01 -4.664464e-01 \n",
"50% -3.902392e-01 -3.387774e-01 \n",
"75% -8.862079e-02 3.571851e-02 \n",
"max 6.924007e+00 7.780974e+00 \n",
"\n",
" Sgpt Alamine Aminotransferase Aspartate_Aminotransferase \\\n",
"count 8.504000e+03 8.504000e+03 \n",
"mean -8.982049e-18 -2.548395e-17 \n",
"std 1.000000e+00 1.000000e+00 \n",
"min -4.163797e-01 -4.956979e-01 \n",
"25% -3.305702e-01 -4.089980e-01 \n",
"50% -2.590623e-01 -3.099125e-01 \n",
"75% -8.029253e-02 -6.839148e-02 \n",
"max 1.152544e+01 9.350928e+00 \n",
"\n",
" Total Protiens ALB Albumin A/G Ratio Albumin and Globulin Ratio \n",
"count 8.504000e+03 8.504000e+03 8.504000e+03 \n",
"mean -2.197469e-16 -3.843481e-17 -1.478905e-16 \n",
"std 1.000000e+00 1.000000e+00 1.000000e+00 \n",
"min -3.476604e+00 -2.820396e+00 -2.052873e+00 \n",
"25% -6.316850e-01 -6.980597e-01 -7.707068e-01 \n",
"50% 1.024876e-01 -7.384312e-02 1.361914e-01 \n",
"75% 6.531171e-01 8.000601e-01 4.489149e-01 \n",
"max 2.855635e+00 2.922396e+00 5.765214e+00 "
]
},
"execution_count": 164,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"train_mean = X_train.mean()\n",
"train_std = X_train.std()\n",
"## Standardize the train data set\n",
"X_train = (X_train - train_mean) / train_std\n",
"## Check for mean and std dev.\n",
"X_train.describe()"
]
},
{
"cell_type": "code",
"execution_count": 165,
"id": "6ffea4b9-4fec-41e8-adce-3105c9d76226",
"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>Age of the patient</th>\n",
" <th>Gender of the patient</th>\n",
" <th>Total Bilirubin</th>\n",
" <th>Direct Bilirubin</th>\n",
" <th>Alkphos Alkaline Phosphotase</th>\n",
" <th>Sgpt Alamine Aminotransferase</th>\n",
" <th>Aspartate_Aminotransferase</th>\n",
" <th>Total Protiens</th>\n",
" <th>ALB Albumin</th>\n",
" <th>A/G Ratio Albumin and Globulin Ratio</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>3645.000000</td>\n",
" <td>3645.000000</td>\n",
" <td>3645.000000</td>\n",
" <td>3645.000000</td>\n",
" <td>3645.000000</td>\n",
" <td>3645.000000</td>\n",
" <td>3645.000000</td>\n",
" <td>3645.000000</td>\n",
" <td>3645.000000</td>\n",
" <td>3645.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>0.026914</td>\n",
" <td>0.014414</td>\n",
" <td>0.047909</td>\n",
" <td>0.038988</td>\n",
" <td>-0.012918</td>\n",
" <td>0.030375</td>\n",
" <td>0.010400</td>\n",
" <td>0.020988</td>\n",
" <td>0.030279</td>\n",
" <td>0.034189</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>1.018290</td>\n",
" <td>1.006571</td>\n",
" <td>1.147725</td>\n",
" <td>1.085461</td>\n",
" <td>0.951881</td>\n",
" <td>1.148324</td>\n",
" <td>1.022681</td>\n",
" <td>0.991725</td>\n",
" <td>0.980889</td>\n",
" <td>1.011914</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>-2.422689</td>\n",
" <td>-0.641225</td>\n",
" <td>-0.459419</td>\n",
" <td>-0.465644</td>\n",
" <td>-0.930311</td>\n",
" <td>-0.416380</td>\n",
" <td>-0.495698</td>\n",
" <td>-3.476604</td>\n",
" <td>-2.820396</td>\n",
" <td>-2.052873</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>-0.712600</td>\n",
" <td>-0.641225</td>\n",
" <td>-0.387870</td>\n",
" <td>-0.427941</td>\n",
" <td>-0.457935</td>\n",
" <td>-0.323419</td>\n",
" <td>-0.408998</td>\n",
" <td>-0.631685</td>\n",
" <td>-0.698060</td>\n",
" <td>-0.551800</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>0.081371</td>\n",
" <td>-0.641225</td>\n",
" <td>-0.352095</td>\n",
" <td>-0.390239</td>\n",
" <td>-0.326010</td>\n",
" <td>-0.251912</td>\n",
" <td>-0.309912</td>\n",
" <td>0.102488</td>\n",
" <td>0.051000</td>\n",
" <td>0.136191</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>0.753192</td>\n",
" <td>1.559331</td>\n",
" <td>-0.119560</td>\n",
" <td>-0.088621</td>\n",
" <td>0.035719</td>\n",
" <td>-0.065991</td>\n",
" <td>-0.049813</td>\n",
" <td>0.653117</td>\n",
" <td>0.800060</td>\n",
" <td>0.448915</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>2.829729</td>\n",
" <td>1.559331</td>\n",
" <td>12.884541</td>\n",
" <td>6.924007</td>\n",
" <td>7.780974</td>\n",
" <td>11.525442</td>\n",
" <td>9.350928</td>\n",
" <td>2.855635</td>\n",
" <td>2.922396</td>\n",
" <td>5.765214</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Age of the patient Gender of the patient Total Bilirubin \\\n",
"count 3645.000000 3645.000000 3645.000000 \n",
"mean 0.026914 0.014414 0.047909 \n",
"std 1.018290 1.006571 1.147725 \n",
"min -2.422689 -0.641225 -0.459419 \n",
"25% -0.712600 -0.641225 -0.387870 \n",
"50% 0.081371 -0.641225 -0.352095 \n",
"75% 0.753192 1.559331 -0.119560 \n",
"max 2.829729 1.559331 12.884541 \n",
"\n",
" Direct Bilirubin Alkphos Alkaline Phosphotase \\\n",
"count 3645.000000 3645.000000 \n",
"mean 0.038988 -0.012918 \n",
"std 1.085461 0.951881 \n",
"min -0.465644 -0.930311 \n",
"25% -0.427941 -0.457935 \n",
"50% -0.390239 -0.326010 \n",
"75% -0.088621 0.035719 \n",
"max 6.924007 7.780974 \n",
"\n",
" Sgpt Alamine Aminotransferase Aspartate_Aminotransferase \\\n",
"count 3645.000000 3645.000000 \n",
"mean 0.030375 0.010400 \n",
"std 1.148324 1.022681 \n",
"min -0.416380 -0.495698 \n",
"25% -0.323419 -0.408998 \n",
"50% -0.251912 -0.309912 \n",
"75% -0.065991 -0.049813 \n",
"max 11.525442 9.350928 \n",
"\n",
" Total Protiens ALB Albumin A/G Ratio Albumin and Globulin Ratio \n",
"count 3645.000000 3645.000000 3645.000000 \n",
"mean 0.020988 0.030279 0.034189 \n",
"std 0.991725 0.980889 1.011914 \n",
"min -3.476604 -2.820396 -2.052873 \n",
"25% -0.631685 -0.698060 -0.551800 \n",
"50% 0.102488 0.051000 0.136191 \n",
"75% 0.653117 0.800060 0.448915 \n",
"max 2.855635 2.922396 5.765214 "
]
},
"execution_count": 165,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"## Note: We use train_mean and train_std_dev to standardize test data set\n",
"X_test = (X_test - train_mean) / train_std\n",
"## Check for mean and std dev. - not exactly 0 and 1\n",
"X_test.describe()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "20b45207-0560-4252-b809-51117de3d9d5",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "81b8c6ab-58f2-40e6-a2b8-6b64575c11ad",
"metadata": {},
"source": [
"logestic regression"
]
},
{
"cell_type": "code",
"execution_count": 166,
"id": "c2678bdc-b816-488c-b664-ea79c010bc1a",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style>#sk-container-id-5 {\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-5 {\n",
" color: var(--sklearn-color-text);\n",
"}\n",
"\n",
"#sk-container-id-5 pre {\n",
" padding: 0;\n",
"}\n",
"\n",
"#sk-container-id-5 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-5 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-5 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-5 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-5 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-5 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-5 div.sk-parallel-item {\n",
" display: flex;\n",
" flex-direction: column;\n",
"}\n",
"\n",
"#sk-container-id-5 div.sk-parallel-item:first-child::after {\n",
" align-self: flex-end;\n",
" width: 50%;\n",
"}\n",
"\n",
"#sk-container-id-5 div.sk-parallel-item:last-child::after {\n",
" align-self: flex-start;\n",
" width: 50%;\n",
"}\n",
"\n",
"#sk-container-id-5 div.sk-parallel-item:only-child::after {\n",
" width: 0;\n",
"}\n",
"\n",
"/* Serial-specific style estimator block */\n",
"\n",
"#sk-container-id-5 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-5 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-5 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-5 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-5 label.sk-toggleable__label-arrow:hover:before {\n",
" color: var(--sklearn-color-text);\n",
"}\n",
"\n",
"/* Toggleable content - dropdown */\n",
"\n",
"#sk-container-id-5 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-5 div.sk-toggleable__content.fitted {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-5 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-5 div.sk-toggleable__content.fitted pre {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-fitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-5 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-5 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-5 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-5 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-5 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-5 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-5 div.sk-label label.sk-toggleable__label,\n",
"#sk-container-id-5 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-5 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-5 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-5 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-5 div.sk-label-container {\n",
" text-align: center;\n",
"}\n",
"\n",
"/* Estimator-specific */\n",
"#sk-container-id-5 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-5 div.sk-estimator.fitted {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-0);\n",
"}\n",
"\n",
"/* on hover */\n",
"#sk-container-id-5 div.sk-estimator:hover {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-2);\n",
"}\n",
"\n",
"#sk-container-id-5 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-5 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-5 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-5 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-5 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-5\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LogisticRegression()</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-7\" type=\"checkbox\" checked><label for=\"sk-estimator-id-7\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\"> LogisticRegression<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.linear_model.LogisticRegression.html\">?<span>Documentation for LogisticRegression</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>LogisticRegression()</pre></div> </div></div></div></div>"
],
"text/plain": [
"LogisticRegression()"
]
},
"execution_count": 166,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# fitting data to model\n",
"\n",
"from sklearn.linear_model import LogisticRegression\n",
"\n",
"lr = LogisticRegression()\n",
"lr.fit(X_train, y_train)"
]
},
{
"cell_type": "code",
"execution_count": 167,
"id": "ccc5be4f-5129-467e-9ecd-72128e825b07",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.6845014111006585\n",
"0.697119341563786\n"
]
}
],
"source": [
"# model predictions\n",
"\n",
"y_pred = lr.predict(X_test)\n",
"# accuracy score\n",
"\n",
"print(accuracy_score(y_train, lr.predict(X_train)))\n",
"\n",
"lr_acc = accuracy_score(y_test, lr.predict(X_test))\n",
"print(lr_acc)"
]
},
{
"cell_type": "code",
"execution_count": 168,
"id": "4737a5e2-a9e1-4bdb-9921-01e419e985c9",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 898 494]\n",
" [ 610 1643]]\n"
]
}
],
"source": [
"# confusion matrix\n",
"\n",
"print(confusion_matrix(y_test, y_pred))"
]
},
{
"cell_type": "code",
"execution_count": 169,
"id": "6c9a3ad7-148e-40eb-99af-3853f0d2d883",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" precision recall f1-score support\n",
"\n",
" 0 0.60 0.65 0.62 1392\n",
" 1 0.77 0.73 0.75 2253\n",
"\n",
" accuracy 0.70 3645\n",
" macro avg 0.68 0.69 0.68 3645\n",
"weighted avg 0.70 0.70 0.70 3645\n",
"\n"
]
}
],
"source": [
"# classification report\n",
"\n",
"print(classification_report(y_test, y_pred))"
]
},
{
"cell_type": "markdown",
"id": "242a7711-d64f-4762-8a00-093426a8fed2",
"metadata": {},
"source": [
"KNN"
]
},
{
"cell_type": "code",
"execution_count": 170,
"id": "cf5f36d6-174f-467d-9119-ea777e0de770",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style>#sk-container-id-6 {\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-6 {\n",
" color: var(--sklearn-color-text);\n",
"}\n",
"\n",
"#sk-container-id-6 pre {\n",
" padding: 0;\n",
"}\n",
"\n",
"#sk-container-id-6 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-6 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-6 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-6 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-6 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-6 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-6 div.sk-parallel-item {\n",
" display: flex;\n",
" flex-direction: column;\n",
"}\n",
"\n",
"#sk-container-id-6 div.sk-parallel-item:first-child::after {\n",
" align-self: flex-end;\n",
" width: 50%;\n",
"}\n",
"\n",
"#sk-container-id-6 div.sk-parallel-item:last-child::after {\n",
" align-self: flex-start;\n",
" width: 50%;\n",
"}\n",
"\n",
"#sk-container-id-6 div.sk-parallel-item:only-child::after {\n",
" width: 0;\n",
"}\n",
"\n",
"/* Serial-specific style estimator block */\n",
"\n",
"#sk-container-id-6 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-6 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-6 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-6 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-6 label.sk-toggleable__label-arrow:hover:before {\n",
" color: var(--sklearn-color-text);\n",
"}\n",
"\n",
"/* Toggleable content - dropdown */\n",
"\n",
"#sk-container-id-6 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-6 div.sk-toggleable__content.fitted {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-6 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-6 div.sk-toggleable__content.fitted pre {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-fitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-6 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-6 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-6 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-6 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-6 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-6 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-6 div.sk-label label.sk-toggleable__label,\n",
"#sk-container-id-6 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-6 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-6 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-6 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-6 div.sk-label-container {\n",
" text-align: center;\n",
"}\n",
"\n",
"/* Estimator-specific */\n",
"#sk-container-id-6 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-6 div.sk-estimator.fitted {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-0);\n",
"}\n",
"\n",
"/* on hover */\n",
"#sk-container-id-6 div.sk-estimator:hover {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-2);\n",
"}\n",
"\n",
"#sk-container-id-6 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-6 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-6 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-6 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-6 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-6\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>KNeighborsClassifier()</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-8\" type=\"checkbox\" checked><label for=\"sk-estimator-id-8\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\"> KNeighborsClassifier<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.neighbors.KNeighborsClassifier.html\">?<span>Documentation for KNeighborsClassifier</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>KNeighborsClassifier()</pre></div> </div></div></div></div>"
],
"text/plain": [
"KNeighborsClassifier()"
]
},
"execution_count": 170,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.neighbors import KNeighborsClassifier\n",
"\n",
"knn = KNeighborsClassifier()\n",
"knn.fit(X_train, y_train)"
]
},
{
"cell_type": "code",
"execution_count": 171,
"id": "fc32ab9f-9b41-41f4-b5a9-4ac3680d3d5b",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.9047507055503292\n",
"0.8153635116598079\n"
]
}
],
"source": [
"# model predictions \n",
"\n",
"y_pred = knn.predict(X_test)\n",
"# accuracy score\n",
"\n",
"print(accuracy_score(y_train, knn.predict(X_train)))\n",
"\n",
"knn_acc = accuracy_score(y_test, knn.predict(X_test))\n",
"print(knn_acc)"
]
},
{
"cell_type": "code",
"execution_count": 172,
"id": "a9911e52-734d-4987-afe9-77073672dfb5",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[1120 272]\n",
" [ 401 1852]]\n"
]
}
],
"source": [
"# confusion matrix\n",
"\n",
"print(confusion_matrix(y_test, y_pred))"
]
},
{
"cell_type": "code",
"execution_count": 173,
"id": "9711d627-2120-41df-b9c5-4a4c796e07ac",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" precision recall f1-score support\n",
"\n",
" 0 0.74 0.80 0.77 1392\n",
" 1 0.87 0.82 0.85 2253\n",
"\n",
" accuracy 0.82 3645\n",
" macro avg 0.80 0.81 0.81 3645\n",
"weighted avg 0.82 0.82 0.82 3645\n",
"\n"
]
}
],
"source": [
"# classification report\n",
"\n",
"print(classification_report(y_test, y_pred))"
]
},
{
"cell_type": "markdown",
"id": "45d2d477-dc9d-405d-869b-d62e4587ca51",
"metadata": {},
"source": [
"SVM"
]
},
{
"cell_type": "code",
"execution_count": 174,
"id": "9e36c0d7-b9a6-42a9-8ed9-797b1d44cedc",
"metadata": {},
"outputs": [],
"source": [
"from sklearn.svm import SVC"
]
},
{
"cell_type": "code",
"execution_count": 175,
"id": "b7745b13-0d48-47cb-b76f-74fbf820e776",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style>#sk-container-id-7 {\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-7 {\n",
" color: var(--sklearn-color-text);\n",
"}\n",
"\n",
"#sk-container-id-7 pre {\n",
" padding: 0;\n",
"}\n",
"\n",
"#sk-container-id-7 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-7 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-7 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-7 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-7 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-7 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-7 div.sk-parallel-item {\n",
" display: flex;\n",
" flex-direction: column;\n",
"}\n",
"\n",
"#sk-container-id-7 div.sk-parallel-item:first-child::after {\n",
" align-self: flex-end;\n",
" width: 50%;\n",
"}\n",
"\n",
"#sk-container-id-7 div.sk-parallel-item:last-child::after {\n",
" align-self: flex-start;\n",
" width: 50%;\n",
"}\n",
"\n",
"#sk-container-id-7 div.sk-parallel-item:only-child::after {\n",
" width: 0;\n",
"}\n",
"\n",
"/* Serial-specific style estimator block */\n",
"\n",
"#sk-container-id-7 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-7 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-7 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-7 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-7 label.sk-toggleable__label-arrow:hover:before {\n",
" color: var(--sklearn-color-text);\n",
"}\n",
"\n",
"/* Toggleable content - dropdown */\n",
"\n",
"#sk-container-id-7 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-7 div.sk-toggleable__content.fitted {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-7 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-7 div.sk-toggleable__content.fitted pre {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-fitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-7 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-7 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-7 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-7 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-7 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-7 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-7 div.sk-label label.sk-toggleable__label,\n",
"#sk-container-id-7 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-7 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-7 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-7 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-7 div.sk-label-container {\n",
" text-align: center;\n",
"}\n",
"\n",
"/* Estimator-specific */\n",
"#sk-container-id-7 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-7 div.sk-estimator.fitted {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-0);\n",
"}\n",
"\n",
"/* on hover */\n",
"#sk-container-id-7 div.sk-estimator:hover {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-2);\n",
"}\n",
"\n",
"#sk-container-id-7 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-7 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-7 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-7 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-7 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-7\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>SVC(C=0.01, gamma=0.0001, probability=True)</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-9\" type=\"checkbox\" checked><label for=\"sk-estimator-id-9\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\"> SVC<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.svm.SVC.html\">?<span>Documentation for SVC</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>SVC(C=0.01, gamma=0.0001, probability=True)</pre></div> </div></div></div></div>"
],
"text/plain": [
"SVC(C=0.01, gamma=0.0001, probability=True)"
]
},
"execution_count": 175,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"svc = SVC(C = 0.01, gamma = 0.0001, probability=True)\n",
"svc.fit(X_train, y_train)"
]
},
{
"cell_type": "code",
"execution_count": 176,
"id": "fff63e68-bec8-450b-a147-7544e65e0083",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.6181796801505174\n",
"0.6181069958847737\n"
]
}
],
"source": [
"# model predictions \n",
"\n",
"y_pred = svc.predict(X_test)\n",
"# accuracy score\n",
"\n",
"print(accuracy_score(y_train, svc.predict(X_train)))\n",
"\n",
"svc_acc = accuracy_score(y_test, svc.predict(X_test))\n",
"print(svc_acc)"
]
},
{
"cell_type": "code",
"execution_count": 177,
"id": "dcc62841-8a28-4802-a196-9548ec0f2b25",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 0 1392]\n",
" [ 0 2253]]\n"
]
}
],
"source": [
"# confusion matrix\n",
"\n",
"print(confusion_matrix(y_test, y_pred))"
]
},
{
"cell_type": "code",
"execution_count": 178,
"id": "8b94bf63-7488-47b6-901d-a4449b027414",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" precision recall f1-score support\n",
"\n",
" 0 0.00 0.00 0.00 1392\n",
" 1 0.62 1.00 0.76 2253\n",
"\n",
" accuracy 0.62 3645\n",
" macro avg 0.31 0.50 0.38 3645\n",
"weighted avg 0.38 0.62 0.47 3645\n",
"\n"
]
}
],
"source": [
"# classification report\n",
"\n",
"print(classification_report(y_test, y_pred))"
]
},
{
"cell_type": "markdown",
"id": "b8da0359-9496-4444-8154-80cb6831fcd9",
"metadata": {},
"source": [
"DT"
]
},
{
"cell_type": "code",
"execution_count": 179,
"id": "77c86f51-9a2c-41b0-b9bc-fc29d311ba59",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training Accuracy of Decision Tree Classifier is 1.0\n",
"Test Accuracy of Decision Tree Classifier is 1.0 \n",
"\n",
"Confusion Matrix :- \n",
"[[1392 0]\n",
" [ 0 2253]]\n",
"\n",
"Classification Report :- \n",
" precision recall f1-score support\n",
"\n",
" 0 1.00 1.00 1.00 1392\n",
" 1 1.00 1.00 1.00 2253\n",
"\n",
" accuracy 1.00 3645\n",
" macro avg 1.00 1.00 1.00 3645\n",
"weighted avg 1.00 1.00 1.00 3645\n",
"\n"
]
}
],
"source": [
"from sklearn.tree import DecisionTreeClassifier\n",
"\n",
"dtc = DecisionTreeClassifier()\n",
"\n",
"dtc.fit(X_train, y_train)\n",
"\n",
"# accuracy score, confusion matrix and classification report of decision tree\n",
"\n",
"dtc_acc = accuracy_score(y_test, dtc.predict(X_test))\n",
"\n",
"print(f\"Training Accuracy of Decision Tree Classifier is {accuracy_score(y_train, dtc.predict(X_train))}\")\n",
"print(f\"Test Accuracy of Decision Tree Classifier is {dtc_acc} \\n\")\n",
"\n",
"print(f\"Confusion Matrix :- \\n{confusion_matrix(y_test, dtc.predict(X_test))}\\n\")\n",
"print(f\"Classification Report :- \\n {classification_report(y_test, dtc.predict(X_test))}\")"
]
},
{
"cell_type": "code",
"execution_count": 180,
"id": "54e581ec-708d-4fae-ba6b-dc815afe3ac1",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fitting 24 folds for each of 1200 candidates, totalling 28800 fits\n"
]
},
{
"data": {
"text/html": [
"<style>#sk-container-id-8 {\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-8 {\n",
" color: var(--sklearn-color-text);\n",
"}\n",
"\n",
"#sk-container-id-8 pre {\n",
" padding: 0;\n",
"}\n",
"\n",
"#sk-container-id-8 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-8 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-8 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-8 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-8 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-8 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-8 div.sk-parallel-item {\n",
" display: flex;\n",
" flex-direction: column;\n",
"}\n",
"\n",
"#sk-container-id-8 div.sk-parallel-item:first-child::after {\n",
" align-self: flex-end;\n",
" width: 50%;\n",
"}\n",
"\n",
"#sk-container-id-8 div.sk-parallel-item:last-child::after {\n",
" align-self: flex-start;\n",
" width: 50%;\n",
"}\n",
"\n",
"#sk-container-id-8 div.sk-parallel-item:only-child::after {\n",
" width: 0;\n",
"}\n",
"\n",
"/* Serial-specific style estimator block */\n",
"\n",
"#sk-container-id-8 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-8 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-8 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-8 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-8 label.sk-toggleable__label-arrow:hover:before {\n",
" color: var(--sklearn-color-text);\n",
"}\n",
"\n",
"/* Toggleable content - dropdown */\n",
"\n",
"#sk-container-id-8 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-8 div.sk-toggleable__content.fitted {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-8 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-8 div.sk-toggleable__content.fitted pre {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-fitted-level-0);\n",
"}\n",
"\n",
"#sk-container-id-8 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-8 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-8 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-8 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-8 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-8 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-8 div.sk-label label.sk-toggleable__label,\n",
"#sk-container-id-8 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-8 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-8 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-8 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-8 div.sk-label-container {\n",
" text-align: center;\n",
"}\n",
"\n",
"/* Estimator-specific */\n",
"#sk-container-id-8 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-8 div.sk-estimator.fitted {\n",
" /* fitted */\n",
" background-color: var(--sklearn-color-fitted-level-0);\n",
"}\n",
"\n",
"/* on hover */\n",
"#sk-container-id-8 div.sk-estimator:hover {\n",
" /* unfitted */\n",
" background-color: var(--sklearn-color-unfitted-level-2);\n",
"}\n",
"\n",
"#sk-container-id-8 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-8 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-8 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-8 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-8 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-8\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>GridSearchCV(cv=24, estimator=DecisionTreeClassifier(), n_jobs=-1,\n",
" param_grid={'criterion': ['gini', 'entropy'],\n",
" 'max_depth': [3, 5, 7, 10],\n",
" 'max_features': ['auto', 'sqrt', 'log2'],\n",
" 'min_samples_leaf': [1, 2, 3, 5, 7],\n",
" 'min_samples_split': [1, 2, 3, 5, 7],\n",
" 'splitter': ['best', 'random']},\n",
" verbose=1)</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 sk-dashed-wrapped\"><div class=\"sk-label-container\"><div class=\"sk-label fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-10\" type=\"checkbox\" ><label for=\"sk-estimator-id-10\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\"> GridSearchCV<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.model_selection.GridSearchCV.html\">?<span>Documentation for GridSearchCV</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>GridSearchCV(cv=24, estimator=DecisionTreeClassifier(), n_jobs=-1,\n",
" param_grid={'criterion': ['gini', 'entropy'],\n",
" 'max_depth': [3, 5, 7, 10],\n",
" 'max_features': ['auto', 'sqrt', 'log2'],\n",
" 'min_samples_leaf': [1, 2, 3, 5, 7],\n",
" 'min_samples_split': [1, 2, 3, 5, 7],\n",
" 'splitter': ['best', 'random']},\n",
" verbose=1)</pre></div> </div></div><div class=\"sk-parallel\"><div class=\"sk-parallel-item\"><div class=\"sk-item\"><div class=\"sk-label-container\"><div class=\"sk-label fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-11\" type=\"checkbox\" ><label for=\"sk-estimator-id-11\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">estimator: DecisionTreeClassifier</label><div class=\"sk-toggleable__content fitted\"><pre>DecisionTreeClassifier()</pre></div> </div></div><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-12\" type=\"checkbox\" ><label for=\"sk-estimator-id-12\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\"> DecisionTreeClassifier<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.tree.DecisionTreeClassifier.html\">?<span>Documentation for DecisionTreeClassifier</span></a></label><div class=\"sk-toggleable__content fitted\"><pre>DecisionTreeClassifier()</pre></div> </div></div></div></div></div></div></div></div></div>"
],
"text/plain": [
"GridSearchCV(cv=24, estimator=DecisionTreeClassifier(), n_jobs=-1,\n",
" param_grid={'criterion': ['gini', 'entropy'],\n",
" 'max_depth': [3, 5, 7, 10],\n",
" 'max_features': ['auto', 'sqrt', 'log2'],\n",
" 'min_samples_leaf': [1, 2, 3, 5, 7],\n",
" 'min_samples_split': [1, 2, 3, 5, 7],\n",
" 'splitter': ['best', 'random']},\n",
" verbose=1)"
]
},
"execution_count": 180,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# hyper parameter tuning of decision tree \n",
"\n",
"from sklearn.model_selection import GridSearchCV\n",
"grid_param = {\n",
" 'criterion' : ['gini', 'entropy'],\n",
" 'max_depth' : [3, 5, 7, 10],\n",
" 'splitter' : ['best', 'random'],\n",
" 'min_samples_leaf' : [1, 2, 3, 5, 7],\n",
" 'min_samples_split' : [1, 2, 3, 5, 7],\n",
" 'max_features' : ['auto', 'sqrt', 'log2']\n",
"}\n",
"\n",
"grid_search_dtc = GridSearchCV(dtc, grid_param, cv = 24, n_jobs = -1, verbose = 1)\n",
"grid_search_dtc.fit(X_train, y_train)"
]
},
{
"cell_type": "code",
"execution_count": 181,
"id": "99f5a2e2-e069-4984-b10b-0d16cca9ca73",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'criterion': 'gini', 'max_depth': 10, 'max_features': 'sqrt', 'min_samples_leaf': 5, 'min_samples_split': 5, 'splitter': 'best'}\n"
]
}
],
"source": [
"# best parameters \n",
"\n",
"print(grid_search_dtc.best_params_)\n"
]
},
{
"cell_type": "code",
"execution_count": 182,
"id": "e5a2f0d1-c71a-474c-b7de-e3eae9d8df24",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training Accuracy of Decision Tree Classifier is 0.8996942615239887\n",
"Test Accuracy of Decision Tree Classifier is 0.8880658436213992 \n",
"\n",
"Confusion Matrix :- \n",
"[[1184 208]\n",
" [ 200 2053]]\n",
"\n",
"Classification Report :- \n",
" precision recall f1-score support\n",
"\n",
" 0 0.86 0.85 0.85 1392\n",
" 1 0.91 0.91 0.91 2253\n",
"\n",
" accuracy 0.89 3645\n",
" macro avg 0.88 0.88 0.88 3645\n",
"weighted avg 0.89 0.89 0.89 3645\n",
"\n"
]
}
],
"source": [
"# best estimator\n",
"\n",
"dtc = grid_search_dtc.best_estimator_\n",
"\n",
"# accuracy score, confusion matrix and classification report of decision tree\n",
"\n",
"dtc_acc = accuracy_score(y_test, dtc.predict(X_test))\n",
"\n",
"print(f\"Training Accuracy of Decision Tree Classifier is {accuracy_score(y_train, dtc.predict(X_train))}\")\n",
"print(f\"Test Accuracy of Decision Tree Classifier is {dtc_acc} \\n\")\n",
"\n",
"print(f\"Confusion Matrix :- \\n{confusion_matrix(y_test, dtc.predict(X_test))}\\n\")\n",
"print(f\"Classification Report :- \\n {classification_report(y_test, dtc.predict(X_test))}\")"
]
},
{
"cell_type": "code",
"execution_count": 183,
"id": "72e8219b-e200-4672-bbd4-850b9ef03428",
"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>Model</th>\n",
" <th>Score</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Decision Tree Classifier</td>\n",
" <td>88.81</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>KNN</td>\n",
" <td>81.54</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Logistic Regression</td>\n",
" <td>69.71</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>SVM</td>\n",
" <td>61.81</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Model Score\n",
"3 Decision Tree Classifier 88.81\n",
"1 KNN 81.54\n",
"0 Logistic Regression 69.71\n",
"2 SVM 61.81"
]
},
"execution_count": 183,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"models = pd.DataFrame({\n",
" 'Model': ['Logistic Regression', 'KNN', 'SVM', 'Decision Tree Classifier'],\n",
" 'Score': [100*round(lr_acc,4), 100*round(knn_acc,4), 100*round(svc_acc,4), 100*round(dtc_acc,4)]\n",
"})\n",
"models.sort_values(by = 'Score', ascending = False)"
]
},
{
"cell_type": "code",
"execution_count": 184,
"id": "f394aff4-ce78-465b-98a9-aabfbc2b020b",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Model: LR\n",
"Mean Accuracy: 69.71%\n",
"Mean ROC AUC: 76.83%\n",
"------------------------------\n",
"Model: DT\n",
"Mean Accuracy: 87.24%\n",
"Mean ROC AUC: 96.03%\n",
"------------------------------\n",
"Model: SVM\n",
"Mean Accuracy: 61.81%\n",
"Mean ROC AUC: 74.32%\n",
"------------------------------\n",
"Model: KNN\n",
"Mean Accuracy: 81.54%\n",
"Mean ROC AUC: 90.04%\n",
"------------------------------\n"
]
},
{
"data": {
"image/png": "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lBTY2tqKz0tJSYGHh0eB61UoFFAU8OmKB7mSEQSB+5D0Tt2kpNiy+PdSvvAYRqVBqsew8vq3UqEuUMvKyoJcrlmyXC4Xd66TkxNsbGxw9epVcX56ejru3r0LHx+fMq2ViIiIiAyvQp3ZbdKkCbZs2QIHBwe4uroiJiYG27dvh7+/P4CXXzsFBARgy5YtcHFxgZOTEzZu3AhbW1s0a9bMwNUTERERUVmrUGF39OjRCAkJwYoVK5CSkgI7Ozt07twZ/fv3F5fp1asXsrKysGzZMqSnp8PX1xdTp06FUqk0YOVEREREZAgVKuyamZkhODgYwcHBBS4jk8kwaNAgDBo0qOwKIyIiIqJyqUL12SUiIiIiKg6GXSIiIiKSLIZdIiIiIpIshl0iIiIikiyGXSIiIiKSrAo1GgNVLLOHb5HcLR7H/djG0CUQERFRMfDMLhERERFJFsMuEREREUkWwy4RERERSRbDLhERERFJFsMuEREREUkWwy4RERERSRbDLhERERFJFsMuEREREUkWwy4RERERSRbvoEZERKQF7wJJJA08s0tEREREksWwS0RERESSxbBLRERERJLFsEtEREREksWwS0RERESSxbBLRERERJLFsEtEREREksWwS0RERESSxbBLRERERJLFsEtEREREksWwS0RERESSxbBLRERERJLFsEtEREREksWwS0RERESSxbBLRERERJLFsEtEREREkmVs6ALopQNrMw1dAhEREZHk8MwuEREREUkWwy4RERERSRbDLhERERFJFsMuEREREUkWwy4RERERSRbDLhERERFJVrGHHsvKysKVK1dw+/ZtxMXF4fnz5wCASpUqwdXVFTVr1kS9evVgamqq92KJiIiIiIqjyGH3/v37CA8Px5kzZ5CZmQmlUgl7e3tYWFgAAB49eoRr164hPDwcJiYmaNGiBXr06IFq1aqVWvFERERERIUpUtj96aefcPr0aXh5eWHAgAGoX78+XF1dIZdr9oJQqVSIi4vD5cuXcerUKUyePBktW7bEhx9+WBq1ExEREREVqkhhVyaTYe7cufDw8Ch0OblcjmrVqqFatWro0aMHYmJiEBYWpocyiYiIiIiKr0hhV9czsx4eHjyrS0REREQGw9EYiIiIiEiyij0agzaHDh3CsWPHkJSUBBsbG/j5+aFjx46QyWT6WD0RERERkU5KHHY3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ERERkT7oFHZbt26N/fv3IzIyMt+8/fv34+TJk2jbtm2JiyMiIiIiKgmdujH07dsXd+7cwbRp01C1alUAwJo1a5CWloakpCQ0atRI4yYNRERERESGoFPYNTY2xtSpU3H06FGcOnUKKpUKubm5cHd3x+DBg9G2bdtye39kIiIiInpz6HwHNZlMhrZt27K7AhERERGVWzr12U1LS8O9e/cKnH///n2kpaXpXBQRERERkT7oFHZXr16N33//vcD5v//+O9atW6dzUURERERE+qBT2L1+/XqhY902adIEV69e1bkoIiIiIiJ90CnspqamwsrKqsD5lSpVQkpKis5FERERERHpg05h18bGBtHR0QXOj4qKKjQMExERERGVBZ3CbrNmzXDgwAGcO3cu37yzZ8/i4MGDaN68eYmLIyIiIiIqCZ2GHhs4cCCuXr2K77//Hh4eHnBzcwMAxMbGIiYmBq6urhg4cKBeCyUiIiIiKi6dwq65uTlmz56Nbdu24fTp0zh16hQAoHLlyujXrx969uwJU1NTvRZKRERERFRcOt9UwtTUFAMHDuQZXCIiIiIqt3Tqs0tEREREVBHofGY3Li4Ohw4dwpMnT/DixQsIgqAxXyaT4ZtvvilxgUREREREutIp7B45cgRLliyBkZERqlSpAktLy3zL/Df8EhERERGVNZ3C7t9//43q1avjiy++4Hi6RERERFRu6dRnNykpCf7+/gy6RERERFSu6RR23d3dkZSUpO9aiIiIiIj0SqewO2LECBw8eBC3b9/Wdz1ERERERHqjU5/drVu3wtzcHN988w1cXV3h4OAAuVwzN8tkMkyePFkvRRIRERER6UKnsHv//n0AgIODAzIzMxEXF5dvGZlMVrLKiIiIiIhKSKewu3jxYn3XQURERESkd7yDGhERERFJls53UFPLyMhAenq61ptIODg4lHT1REREREQ60zns7t27F9u3b8eTJ08KXCYkJETX1RMRERERlZhO3Rj27t2LP/74A87Ozhg8eDAAIDAwEL1794aNjQ08PDwwfvx4vRZKRERERFRcOoXd3bt3o0GDBpg6dSo6deoEAGjcuDGGDBmCn376CRkZGXj+/LleCyUiIiIiKi6dwu6TJ0/QpEkTAICRkREAIDc3FwBgbm6ODh06YO/evXoqkYiIiIhINzqFXXNzc+Tl5Yn/VyqVSExMFOeb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TWOaiYkJKlWqJE7v0KED1q5dC0tLS5ibm2PlypXw8fFh2CUiIiJ6AxU77CqVSkRERMDNza006imxkSNHQiaTYcGCBcjNzRVvKkFEREREbx6dbirh6emJ2NjycWXk9OnTNR4rlUqMGTOGAZeIiIiIijbO7n+NHDkSx48fR0REBPLy8vRdExERERGRXuh0ZnfJkiWQy+X4/fffsWrVKtjZ2eUbCkwmk+H777/XS5FERERERLrQKexaWlqiUqVKqFKlir7rISIiIiLSG53C7n/7yRIRERERlUeGvfcvEREREVEp0unMLgCkp6dj7969uH79OlJSUjBu3Dh4e3sjLS0Nhw4dQtOmTeHs7KzPWomIiIiIikWnsPv06VNMnz4diYmJcHFxwYMHD5CZmQngZX/effv2ISEhAaNGjdJrsURERERExaFT2F23bh0yMjLw/fffw8rKCmPHjtWY36xZM1y4cEEvBRIRERER6UqnPrtXrlxB9+7d4erqCplMlm9+5cqV8fTp0xIXR0RERERUEjqF3ezsbFhZWRU4PyMjQ+eCiIiIiIj0Raew6+rqips3bxY4/+zZs/Dw8NC1JiIiIiIivdAp7AYEBOD48eMICwtDeno6AEClUuHx48dYtGgRIiMjERgYqNdCiYiIiIiKS6cL1Nq2bYvExESEhIRg48aNAIDvvvsOgiBALpdjyJAhaN68uV4LJSIiIiIqLp3H2e3bty/atm2LU6dO4fHjxxAEAZUrV0aLFi1QuXJlfdZIRERERKSTYoXd7OxsnDt3DvHx8bC0tESTJk0QFBRUWrUREREREZVIkcNuSkoKvvrqK8THx4vT1qxZg88++wz169cvleKIiIiIiEqiyBeo/fPPP0hISEBgYCCmTJmCkSNHQqlUYvny5aVZHxERERGRzop8Zvfy5cto27YtRowYIU6zsbHBzz//jIcPH6JKlSqlUiARERERka6KfGY3MTERvr6+GtPUj5OTk/VaFBERERGRPhQ57Obm5kKpVGpMUygUAF6OsUtEREREVN4UazSG+Ph4REVFiY/VN5R49OgRzM3N8y3v6elZwvKIiIiIiHRXrLAbEhKCkJCQfNNXrFhR4PJERERERIZS5LA7fvz40qyDiIiIiEjvihx227dvX4plEBERERHpX5EvUCMiIiIiqmgYdomIiIhIshh2iYiIiEiyGHaJiIiI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",
"text/plain": [
"<Figure size 800x500 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from sklearn import metrics\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"# Define models with labels\n",
"models = [\n",
" {'label': 'LR', 'model': lr},\n",
" {'label': 'DT', 'model': dtc},\n",
" {'label': 'SVM', 'model': svc},\n",
" {'label': 'KNN', 'model': knn}\n",
"]\n",
"\n",
"# Initialize lists to store performance metrics\n",
"means_roc = []\n",
"means_accuracy = []\n",
"\n",
"# Evaluate each model\n",
"for m in models:\n",
" model = m['model']\n",
" label = m['label']\n",
" \n",
" # Fit model and make predictions\n",
" model.fit(X_train, y_train)\n",
" y_pred = model.predict(X_test)\n",
" \n",
" # Calculate accuracy\n",
" accuracy = metrics.accuracy_score(y_test, y_pred)\n",
" mean_accuracy = 100 * round(accuracy, 4)\n",
" means_accuracy.append(mean_accuracy)\n",
" \n",
" # Calculate ROC AUC\n",
" if hasattr(model, 'predict_proba'):\n",
" y_pred_prob = model.predict_proba(X_test)[:,1]\n",
" mean_roc = 100 * round(metrics.roc_auc_score(y_test, y_pred_prob), 4)\n",
" else:\n",
" mean_roc = np.nan # Use NaN if predict_proba is not available\n",
" \n",
" means_roc.append(mean_roc)\n",
" \n",
" # Display mean accuracy and mean ROC AUC for each model\n",
" print(f\"Model: {label}\")\n",
" print(f\"Mean Accuracy: {mean_accuracy:.2f}%\")\n",
" print(f\"Mean ROC AUC: {mean_roc:.2f}%\")\n",
" print(\"-\" * 30)\n",
"\n",
"# Convert lists to tuples for plotting\n",
"means_accuracy = tuple(means_accuracy)\n",
"means_roc = tuple(means_roc)\n",
"\n",
"# Create plot\n",
"index = np.arange(len(models))\n",
"bar_width = 0.35\n",
"\n",
"# Create a figure\n",
"fig, ax = plt.subplots(figsize=(8, 5))\n",
"\n",
"# Plot accuracy and ROC AUC as bar charts\n",
"rects1 = plt.bar(index, means_accuracy, bar_width, alpha=0.8, color='mediumpurple', label='Accuracy (%)')\n",
"rects2 = plt.bar(index + bar_width, means_roc, bar_width, alpha=0.8, color='rebeccapurple', label='ROC AUC (%)')\n",
"\n",
"# Set axis labels and title\n",
"ax.set_xlabel('Models')\n",
"ax.set_ylabel('Performance (%)')\n",
"ax.set_title('Performance Evaluation - Liver Disease Prediction')\n",
"\n",
"# Set x-ticks and labels\n",
"ax.set_xticks(index + bar_width / 2)\n",
"ax.set_xticklabels([model['label'] for model in models], rotation=40, ha='center')\n",
"\n",
"# Add legend\n",
"ax.legend()\n",
"\n",
"# Show the plot\n",
"plt.show()\n"
]
},
{
"cell_type": "code",
"execution_count": 190,
"id": "4339012f",
"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>Age of the patient</th>\n",
" <th>Gender of the patient</th>\n",
" <th>Total Bilirubin</th>\n",
" <th>Direct Bilirubin</th>\n",
" <th>Alkphos Alkaline Phosphotase</th>\n",
" <th>Sgpt Alamine Aminotransferase</th>\n",
" <th>Aspartate_Aminotransferase</th>\n",
" <th>Total Protiens</th>\n",
" <th>ALB Albumin</th>\n",
" <th>A/G Ratio Albumin and Globulin Ratio</th>\n",
" <th>Result</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>15940</th>\n",
" <td>50.0</td>\n",
" <td>1</td>\n",
" <td>0.8</td>\n",
" <td>0.2</td>\n",
" <td>148.0</td>\n",
" <td>23.0</td>\n",
" <td>35.0</td>\n",
" <td>6.0</td>\n",
" <td>3.0</td>\n",
" <td>1.0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11861</th>\n",
" <td>30.0</td>\n",
" <td>1</td>\n",
" <td>0.8</td>\n",
" <td>0.2</td>\n",
" <td>650.0</td>\n",
" <td>70.0</td>\n",
" <td>138.0</td>\n",
" <td>6.6</td>\n",
" <td>3.1</td>\n",
" <td>0.8</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14768</th>\n",
" <td>35.0</td>\n",
" <td>1</td>\n",
" <td>2.2</td>\n",
" <td>1.0</td>\n",
" <td>310.0</td>\n",
" <td>119.0</td>\n",
" <td>42.0</td>\n",
" <td>7.9</td>\n",
" <td>4.1</td>\n",
" <td>1.0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17664</th>\n",
" <td>26.0</td>\n",
" <td>0</td>\n",
" <td>0.7</td>\n",
" <td>0.1</td>\n",
" <td>162.0</td>\n",
" <td>52.0</td>\n",
" <td>41.0</td>\n",
" <td>5.2</td>\n",
" <td>2.5</td>\n",
" <td>0.9</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4052</th>\n",
" <td>57.0</td>\n",
" <td>0</td>\n",
" <td>1.4</td>\n",
" <td>0.8</td>\n",
" <td>178.0</td>\n",
" <td>13.0</td>\n",
" <td>26.0</td>\n",
" <td>8.0</td>\n",
" <td>4.6</td>\n",
" <td>1.3</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Age of the patient Gender of the patient Total Bilirubin \\\n",
"15940 50.0 1 0.8 \n",
"11861 30.0 1 0.8 \n",
"14768 35.0 1 2.2 \n",
"17664 26.0 0 0.7 \n",
"4052 57.0 0 1.4 \n",
"\n",
" Direct Bilirubin Alkphos Alkaline Phosphotase \\\n",
"15940 0.2 148.0 \n",
"11861 0.2 650.0 \n",
"14768 1.0 310.0 \n",
"17664 0.1 162.0 \n",
"4052 0.8 178.0 \n",
"\n",
" Sgpt Alamine Aminotransferase Aspartate_Aminotransferase \\\n",
"15940 23.0 35.0 \n",
"11861 70.0 138.0 \n",
"14768 119.0 42.0 \n",
"17664 52.0 41.0 \n",
"4052 13.0 26.0 \n",
"\n",
" Total Protiens ALB Albumin A/G Ratio Albumin and Globulin Ratio \\\n",
"15940 6.0 3.0 1.0 \n",
"11861 6.6 3.1 0.8 \n",
"14768 7.9 4.1 1.0 \n",
"17664 5.2 2.5 0.9 \n",
"4052 8.0 4.6 1.3 \n",
"\n",
" Result \n",
"15940 1 \n",
"11861 1 \n",
"14768 0 \n",
"17664 0 \n",
"4052 0 "
]
},
"execution_count": 190,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.sample(5)"
]
},
{
"cell_type": "code",
"execution_count": 192,
"id": "d7770e6a-f844-4c3c-8a8f-3c864d76f281",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1]\n",
"M\n"
]
}
],
"source": [
"from sklearn.linear_model import LogisticRegression\n",
"input_data =(26.0,0,0.7,0.1,162.0,52.0,41.0,5.2,2.5,0.9)\n",
"#(26.0,0,0.7,0.2,185.0,16.0,22.0,7.3,3.7,1.00)\n",
"#100,12,1,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,0,1) \n",
"\n",
"'''(14.36,0.09779,0.08129,0.04781,0.1885,0.05766,0.7886,23.56,0.008462,\n",
"0.0146,0.02387,0.01315,0.0198,0.0023,15.11,711.2,0.144,0.1773,0.239,0.1288,0.2977,0.07259\n",
")'''\n",
"\n",
"input_data_as_numpy_array = np.asarray(input_data)\n",
"\n",
"# reshape the array as we are predicting for one instance\n",
"input_data_reshaped = input_data_as_numpy_array.reshape(1,-1)\n",
"predictions = lr.predict(input_data_reshaped)\n",
"print(predictions)\n",
"if (predictions == 0):\n",
" print('B')\n",
"else:\n",
" print('M')"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "e8337a7a-1d7d-4141-821c-ba6d4af45151",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "1f597232-8f9c-4a8d-8edd-495539d95274",
"metadata": {},
"outputs": [],
"source": [
"\n",
"import pickle\n",
"model = dtc\n",
"filename = r'C:\\Users\\Pranshu Saini\\Desktop\\disease-prediction-main\\docpat\\model\\liver_prediction.pkl'\n",
"pickle.dump(model, open(filename,'wb'))"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "10843248",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "fd047969",
"metadata": {},
"outputs": [],
"source": []
}
],
"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.12.4"
}
},
"nbformat": 4,
"nbformat_minor": 5
}