{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Лабораторная 4"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Информация о диабете индейцев Пима"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Index(['Pregnancies', 'Glucose', 'BloodPressure', 'SkinThickness', 'Insulin',\n",
" 'BMI', 'DiabetesPedigreeFunction', 'Age', 'Outcome'],\n",
" dtype='object')\n"
]
},
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Pregnancies | \n",
" Glucose | \n",
" BloodPressure | \n",
" SkinThickness | \n",
" Insulin | \n",
" BMI | \n",
" DiabetesPedigreeFunction | \n",
" Age | \n",
" Outcome | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 6 | \n",
" 148 | \n",
" 72 | \n",
" 35 | \n",
" 0 | \n",
" 33.6 | \n",
" 0.627 | \n",
" 50 | \n",
" 1 | \n",
"
\n",
" \n",
" 1 | \n",
" 1 | \n",
" 85 | \n",
" 66 | \n",
" 29 | \n",
" 0 | \n",
" 26.6 | \n",
" 0.351 | \n",
" 31 | \n",
" 0 | \n",
"
\n",
" \n",
" 2 | \n",
" 8 | \n",
" 183 | \n",
" 64 | \n",
" 0 | \n",
" 0 | \n",
" 23.3 | \n",
" 0.672 | \n",
" 32 | \n",
" 1 | \n",
"
\n",
" \n",
" 3 | \n",
" 1 | \n",
" 89 | \n",
" 66 | \n",
" 23 | \n",
" 94 | \n",
" 28.1 | \n",
" 0.167 | \n",
" 21 | \n",
" 0 | \n",
"
\n",
" \n",
" 4 | \n",
" 0 | \n",
" 137 | \n",
" 40 | \n",
" 35 | \n",
" 168 | \n",
" 43.1 | \n",
" 2.288 | \n",
" 33 | \n",
" 1 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 763 | \n",
" 10 | \n",
" 101 | \n",
" 76 | \n",
" 48 | \n",
" 180 | \n",
" 32.9 | \n",
" 0.171 | \n",
" 63 | \n",
" 0 | \n",
"
\n",
" \n",
" 764 | \n",
" 2 | \n",
" 122 | \n",
" 70 | \n",
" 27 | \n",
" 0 | \n",
" 36.8 | \n",
" 0.340 | \n",
" 27 | \n",
" 0 | \n",
"
\n",
" \n",
" 765 | \n",
" 5 | \n",
" 121 | \n",
" 72 | \n",
" 23 | \n",
" 112 | \n",
" 26.2 | \n",
" 0.245 | \n",
" 30 | \n",
" 0 | \n",
"
\n",
" \n",
" 766 | \n",
" 1 | \n",
" 126 | \n",
" 60 | \n",
" 0 | \n",
" 0 | \n",
" 30.1 | \n",
" 0.349 | \n",
" 47 | \n",
" 1 | \n",
"
\n",
" \n",
" 767 | \n",
" 1 | \n",
" 93 | \n",
" 70 | \n",
" 31 | \n",
" 0 | \n",
" 30.4 | \n",
" 0.315 | \n",
" 23 | \n",
" 0 | \n",
"
\n",
" \n",
"
\n",
"
768 rows × 9 columns
\n",
"
"
],
"text/plain": [
" Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \\\n",
"0 6 148 72 35 0 33.6 \n",
"1 1 85 66 29 0 26.6 \n",
"2 8 183 64 0 0 23.3 \n",
"3 1 89 66 23 94 28.1 \n",
"4 0 137 40 35 168 43.1 \n",
".. ... ... ... ... ... ... \n",
"763 10 101 76 48 180 32.9 \n",
"764 2 122 70 27 0 36.8 \n",
"765 5 121 72 23 112 26.2 \n",
"766 1 126 60 0 0 30.1 \n",
"767 1 93 70 31 0 30.4 \n",
"\n",
" DiabetesPedigreeFunction Age Outcome \n",
"0 0.627 50 1 \n",
"1 0.351 31 0 \n",
"2 0.672 32 1 \n",
"3 0.167 21 0 \n",
"4 2.288 33 1 \n",
".. ... ... ... \n",
"763 0.171 63 0 \n",
"764 0.340 27 0 \n",
"765 0.245 30 0 \n",
"766 0.349 47 1 \n",
"767 0.315 23 0 \n",
"\n",
"[768 rows x 9 columns]"
]
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn import set_config\n",
"\n",
"set_config(transform_output=\"pandas\")\n",
"df = pd.read_csv(\".//scv//diabetes.csv\")\n",
"print(df.columns)\n",
"df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Формирование выборок"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'X_train'"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Pregnancies | \n",
" Glucose | \n",
" BloodPressure | \n",
" SkinThickness | \n",
" Insulin | \n",
" BMI | \n",
" DiabetesPedigreeFunction | \n",
" Age | \n",
" Outcome | \n",
"
\n",
" \n",
" \n",
" \n",
" 196 | \n",
" 1 | \n",
" 105 | \n",
" 58 | \n",
" 0 | \n",
" 0 | \n",
" 24.3 | \n",
" 0.187 | \n",
" 21 | \n",
" 0 | \n",
"
\n",
" \n",
" 69 | \n",
" 4 | \n",
" 146 | \n",
" 85 | \n",
" 27 | \n",
" 100 | \n",
" 28.9 | \n",
" 0.189 | \n",
" 27 | \n",
" 0 | \n",
"
\n",
" \n",
" 494 | \n",
" 3 | \n",
" 80 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0.0 | \n",
" 0.174 | \n",
" 22 | \n",
" 0 | \n",
"
\n",
" \n",
" 463 | \n",
" 5 | \n",
" 88 | \n",
" 78 | \n",
" 30 | \n",
" 0 | \n",
" 27.6 | \n",
" 0.258 | \n",
" 37 | \n",
" 0 | \n",
"
\n",
" \n",
" 653 | \n",
" 2 | \n",
" 120 | \n",
" 54 | \n",
" 0 | \n",
" 0 | \n",
" 26.8 | \n",
" 0.455 | \n",
" 27 | \n",
" 0 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 322 | \n",
" 0 | \n",
" 124 | \n",
" 70 | \n",
" 20 | \n",
" 0 | \n",
" 27.4 | \n",
" 0.254 | \n",
" 36 | \n",
" 1 | \n",
"
\n",
" \n",
" 109 | \n",
" 0 | \n",
" 95 | \n",
" 85 | \n",
" 25 | \n",
" 36 | \n",
" 37.4 | \n",
" 0.247 | \n",
" 24 | \n",
" 1 | \n",
"
\n",
" \n",
" 27 | \n",
" 1 | \n",
" 97 | \n",
" 66 | \n",
" 15 | \n",
" 140 | \n",
" 23.2 | \n",
" 0.487 | \n",
" 22 | \n",
" 0 | \n",
"
\n",
" \n",
" 651 | \n",
" 1 | \n",
" 117 | \n",
" 60 | \n",
" 23 | \n",
" 106 | \n",
" 33.8 | \n",
" 0.466 | \n",
" 27 | \n",
" 0 | \n",
"
\n",
" \n",
" 197 | \n",
" 3 | \n",
" 107 | \n",
" 62 | \n",
" 13 | \n",
" 48 | \n",
" 22.9 | \n",
" 0.678 | \n",
" 23 | \n",
" 1 | \n",
"
\n",
" \n",
"
\n",
"
614 rows × 9 columns
\n",
"
"
],
"text/plain": [
" Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \\\n",
"196 1 105 58 0 0 24.3 \n",
"69 4 146 85 27 100 28.9 \n",
"494 3 80 0 0 0 0.0 \n",
"463 5 88 78 30 0 27.6 \n",
"653 2 120 54 0 0 26.8 \n",
".. ... ... ... ... ... ... \n",
"322 0 124 70 20 0 27.4 \n",
"109 0 95 85 25 36 37.4 \n",
"27 1 97 66 15 140 23.2 \n",
"651 1 117 60 23 106 33.8 \n",
"197 3 107 62 13 48 22.9 \n",
"\n",
" DiabetesPedigreeFunction Age Outcome \n",
"196 0.187 21 0 \n",
"69 0.189 27 0 \n",
"494 0.174 22 0 \n",
"463 0.258 37 0 \n",
"653 0.455 27 0 \n",
".. ... ... ... \n",
"322 0.254 36 1 \n",
"109 0.247 24 1 \n",
"27 0.487 22 0 \n",
"651 0.466 27 0 \n",
"197 0.678 23 1 \n",
"\n",
"[614 rows x 9 columns]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"'y_train'"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Outcome | \n",
"
\n",
" \n",
" \n",
" \n",
" 196 | \n",
" 0 | \n",
"
\n",
" \n",
" 69 | \n",
" 0 | \n",
"
\n",
" \n",
" 494 | \n",
" 0 | \n",
"
\n",
" \n",
" 463 | \n",
" 0 | \n",
"
\n",
" \n",
" 653 | \n",
" 0 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 322 | \n",
" 1 | \n",
"
\n",
" \n",
" 109 | \n",
" 1 | \n",
"
\n",
" \n",
" 27 | \n",
" 0 | \n",
"
\n",
" \n",
" 651 | \n",
" 0 | \n",
"
\n",
" \n",
" 197 | \n",
" 1 | \n",
"
\n",
" \n",
"
\n",
"
614 rows × 1 columns
\n",
"
"
],
"text/plain": [
" Outcome\n",
"196 0\n",
"69 0\n",
"494 0\n",
"463 0\n",
"653 0\n",
".. ...\n",
"322 1\n",
"109 1\n",
"27 0\n",
"651 0\n",
"197 1\n",
"\n",
"[614 rows x 1 columns]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"'X_test'"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Pregnancies | \n",
" Glucose | \n",
" BloodPressure | \n",
" SkinThickness | \n",
" Insulin | \n",
" BMI | \n",
" DiabetesPedigreeFunction | \n",
" Age | \n",
" Outcome | \n",
"
\n",
" \n",
" \n",
" \n",
" 669 | \n",
" 9 | \n",
" 154 | \n",
" 78 | \n",
" 30 | \n",
" 100 | \n",
" 30.9 | \n",
" 0.164 | \n",
" 45 | \n",
" 0 | \n",
"
\n",
" \n",
" 379 | \n",
" 0 | \n",
" 93 | \n",
" 100 | \n",
" 39 | \n",
" 72 | \n",
" 43.4 | \n",
" 1.021 | \n",
" 35 | \n",
" 0 | \n",
"
\n",
" \n",
" 640 | \n",
" 0 | \n",
" 102 | \n",
" 86 | \n",
" 17 | \n",
" 105 | \n",
" 29.3 | \n",
" 0.695 | \n",
" 27 | \n",
" 0 | \n",
"
\n",
" \n",
" 658 | \n",
" 11 | \n",
" 127 | \n",
" 106 | \n",
" 0 | \n",
" 0 | \n",
" 39.0 | \n",
" 0.190 | \n",
" 51 | \n",
" 0 | \n",
"
\n",
" \n",
" 304 | \n",
" 3 | \n",
" 150 | \n",
" 76 | \n",
" 0 | \n",
" 0 | \n",
" 21.0 | \n",
" 0.207 | \n",
" 37 | \n",
" 0 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 203 | \n",
" 2 | \n",
" 99 | \n",
" 70 | \n",
" 16 | \n",
" 44 | \n",
" 20.4 | \n",
" 0.235 | \n",
" 27 | \n",
" 0 | \n",
"
\n",
" \n",
" 605 | \n",
" 1 | \n",
" 124 | \n",
" 60 | \n",
" 32 | \n",
" 0 | \n",
" 35.8 | \n",
" 0.514 | \n",
" 21 | \n",
" 0 | \n",
"
\n",
" \n",
" 561 | \n",
" 0 | \n",
" 198 | \n",
" 66 | \n",
" 32 | \n",
" 274 | \n",
" 41.3 | \n",
" 0.502 | \n",
" 28 | \n",
" 1 | \n",
"
\n",
" \n",
" 280 | \n",
" 0 | \n",
" 146 | \n",
" 70 | \n",
" 0 | \n",
" 0 | \n",
" 37.9 | \n",
" 0.334 | \n",
" 28 | \n",
" 1 | \n",
"
\n",
" \n",
" 103 | \n",
" 1 | \n",
" 81 | \n",
" 72 | \n",
" 18 | \n",
" 40 | \n",
" 26.6 | \n",
" 0.283 | \n",
" 24 | \n",
" 0 | \n",
"
\n",
" \n",
"
\n",
"
154 rows × 9 columns
\n",
"
"
],
"text/plain": [
" Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \\\n",
"669 9 154 78 30 100 30.9 \n",
"379 0 93 100 39 72 43.4 \n",
"640 0 102 86 17 105 29.3 \n",
"658 11 127 106 0 0 39.0 \n",
"304 3 150 76 0 0 21.0 \n",
".. ... ... ... ... ... ... \n",
"203 2 99 70 16 44 20.4 \n",
"605 1 124 60 32 0 35.8 \n",
"561 0 198 66 32 274 41.3 \n",
"280 0 146 70 0 0 37.9 \n",
"103 1 81 72 18 40 26.6 \n",
"\n",
" DiabetesPedigreeFunction Age Outcome \n",
"669 0.164 45 0 \n",
"379 1.021 35 0 \n",
"640 0.695 27 0 \n",
"658 0.190 51 0 \n",
"304 0.207 37 0 \n",
".. ... ... ... \n",
"203 0.235 27 0 \n",
"605 0.514 21 0 \n",
"561 0.502 28 1 \n",
"280 0.334 28 1 \n",
"103 0.283 24 0 \n",
"\n",
"[154 rows x 9 columns]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"'y_test'"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Outcome | \n",
"
\n",
" \n",
" \n",
" \n",
" 669 | \n",
" 0 | \n",
"
\n",
" \n",
" 379 | \n",
" 0 | \n",
"
\n",
" \n",
" 640 | \n",
" 0 | \n",
"
\n",
" \n",
" 658 | \n",
" 0 | \n",
"
\n",
" \n",
" 304 | \n",
" 0 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 203 | \n",
" 0 | \n",
"
\n",
" \n",
" 605 | \n",
" 0 | \n",
"
\n",
" \n",
" 561 | \n",
" 1 | \n",
"
\n",
" \n",
" 280 | \n",
" 1 | \n",
"
\n",
" \n",
" 103 | \n",
" 0 | \n",
"
\n",
" \n",
"
\n",
"
154 rows × 1 columns
\n",
"
"
],
"text/plain": [
" Outcome\n",
"669 0\n",
"379 0\n",
"640 0\n",
"658 0\n",
"304 0\n",
".. ...\n",
"203 0\n",
"605 0\n",
"561 1\n",
"280 1\n",
"103 0\n",
"\n",
"[154 rows x 1 columns]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from typing import Tuple\n",
"import pandas as pd\n",
"from pandas import DataFrame\n",
"from sklearn.model_selection import train_test_split\n",
"\n",
"def split_stratified_into_train_val_test(\n",
" df_input,\n",
" stratify_colname=\"y\",\n",
" frac_train=0.6,\n",
" frac_val=0.15,\n",
" frac_test=0.25,\n",
" random_state=None,\n",
") -> Tuple[DataFrame, DataFrame, DataFrame, DataFrame, DataFrame, DataFrame]:\n",
" \n",
" if frac_train + frac_val + frac_test != 1.0:\n",
" raise ValueError(\n",
" \"fractions %f, %f, %f do not add up to 1.0\"\n",
" % (frac_train, frac_val, frac_test)\n",
" )\n",
" if stratify_colname not in df_input.columns:\n",
" raise ValueError(\"%s is not a column in the dataframe\" % (stratify_colname))\n",
" X = df_input # Contains all columns.\n",
" y = df_input[\n",
" [stratify_colname]\n",
" ] # Dataframe of just the column on which to stratify.\n",
" # Split original dataframe into train and temp dataframes.\n",
" df_train, df_temp, y_train, y_temp = train_test_split(\n",
" X, y, stratify=y, test_size=(1.0 - frac_train), random_state=random_state\n",
" )\n",
" if frac_val <= 0:\n",
" assert len(df_input) == len(df_train) + len(df_temp)\n",
" return df_train, pd.DataFrame(), df_temp, y_train, pd.DataFrame(), y_temp\n",
" # Split the temp dataframe into val and test dataframes.\n",
" relative_frac_test = frac_test / (frac_val + frac_test)\n",
" df_val, df_test, y_val, y_test = train_test_split(\n",
" df_temp,\n",
" y_temp,\n",
" stratify=y_temp,\n",
" test_size=relative_frac_test,\n",
" random_state=random_state,\n",
" )\n",
" assert len(df_input) == len(df_train) + len(df_val) + len(df_test)\n",
" return df_train, df_val, df_test, y_train, y_val, y_test\n",
"\n",
"X_train, X_val, X_test, y_train, y_val, y_test = split_stratified_into_train_val_test(\n",
" df, stratify_colname=\"Outcome\", frac_train=0.80, frac_val=0, frac_test=0.20, random_state=9\n",
")\n",
"\n",
"display(\"X_train\", X_train)\n",
"display(\"y_train\", y_train)\n",
"\n",
"display(\"X_test\", X_test)\n",
"display(\"y_test\", y_test)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Классификация данных"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.compose import ColumnTransformer\n",
"from sklearn.discriminant_analysis import StandardScaler\n",
"from sklearn.impute import SimpleImputer\n",
"from sklearn.pipeline import Pipeline\n",
"from sklearn.preprocessing import OneHotEncoder\n",
"\n",
"\n",
"\n",
"columns_to_drop = [\"Glucose\", \"Age\", \"BloodPressure\", \"Outcome\", \"DiabetesPedigreeFunction\"]\n",
"num_columns = [\n",
" column\n",
" for column in df.columns\n",
" if column not in columns_to_drop and df[column].dtype != \"object\"\n",
"]\n",
"cat_columns = [\n",
" column\n",
" for column in df.columns\n",
" if column not in columns_to_drop and df[column].dtype == \"object\"\n",
"]\n",
"\n",
"num_imputer = SimpleImputer(strategy=\"median\")\n",
"num_scaler = StandardScaler()\n",
"preprocessing_num = Pipeline(\n",
" [\n",
" (\"imputer\", num_imputer),\n",
" (\"scaler\", num_scaler),\n",
" ]\n",
")\n",
"\n",
"cat_imputer = SimpleImputer(strategy=\"constant\", fill_value=\"unknown\")\n",
"cat_encoder = OneHotEncoder(handle_unknown=\"ignore\", sparse_output=False, drop=\"first\")\n",
"preprocessing_cat = Pipeline(\n",
" [\n",
" (\"imputer\", cat_imputer),\n",
" (\"encoder\", cat_encoder),\n",
" ]\n",
")\n",
"\n",
"features_preprocessing = ColumnTransformer(\n",
" verbose_feature_names_out=False,\n",
" transformers=[\n",
" (\"prepocessing_num\", preprocessing_num, num_columns),\n",
" (\"prepocessing_cat\", preprocessing_cat, cat_columns),\n",
" ],\n",
" remainder=\"passthrough\"\n",
")\n",
"\n",
"drop_columns = ColumnTransformer(\n",
" verbose_feature_names_out=False,\n",
" transformers=[\n",
" (\"drop_columns\", \"drop\", columns_to_drop),\n",
" ],\n",
" remainder=\"passthrough\",\n",
")\n",
"\n",
"\n",
"pipeline_end = Pipeline(\n",
" [\n",
" (\"features_preprocessing\", features_preprocessing),\n",
" (\"drop_columns\", drop_columns),\n",
" ]\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Проверка работы конвеера"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Pregnancies | \n",
" SkinThickness | \n",
" Insulin | \n",
" BMI | \n",
"
\n",
" \n",
" \n",
" \n",
" 196 | \n",
" -0.838489 | \n",
" -1.297466 | \n",
" -0.688684 | \n",
" -0.946400 | \n",
"
\n",
" \n",
" 69 | \n",
" 0.072181 | \n",
" 0.395520 | \n",
" 0.180416 | \n",
" -0.377190 | \n",
"
\n",
" \n",
" 494 | \n",
" -0.231376 | \n",
" -1.297466 | \n",
" -0.688684 | \n",
" -3.953317 | \n",
"
\n",
" \n",
" 463 | \n",
" 0.375738 | \n",
" 0.583630 | \n",
" -0.688684 | \n",
" -0.538054 | \n",
"
\n",
" \n",
" 653 | \n",
" -0.534932 | \n",
" -1.297466 | \n",
" -0.688684 | \n",
" -0.637047 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 322 | \n",
" -1.142046 | \n",
" -0.043402 | \n",
" -0.688684 | \n",
" -0.562802 | \n",
"
\n",
" \n",
" 109 | \n",
" -1.142046 | \n",
" 0.270114 | \n",
" -0.375808 | \n",
" 0.674613 | \n",
"
\n",
" \n",
" 27 | \n",
" -0.838489 | \n",
" -0.356918 | \n",
" 0.528056 | \n",
" -1.082516 | \n",
"
\n",
" \n",
" 651 | \n",
" -0.838489 | \n",
" 0.144708 | \n",
" 0.232562 | \n",
" 0.229143 | \n",
"
\n",
" \n",
" 197 | \n",
" -0.231376 | \n",
" -0.482325 | \n",
" -0.271516 | \n",
" -1.119638 | \n",
"
\n",
" \n",
"
\n",
"
614 rows × 4 columns
\n",
"
"
],
"text/plain": [
" Pregnancies SkinThickness Insulin BMI\n",
"196 -0.838489 -1.297466 -0.688684 -0.946400\n",
"69 0.072181 0.395520 0.180416 -0.377190\n",
"494 -0.231376 -1.297466 -0.688684 -3.953317\n",
"463 0.375738 0.583630 -0.688684 -0.538054\n",
"653 -0.534932 -1.297466 -0.688684 -0.637047\n",
".. ... ... ... ...\n",
"322 -1.142046 -0.043402 -0.688684 -0.562802\n",
"109 -1.142046 0.270114 -0.375808 0.674613\n",
"27 -0.838489 -0.356918 0.528056 -1.082516\n",
"651 -0.838489 0.144708 0.232562 0.229143\n",
"197 -0.231376 -0.482325 -0.271516 -1.119638\n",
"\n",
"[614 rows x 4 columns]"
]
},
"execution_count": 50,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\n",
"preprocessing_result = pipeline_end.fit_transform(X_train)\n",
"preprocessed_df = pd.DataFrame(\n",
" preprocessing_result,\n",
" columns=pipeline_end.get_feature_names_out(),\n",
")\n",
"\n",
"preprocessed_df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Формирование набора моделей для классификации"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {},
"outputs": [],
"source": [
"from sklearn import ensemble, linear_model, naive_bayes, neighbors, neural_network, tree\n",
"\n",
"class_models = {\n",
" \"logistic\": {\"model\": linear_model.LogisticRegression()},\n",
" # \"ridge\": {\"model\": linear_model.RidgeClassifierCV(cv=5, class_weight=\"balanced\")},\n",
" \"ridge\": {\"model\": linear_model.LogisticRegression(penalty=\"l2\", class_weight=\"balanced\")},\n",
" \"decision_tree\": {\n",
" \"model\": tree.DecisionTreeClassifier(max_depth=7, random_state=9)\n",
" },\n",
" \"knn\": {\"model\": neighbors.KNeighborsClassifier(n_neighbors=7)},\n",
" \"naive_bayes\": {\"model\": naive_bayes.GaussianNB()},\n",
" \"gradient_boosting\": {\n",
" \"model\": ensemble.GradientBoostingClassifier(n_estimators=210)\n",
" },\n",
" \"random_forest\": {\n",
" \"model\": ensemble.RandomForestClassifier(\n",
" max_depth=11, class_weight=\"balanced\", random_state=9\n",
" )\n",
" },\n",
" \"mlp\": {\n",
" \"model\": neural_network.MLPClassifier(\n",
" hidden_layer_sizes=(7,),\n",
" max_iter=500,\n",
" early_stopping=True,\n",
" random_state=9,\n",
" )\n",
" },\n",
"}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Обучение моделей на обучающем наборе данных и оценка на тестовом"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Model: logistic\n",
"Model: ridge\n",
"Model: decision_tree\n",
"Model: knn\n",
"Model: naive_bayes\n",
"Model: gradient_boosting\n",
"Model: random_forest\n",
"Model: mlp\n"
]
}
],
"source": [
"from sklearn import metrics\n",
"\n",
"for model_name in class_models.keys():\n",
" print(f\"Model: {model_name}\")\n",
" model = class_models[model_name][\"model\"]\n",
"\n",
" model_pipeline = Pipeline([(\"pipeline\", pipeline_end), (\"model\", model)])\n",
" model_pipeline = model_pipeline.fit(X_train, y_train.values.ravel())\n",
"\n",
" y_train_predict = model_pipeline.predict(X_train)\n",
" y_test_probs = model_pipeline.predict_proba(X_test)[:, 1]\n",
" y_test_predict = np.where(y_test_probs > 0.5, 1, 0)\n",
"\n",
" class_models[model_name][\"pipeline\"] = model_pipeline\n",
" class_models[model_name][\"probs\"] = y_test_probs\n",
" class_models[model_name][\"preds\"] = y_test_predict\n",
"\n",
" class_models[model_name][\"Precision_train\"] = metrics.precision_score(\n",
" y_train, y_train_predict\n",
" )\n",
" class_models[model_name][\"Precision_test\"] = metrics.precision_score(\n",
" y_test, y_test_predict\n",
" )\n",
" class_models[model_name][\"Recall_train\"] = metrics.recall_score(\n",
" y_train, y_train_predict\n",
" )\n",
" class_models[model_name][\"Recall_test\"] = metrics.recall_score(\n",
" y_test, y_test_predict\n",
" )\n",
" class_models[model_name][\"Accuracy_train\"] = metrics.accuracy_score(\n",
" y_train, y_train_predict\n",
" )\n",
" class_models[model_name][\"Accuracy_test\"] = metrics.accuracy_score(\n",
" y_test, y_test_predict\n",
" )\n",
" class_models[model_name][\"ROC_AUC_test\"] = metrics.roc_auc_score(\n",
" y_test, y_test_probs\n",
" )\n",
" class_models[model_name][\"F1_train\"] = metrics.f1_score(y_train, y_train_predict)\n",
" class_models[model_name][\"F1_test\"] = metrics.f1_score(y_test, y_test_predict)\n",
" class_models[model_name][\"MCC_test\"] = metrics.matthews_corrcoef(\n",
" y_test, y_test_predict\n",
" )\n",
" class_models[model_name][\"Cohen_kappa_test\"] = metrics.cohen_kappa_score(\n",
" y_test, y_test_predict\n",
" )\n",
" class_models[model_name][\"Confusion_matrix\"] = metrics.confusion_matrix(\n",
" y_test, y_test_predict\n",
" )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Сводная таблица оценок качества для использованных моделей классификации\n",
"\n",
"Матрица неточностей"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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QoinT5+KMWPGCC8vLyGVSoW/v79YvXq1ev/UqVOFp6enkEgkIiQkRAiRe0Pr/PnzRbVq1YStra1wc3MTwcHB4sCBA+r3bdu2Tfj7+wuZTCZatGghVq9erffNoePGjRNly5YVDg4O4r333hPz5s0TCoVCvT8sLEzUq1dPLF68WHh7ewu5XC7eeecd8fDhQ412161bJ+rXry+kUqlwcXERLVu2FD/99JMQgjeHEhFRLsbmgjE2U1FJhNByBx4REREREVEpxOl2REREREREz2CSRERERERE9AwmSURERERERM9gkkRERERERPQMJklERERERETPYJJERERERET0DCZJREREREREz2CSRERERERE9AwmSURERERERM9gkkRERERERPQMJklERERERETPYJJERERERET0DCZJREREREREz2CSRERERERE9AwmSWQyJBIJwsPDjd0Nrb777jtUr14dtra2cHZ2NnZ3iIiILMqNGzcgkUgQFRVl7K4QMUki0sXff/+N0NBQVK5cGStWrMDy5cuN3aV87t69i/DwcMTExBi7K0RERERmzcbYHSAyB/v374dKpcLXX38Nf39/Y3enQHfv3sWUKVNQoUIF1K9f39jdISIiIjJbHEkirdLT043dBZNx7949ADDoNLsnT54YrC0iIiIiMhwmSQQACA8Ph0QiwcWLF9G7d2+4uLigefPm+OuvvxAaGopKlSpBLpfD09MTAwYMwIMHDwp8/9WrVxEaGgpnZ2coFAr0798/XzKQmZmJMWPGwM3NDY6OjujcuTNu375dYL/OnDmDDh06wMnJCQ4ODmjTpg2OHTumUScqKgoSiQSHDh3CqFGj4ObmBmdnZwwZMgRZWVlITk5Gv3794OLiAhcXF4wfPx5CCJ0/mwoVKiAsLAwA4Obmlu/eqcWLF6NWrVqQyWTw9vbGiBEjkJycrNFGq1atULt2bZw6dQotW7ZEmTJl8Nlnn6k/j7CwMPj7+0Mmk8HHxwfjx49HZmamRht79uxB8+bN4ezsDAcHB1SrVk3dxv79+/Hqq68CAPr37w+JRMJ53UREVOLyfg9cvnwZffv2hUKhgJubGyZNmgQhBG7duoUuXbrAyckJnp6emDNnTqHthYaGwsHBAdevX0dwcDDs7e3h7e2NqVOnz7LfPgAAUGlJREFU6hXLifTF6Xak4d1330WVKlUwY8YM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1cLAgQORlZWlt/2LL75A06ZN4eDggCZNmmD58uUm10JERPLHbH40ZjOZik0SVYqjoyMKCwt1P8fExCAhIQH79u3D7t27odFooFar4eLiggMHDuDQoUNwdnZGr169dK/76KOPEB0djbVr1+LgwYPIyMjA9u3by33f1157DV9//TWWLl2KCxcuYOXKlXB2doafnx++/fZbAEBCQgJSU1PxySefAACioqKwYcMGfP755/jjjz8wefJkDBkyBLGxsQBKAmPAgAHo27cv4uPjMXLkSLz77rsm/05cXFwQHR2N8+fP45NPPsHq1auxePFivX0uXbqErVu3YteuXfjpp59w6tQpjB07Vrd948aNmDlzJubPn48LFy5gwYIFmDFjBtavX29yPUREVLMwm0tjNpPJRCIjDR06VOzXr58oiqKo1WrFffv2iUqlUpw6dapuu5eXl1hQUKB7zZdffik2btxY1Gq1unUFBQWio6OjuHfvXlEURdHHx0dctGiRbrtGoxHr1auney9RFMWuXbuKEydOFEVRFBMSEkQA4r59+8qs87fffhMBiHfu3NGty8/PF2vVqiUePnxYb98RI0aIgwYNEkVRFKdPny4GBwfrbZ82bVqpY/0bAHH79u0Gt//3v/8V27Rpo/t51qxZoq2trZiSkqJbt2fPHtHGxkZMTU0VRVEUH3/8cXHTpk16x5k7d64YGhoqiqIoXrlyRQQgnjp1yuD7EhGR/DGby8ZspsriPUlkkt27d8PZ2RkajQZarRavvPIKIiMjddubN2+ud63z6dOncenSJbi4uOgdJz8/H4mJicjKykJqairatWun22ZnZ4e2bduWGta/Lz4+Hra2tujatavRdV+6dAl3795Fz5499dYXFhaiVatWAIALFy7o1QEAoaGhRr/HfVu2bMHSpUuRmJiI3NxcFBUVwdXVVW8ff39/1K1bV+99tFotEhIS4OLigsTERIwYMQKjRo3S7VNUVASVSmVyPUREJG/M5kdjNpOp2CSRSbp3744VK1ZAoVDA19cXdnb6/ws5OTnp/Zybm4s2bdpg48aNpY7l6elZoRocHR1Nfk1ubi4A4IcfftD7AgRKruU2lyNHjmDw4MGYPXs21Go1VCoVNm/ejI8++sjkWlevXl0qGGxtbc1WKxERyQOzuXzMZqoINklkEicnJwQFBRm9f+vWrbFlyxbUqVOn1Bmb+3x8fHDs2DF06dIFQMlZmbi4OLRu3brM/Zs3bw6tVovY2Fj06NGj1Pb7Z8uKi4t164KDg6FUKpGUlGTwLFfTpk11N7red/To0Ud/yIccPnwYAQEBeO+993Trrl27Vmq/pKQk3LhxA76+vrr3sbGxQePGjeHl5QVfX19cvnwZgwcPNun9iYio5mE2l4/ZTBXBiRuoSg0ePBiPPfYY+vXrhwMHDuDKlSvYv38/JkyYgJSUFADAxIkTsXDhQuzYsQN//vknxo4dW+5zFOrXr4+hQ4di+PDh2LFjh+6YW7duBQAEBARAEATs3r0bt2/fRm5uLlxcXDB16lRMnjwZ69evR2JiIk6ePIlPP/1Ud8Pl6NGjcfHiRbz99ttISEjApk2bEB0dbdLnbdiwIZKSkrB582YkJiZi6dKlZd7o6uDggKFDh+L06dM4cOAAJkyYgIEDB8Lb2xsAMHv2bERFRWHp0qX466+/cPbsWaxbtw4ff/yxSfUQERH9G7OZ2UxGsPRNUSQdD98casr21NRU8bXXXhMfe+wxUalUioGBgeKoUaPErKwsURRLbgadOHGi6OrqKrq5uYlTpkwRX3vtNYM3h4qiKN67d0+cPHmy6OPjIyoUCjEoKEhcu3atbvucOXNEb29vURAEcejQoaIoltzQumTJErFx48aivb296OnpKarVajE2Nlb3ul27dolBQUGiUqkUO3fuLK5du9bkm0Pffvtt0cPDQ3R2dhZfeuklcfHixaJKpdJtnzVrltiiRQtx+fLloq+vr+jg4CD+3//9n5iRkaF33I0bN4otW7YUFQqFWLt2bbFLly7id999J4oibw4lIqISzOayMZupsgRRNHAHHhERERERUQ3Ey+2IiIiIiIgewiaJiIiIiIjoIWySiIiIiIiIHsImiYiIiIiI6CFskoiIiIiIiB7CJomIiIiIiOghbJKIiIiIiIgewiaJiIiIiIjoIWySiIiIiIiIHsImiYiIiIiI6CFskoiIiIiIiB7y/26gbrGBih5gAAAAAElFTkSuQmCC",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from sklearn.metrics import ConfusionMatrixDisplay\n",
"import matplotlib.pyplot as plt\n",
"\n",
"_, ax = plt.subplots(int(len(class_models) / 2), 2, figsize=(12, 10), sharex=False, sharey=False)\n",
"for index, key in enumerate(class_models.keys()):\n",
" c_matrix = class_models[key][\"Confusion_matrix\"]\n",
" disp = ConfusionMatrixDisplay(\n",
" confusion_matrix=c_matrix, display_labels=[\"Healthy\", \"Sick\"]\n",
" ).plot(ax=ax.flat[index])\n",
" disp.ax_.set_title(key)\n",
"\n",
"plt.subplots_adjust(top=1, bottom=0, hspace=0.4, wspace=0.1)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Точность, полнота, верность (аккуратность), F-мера"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
" \n",
" \n",
" | \n",
" Precision_train | \n",
" Precision_test | \n",
" Recall_train | \n",
" Recall_test | \n",
" Accuracy_train | \n",
" Accuracy_test | \n",
" F1_train | \n",
" F1_test | \n",
"
\n",
" \n",
" \n",
" \n",
" naive_bayes | \n",
" 0.564516 | \n",
" 0.628571 | \n",
" 0.327103 | \n",
" 0.407407 | \n",
" 0.677524 | \n",
" 0.707792 | \n",
" 0.414201 | \n",
" 0.494382 | \n",
"
\n",
" \n",
" ridge | \n",
" 0.494382 | \n",
" 0.552632 | \n",
" 0.616822 | \n",
" 0.777778 | \n",
" 0.646580 | \n",
" 0.701299 | \n",
" 0.548857 | \n",
" 0.646154 | \n",
"
\n",
" \n",
" knn | \n",
" 0.670807 | \n",
" 0.551020 | \n",
" 0.504673 | \n",
" 0.500000 | \n",
" 0.741042 | \n",
" 0.681818 | \n",
" 0.576000 | \n",
" 0.524272 | \n",
"
\n",
" \n",
" random_forest | \n",
" 0.955157 | \n",
" 0.535714 | \n",
" 0.995327 | \n",
" 0.555556 | \n",
" 0.982085 | \n",
" 0.675325 | \n",
" 0.974828 | \n",
" 0.545455 | \n",
"
\n",
" \n",
" gradient_boosting | \n",
" 0.920213 | \n",
" 0.525000 | \n",
" 0.808411 | \n",
" 0.388889 | \n",
" 0.908795 | \n",
" 0.662338 | \n",
" 0.860697 | \n",
" 0.446809 | \n",
"
\n",
" \n",
" logistic | \n",
" 0.618644 | \n",
" 0.525000 | \n",
" 0.341121 | \n",
" 0.388889 | \n",
" 0.697068 | \n",
" 0.662338 | \n",
" 0.439759 | \n",
" 0.446809 | \n",
"
\n",
" \n",
" decision_tree | \n",
" 0.718615 | \n",
" 0.459016 | \n",
" 0.775701 | \n",
" 0.518519 | \n",
" 0.815961 | \n",
" 0.616883 | \n",
" 0.746067 | \n",
" 0.486957 | \n",
"
\n",
" \n",
" mlp | \n",
" 0.409195 | \n",
" 0.417391 | \n",
" 0.831776 | \n",
" 0.888889 | \n",
" 0.522801 | \n",
" 0.525974 | \n",
" 0.548536 | \n",
" 0.568047 | \n",
"
\n",
" \n",
"
\n"
],
"text/plain": [
""
]
},
"execution_count": 54,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"class_metrics = pd.DataFrame.from_dict(class_models, \"index\")[\n",
" [\n",
" \"Precision_train\",\n",
" \"Precision_test\",\n",
" \"Recall_train\",\n",
" \"Recall_test\",\n",
" \"Accuracy_train\",\n",
" \"Accuracy_test\",\n",
" \"F1_train\",\n",
" \"F1_test\",\n",
" ]\n",
"]\n",
"class_metrics.sort_values(\n",
" by=\"Accuracy_test\", ascending=False\n",
").style.background_gradient(\n",
" cmap=\"plasma\",\n",
" low=0.3,\n",
" high=1,\n",
" subset=[\"Accuracy_train\", \"Accuracy_test\", \"F1_train\", \"F1_test\"],\n",
").background_gradient(\n",
" cmap=\"viridis\",\n",
" low=1,\n",
" high=0.3,\n",
" subset=[\n",
" \"Precision_train\",\n",
" \"Precision_test\",\n",
" \"Recall_train\",\n",
" \"Recall_test\",\n",
" ],\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"ROC-кривая, каппа Коэна, коэффициент корреляции Мэтьюса"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
" \n",
" \n",
" | \n",
" Accuracy_test | \n",
" F1_test | \n",
" ROC_AUC_test | \n",
" Cohen_kappa_test | \n",
" MCC_test | \n",
"
\n",
" \n",
" \n",
" \n",
" ridge | \n",
" 0.701299 | \n",
" 0.646154 | \n",
" 0.767037 | \n",
" 0.400271 | \n",
" 0.417827 | \n",
"
\n",
" \n",
" logistic | \n",
" 0.662338 | \n",
" 0.446809 | \n",
" 0.766296 | \n",
" 0.211501 | \n",
" 0.216434 | \n",
"
\n",
" \n",
" naive_bayes | \n",
" 0.707792 | \n",
" 0.494382 | \n",
" 0.753704 | \n",
" 0.301834 | \n",
" 0.315869 | \n",
"
\n",
" \n",
" knn | \n",
" 0.681818 | \n",
" 0.524272 | \n",
" 0.745556 | \n",
" 0.286093 | \n",
" 0.286855 | \n",
"
\n",
" \n",
" mlp | \n",
" 0.525974 | \n",
" 0.568047 | \n",
" 0.729074 | \n",
" 0.173747 | \n",
" 0.240181 | \n",
"
\n",
" \n",
" random_forest | \n",
" 0.675325 | \n",
" 0.545455 | \n",
" 0.715093 | \n",
" 0.293059 | \n",
" 0.293176 | \n",
"
\n",
" \n",
" gradient_boosting | \n",
" 0.662338 | \n",
" 0.446809 | \n",
" 0.711296 | \n",
" 0.211501 | \n",
" 0.216434 | \n",
"
\n",
" \n",
" decision_tree | \n",
" 0.616883 | \n",
" 0.486957 | \n",
" 0.612870 | \n",
" 0.183061 | \n",
" 0.183927 | \n",
"
\n",
" \n",
"
\n"
],
"text/plain": [
""
]
},
"execution_count": 55,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"class_metrics = pd.DataFrame.from_dict(class_models, \"index\")[\n",
" [\n",
" \"Accuracy_test\",\n",
" \"F1_test\",\n",
" \"ROC_AUC_test\",\n",
" \"Cohen_kappa_test\",\n",
" \"MCC_test\",\n",
" ]\n",
"]\n",
"class_metrics.sort_values(by=\"ROC_AUC_test\", ascending=False).style.background_gradient(\n",
" cmap=\"plasma\",\n",
" low=0.3,\n",
" high=1,\n",
" subset=[\n",
" \"ROC_AUC_test\",\n",
" \"MCC_test\",\n",
" \"Cohen_kappa_test\",\n",
" ],\n",
").background_gradient(\n",
" cmap=\"viridis\",\n",
" low=1,\n",
" high=0.3,\n",
" subset=[\n",
" \"Accuracy_test\",\n",
" \"F1_test\",\n",
" ],\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'ridge'"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"best_model = str(class_metrics.sort_values(by=\"MCC_test\", ascending=False).iloc[0].name)\n",
"\n",
"display(best_model)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Вывод данных с ошибкой предсказания для оценки"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'Error items count: 46'"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Pregnancies | \n",
" Predicted | \n",
" Glucose | \n",
" BloodPressure | \n",
" SkinThickness | \n",
" Insulin | \n",
" BMI | \n",
" DiabetesPedigreeFunction | \n",
" Age | \n",
" Outcome | \n",
"
\n",
" \n",
" \n",
" \n",
" 30 | \n",
" 5 | \n",
" 1 | \n",
" 109 | \n",
" 75 | \n",
" 26 | \n",
" 0 | \n",
" 36.0 | \n",
" 0.546 | \n",
" 60 | \n",
" 0 | \n",
"
\n",
" \n",
" 82 | \n",
" 7 | \n",
" 1 | \n",
" 83 | \n",
" 78 | \n",
" 26 | \n",
" 71 | \n",
" 29.3 | \n",
" 0.767 | \n",
" 36 | \n",
" 0 | \n",
"
\n",
" \n",
" 86 | \n",
" 13 | \n",
" 1 | \n",
" 106 | \n",
" 72 | \n",
" 54 | \n",
" 0 | \n",
" 36.6 | \n",
" 0.178 | \n",
" 45 | \n",
" 0 | \n",
"
\n",
" \n",
" 91 | \n",
" 4 | \n",
" 1 | \n",
" 123 | \n",
" 80 | \n",
" 15 | \n",
" 176 | \n",
" 32.0 | \n",
" 0.443 | \n",
" 34 | \n",
" 0 | \n",
"
\n",
" \n",
" 95 | \n",
" 6 | \n",
" 1 | \n",
" 144 | \n",
" 72 | \n",
" 27 | \n",
" 228 | \n",
" 33.9 | \n",
" 0.255 | \n",
" 40 | \n",
" 0 | \n",
"
\n",
" \n",
" 176 | \n",
" 6 | \n",
" 1 | \n",
" 85 | \n",
" 78 | \n",
" 0 | \n",
" 0 | \n",
" 31.2 | \n",
" 0.382 | \n",
" 42 | \n",
" 0 | \n",
"
\n",
" \n",
" 201 | \n",
" 1 | \n",
" 1 | \n",
" 138 | \n",
" 82 | \n",
" 0 | \n",
" 0 | \n",
" 40.1 | \n",
" 0.236 | \n",
" 28 | \n",
" 0 | \n",
"
\n",
" \n",
" 204 | \n",
" 6 | \n",
" 1 | \n",
" 103 | \n",
" 72 | \n",
" 32 | \n",
" 190 | \n",
" 37.7 | \n",
" 0.324 | \n",
" 55 | \n",
" 0 | \n",
"
\n",
" \n",
" 223 | \n",
" 7 | \n",
" 1 | \n",
" 142 | \n",
" 60 | \n",
" 33 | \n",
" 190 | \n",
" 28.8 | \n",
" 0.687 | \n",
" 61 | \n",
" 0 | \n",
"
\n",
" \n",
" 228 | \n",
" 4 | \n",
" 1 | \n",
" 197 | \n",
" 70 | \n",
" 39 | \n",
" 744 | \n",
" 36.7 | \n",
" 2.329 | \n",
" 31 | \n",
" 0 | \n",
"
\n",
" \n",
" 233 | \n",
" 4 | \n",
" 1 | \n",
" 122 | \n",
" 68 | \n",
" 0 | \n",
" 0 | \n",
" 35.0 | \n",
" 0.394 | \n",
" 29 | \n",
" 0 | \n",
"
\n",
" \n",
" 266 | \n",
" 0 | \n",
" 0 | \n",
" 138 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 36.3 | \n",
" 0.933 | \n",
" 25 | \n",
" 1 | \n",
"
\n",
" \n",
" 274 | \n",
" 13 | \n",
" 1 | \n",
" 106 | \n",
" 70 | \n",
" 0 | \n",
" 0 | \n",
" 34.2 | \n",
" 0.251 | \n",
" 52 | \n",
" 0 | \n",
"
\n",
" \n",
" 280 | \n",
" 0 | \n",
" 0 | \n",
" 146 | \n",
" 70 | \n",
" 0 | \n",
" 0 | \n",
" 37.9 | \n",
" 0.334 | \n",
" 28 | \n",
" 1 | \n",
"
\n",
" \n",
" 282 | \n",
" 7 | \n",
" 1 | \n",
" 133 | \n",
" 88 | \n",
" 15 | \n",
" 155 | \n",
" 32.4 | \n",
" 0.262 | \n",
" 37 | \n",
" 0 | \n",
"
\n",
" \n",
" 302 | \n",
" 5 | \n",
" 1 | \n",
" 77 | \n",
" 82 | \n",
" 41 | \n",
" 42 | \n",
" 35.8 | \n",
" 0.156 | \n",
" 35 | \n",
" 0 | \n",
"
\n",
" \n",
" 309 | \n",
" 2 | \n",
" 0 | \n",
" 124 | \n",
" 68 | \n",
" 28 | \n",
" 205 | \n",
" 32.9 | \n",
" 0.875 | \n",
" 30 | \n",
" 1 | \n",
"
\n",
" \n",
" 335 | \n",
" 0 | \n",
" 1 | \n",
" 165 | \n",
" 76 | \n",
" 43 | \n",
" 255 | \n",
" 47.9 | \n",
" 0.259 | \n",
" 26 | \n",
" 0 | \n",
"
\n",
" \n",
" 358 | \n",
" 12 | \n",
" 1 | \n",
" 88 | \n",
" 74 | \n",
" 40 | \n",
" 54 | \n",
" 35.3 | \n",
" 0.378 | \n",
" 48 | \n",
" 0 | \n",
"
\n",
" \n",
" 364 | \n",
" 4 | \n",
" 1 | \n",
" 147 | \n",
" 74 | \n",
" 25 | \n",
" 293 | \n",
" 34.9 | \n",
" 0.385 | \n",
" 30 | \n",
" 0 | \n",
"
\n",
" \n",
" 379 | \n",
" 0 | \n",
" 1 | \n",
" 93 | \n",
" 100 | \n",
" 39 | \n",
" 72 | \n",
" 43.4 | \n",
" 1.021 | \n",
" 35 | \n",
" 0 | \n",
"
\n",
" \n",
" 397 | \n",
" 0 | \n",
" 0 | \n",
" 131 | \n",
" 66 | \n",
" 40 | \n",
" 0 | \n",
" 34.3 | \n",
" 0.196 | \n",
" 22 | \n",
" 1 | \n",
"
\n",
" \n",
" 405 | \n",
" 2 | \n",
" 1 | \n",
" 123 | \n",
" 48 | \n",
" 32 | \n",
" 165 | \n",
" 42.1 | \n",
" 0.520 | \n",
" 26 | \n",
" 0 | \n",
"
\n",
" \n",
" 406 | \n",
" 4 | \n",
" 0 | \n",
" 115 | \n",
" 72 | \n",
" 0 | \n",
" 0 | \n",
" 28.9 | \n",
" 0.376 | \n",
" 46 | \n",
" 1 | \n",
"
\n",
" \n",
" 442 | \n",
" 4 | \n",
" 1 | \n",
" 117 | \n",
" 64 | \n",
" 27 | \n",
" 120 | \n",
" 33.2 | \n",
" 0.230 | \n",
" 24 | \n",
" 0 | \n",
"
\n",
" \n",
" 486 | \n",
" 1 | \n",
" 1 | \n",
" 139 | \n",
" 62 | \n",
" 41 | \n",
" 480 | \n",
" 40.7 | \n",
" 0.536 | \n",
" 21 | \n",
" 0 | \n",
"
\n",
" \n",
" 515 | \n",
" 3 | \n",
" 0 | \n",
" 163 | \n",
" 70 | \n",
" 18 | \n",
" 105 | \n",
" 31.6 | \n",
" 0.268 | \n",
" 28 | \n",
" 1 | \n",
"
\n",
" \n",
" 517 | \n",
" 7 | \n",
" 1 | \n",
" 125 | \n",
" 86 | \n",
" 0 | \n",
" 0 | \n",
" 37.6 | \n",
" 0.304 | \n",
" 51 | \n",
" 0 | \n",
"
\n",
" \n",
" 583 | \n",
" 8 | \n",
" 1 | \n",
" 100 | \n",
" 76 | \n",
" 0 | \n",
" 0 | \n",
" 38.7 | \n",
" 0.190 | \n",
" 42 | \n",
" 0 | \n",
"
\n",
" \n",
" 594 | \n",
" 6 | \n",
" 1 | \n",
" 123 | \n",
" 72 | \n",
" 45 | \n",
" 230 | \n",
" 33.6 | \n",
" 0.733 | \n",
" 34 | \n",
" 0 | \n",
"
\n",
" \n",
" 622 | \n",
" 6 | \n",
" 1 | \n",
" 183 | \n",
" 94 | \n",
" 0 | \n",
" 0 | \n",
" 40.8 | \n",
" 1.461 | \n",
" 45 | \n",
" 0 | \n",
"
\n",
" \n",
" 630 | \n",
" 7 | \n",
" 0 | \n",
" 114 | \n",
" 64 | \n",
" 0 | \n",
" 0 | \n",
" 27.4 | \n",
" 0.732 | \n",
" 34 | \n",
" 1 | \n",
"
\n",
" \n",
" 634 | \n",
" 10 | \n",
" 1 | \n",
" 92 | \n",
" 62 | \n",
" 0 | \n",
" 0 | \n",
" 25.9 | \n",
" 0.167 | \n",
" 31 | \n",
" 0 | \n",
"
\n",
" \n",
" 646 | \n",
" 1 | \n",
" 0 | \n",
" 167 | \n",
" 74 | \n",
" 17 | \n",
" 144 | \n",
" 23.4 | \n",
" 0.447 | \n",
" 33 | \n",
" 1 | \n",
"
\n",
" \n",
" 658 | \n",
" 11 | \n",
" 1 | \n",
" 127 | \n",
" 106 | \n",
" 0 | \n",
" 0 | \n",
" 39.0 | \n",
" 0.190 | \n",
" 51 | \n",
" 0 | \n",
"
\n",
" \n",
" 669 | \n",
" 9 | \n",
" 1 | \n",
" 154 | \n",
" 78 | \n",
" 30 | \n",
" 100 | \n",
" 30.9 | \n",
" 0.164 | \n",
" 45 | \n",
" 0 | \n",
"
\n",
" \n",
" 674 | \n",
" 8 | \n",
" 1 | \n",
" 91 | \n",
" 82 | \n",
" 0 | \n",
" 0 | \n",
" 35.6 | \n",
" 0.587 | \n",
" 68 | \n",
" 0 | \n",
"
\n",
" \n",
" 676 | \n",
" 9 | \n",
" 0 | \n",
" 156 | \n",
" 86 | \n",
" 0 | \n",
" 0 | \n",
" 24.8 | \n",
" 0.230 | \n",
" 53 | \n",
" 1 | \n",
"
\n",
" \n",
" 682 | \n",
" 0 | \n",
" 1 | \n",
" 95 | \n",
" 64 | \n",
" 39 | \n",
" 105 | \n",
" 44.6 | \n",
" 0.366 | \n",
" 22 | \n",
" 0 | \n",
"
\n",
" \n",
" 699 | \n",
" 4 | \n",
" 1 | \n",
" 118 | \n",
" 70 | \n",
" 0 | \n",
" 0 | \n",
" 44.5 | \n",
" 0.904 | \n",
" 26 | \n",
" 0 | \n",
"
\n",
" \n",
" 702 | \n",
" 1 | \n",
" 0 | \n",
" 168 | \n",
" 88 | \n",
" 29 | \n",
" 0 | \n",
" 35.0 | \n",
" 0.905 | \n",
" 52 | \n",
" 1 | \n",
"
\n",
" \n",
" 723 | \n",
" 5 | \n",
" 1 | \n",
" 117 | \n",
" 86 | \n",
" 30 | \n",
" 105 | \n",
" 39.1 | \n",
" 0.251 | \n",
" 42 | \n",
" 0 | \n",
"
\n",
" \n",
" 725 | \n",
" 4 | \n",
" 1 | \n",
" 112 | \n",
" 78 | \n",
" 40 | \n",
" 0 | \n",
" 39.4 | \n",
" 0.236 | \n",
" 38 | \n",
" 0 | \n",
"
\n",
" \n",
" 730 | \n",
" 3 | \n",
" 0 | \n",
" 130 | \n",
" 78 | \n",
" 23 | \n",
" 79 | \n",
" 28.4 | \n",
" 0.323 | \n",
" 34 | \n",
" 1 | \n",
"
\n",
" \n",
" 744 | \n",
" 13 | \n",
" 1 | \n",
" 153 | \n",
" 88 | \n",
" 37 | \n",
" 140 | \n",
" 40.6 | \n",
" 1.174 | \n",
" 39 | \n",
" 0 | \n",
"
\n",
" \n",
" 750 | \n",
" 4 | \n",
" 0 | \n",
" 136 | \n",
" 70 | \n",
" 0 | \n",
" 0 | \n",
" 31.2 | \n",
" 1.182 | \n",
" 22 | \n",
" 1 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Pregnancies Predicted Glucose BloodPressure SkinThickness Insulin \\\n",
"30 5 1 109 75 26 0 \n",
"82 7 1 83 78 26 71 \n",
"86 13 1 106 72 54 0 \n",
"91 4 1 123 80 15 176 \n",
"95 6 1 144 72 27 228 \n",
"176 6 1 85 78 0 0 \n",
"201 1 1 138 82 0 0 \n",
"204 6 1 103 72 32 190 \n",
"223 7 1 142 60 33 190 \n",
"228 4 1 197 70 39 744 \n",
"233 4 1 122 68 0 0 \n",
"266 0 0 138 0 0 0 \n",
"274 13 1 106 70 0 0 \n",
"280 0 0 146 70 0 0 \n",
"282 7 1 133 88 15 155 \n",
"302 5 1 77 82 41 42 \n",
"309 2 0 124 68 28 205 \n",
"335 0 1 165 76 43 255 \n",
"358 12 1 88 74 40 54 \n",
"364 4 1 147 74 25 293 \n",
"379 0 1 93 100 39 72 \n",
"397 0 0 131 66 40 0 \n",
"405 2 1 123 48 32 165 \n",
"406 4 0 115 72 0 0 \n",
"442 4 1 117 64 27 120 \n",
"486 1 1 139 62 41 480 \n",
"515 3 0 163 70 18 105 \n",
"517 7 1 125 86 0 0 \n",
"583 8 1 100 76 0 0 \n",
"594 6 1 123 72 45 230 \n",
"622 6 1 183 94 0 0 \n",
"630 7 0 114 64 0 0 \n",
"634 10 1 92 62 0 0 \n",
"646 1 0 167 74 17 144 \n",
"658 11 1 127 106 0 0 \n",
"669 9 1 154 78 30 100 \n",
"674 8 1 91 82 0 0 \n",
"676 9 0 156 86 0 0 \n",
"682 0 1 95 64 39 105 \n",
"699 4 1 118 70 0 0 \n",
"702 1 0 168 88 29 0 \n",
"723 5 1 117 86 30 105 \n",
"725 4 1 112 78 40 0 \n",
"730 3 0 130 78 23 79 \n",
"744 13 1 153 88 37 140 \n",
"750 4 0 136 70 0 0 \n",
"\n",
" BMI DiabetesPedigreeFunction Age Outcome \n",
"30 36.0 0.546 60 0 \n",
"82 29.3 0.767 36 0 \n",
"86 36.6 0.178 45 0 \n",
"91 32.0 0.443 34 0 \n",
"95 33.9 0.255 40 0 \n",
"176 31.2 0.382 42 0 \n",
"201 40.1 0.236 28 0 \n",
"204 37.7 0.324 55 0 \n",
"223 28.8 0.687 61 0 \n",
"228 36.7 2.329 31 0 \n",
"233 35.0 0.394 29 0 \n",
"266 36.3 0.933 25 1 \n",
"274 34.2 0.251 52 0 \n",
"280 37.9 0.334 28 1 \n",
"282 32.4 0.262 37 0 \n",
"302 35.8 0.156 35 0 \n",
"309 32.9 0.875 30 1 \n",
"335 47.9 0.259 26 0 \n",
"358 35.3 0.378 48 0 \n",
"364 34.9 0.385 30 0 \n",
"379 43.4 1.021 35 0 \n",
"397 34.3 0.196 22 1 \n",
"405 42.1 0.520 26 0 \n",
"406 28.9 0.376 46 1 \n",
"442 33.2 0.230 24 0 \n",
"486 40.7 0.536 21 0 \n",
"515 31.6 0.268 28 1 \n",
"517 37.6 0.304 51 0 \n",
"583 38.7 0.190 42 0 \n",
"594 33.6 0.733 34 0 \n",
"622 40.8 1.461 45 0 \n",
"630 27.4 0.732 34 1 \n",
"634 25.9 0.167 31 0 \n",
"646 23.4 0.447 33 1 \n",
"658 39.0 0.190 51 0 \n",
"669 30.9 0.164 45 0 \n",
"674 35.6 0.587 68 0 \n",
"676 24.8 0.230 53 1 \n",
"682 44.6 0.366 22 0 \n",
"699 44.5 0.904 26 0 \n",
"702 35.0 0.905 52 1 \n",
"723 39.1 0.251 42 0 \n",
"725 39.4 0.236 38 0 \n",
"730 28.4 0.323 34 1 \n",
"744 40.6 1.174 39 0 \n",
"750 31.2 1.182 22 1 "
]
},
"execution_count": 57,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"preprocessing_result = pipeline_end.transform(X_test)\n",
"preprocessed_df = pd.DataFrame(\n",
" preprocessing_result,\n",
" columns=pipeline_end.get_feature_names_out(),\n",
")\n",
"\n",
"y_pred = class_models[best_model][\"preds\"]\n",
"\n",
"error_index = y_test[y_test[\"Outcome\"] != y_pred].index.tolist()\n",
"display(f\"Error items count: {len(error_index)}\")\n",
"\n",
"error_predicted = pd.Series(y_pred, index=y_test.index).loc[error_index]\n",
"error_df = X_test.loc[error_index].copy()\n",
"error_df.insert(loc=1, column=\"Predicted\", value=error_predicted)\n",
"error_df.sort_index()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Пример использования обученной модели (конвейера) для предсказания"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Pregnancies | \n",
" Glucose | \n",
" BloodPressure | \n",
" SkinThickness | \n",
" Insulin | \n",
" BMI | \n",
" DiabetesPedigreeFunction | \n",
" Age | \n",
" Outcome | \n",
"
\n",
" \n",
" \n",
" \n",
" 450 | \n",
" 1.0 | \n",
" 82.0 | \n",
" 64.0 | \n",
" 13.0 | \n",
" 95.0 | \n",
" 21.2 | \n",
" 0.415 | \n",
" 23.0 | \n",
" 0.0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \\\n",
"450 1.0 82.0 64.0 13.0 95.0 21.2 \n",
"\n",
" DiabetesPedigreeFunction Age Outcome \n",
"450 0.415 23.0 0.0 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Pregnancies | \n",
" SkinThickness | \n",
" Insulin | \n",
" BMI | \n",
"
\n",
" \n",
" \n",
" \n",
" 450 | \n",
" -0.838489 | \n",
" -0.482325 | \n",
" 0.136961 | \n",
" -1.329999 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Pregnancies SkinThickness Insulin BMI\n",
"450 -0.838489 -0.482325 0.136961 -1.329999"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"'predicted: 0 (proba: [0.81353825 0.18646175])'"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"'real: 0'"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"model = class_models[best_model][\"pipeline\"]\n",
"\n",
"example_id = 450\n",
"test = pd.DataFrame(X_test.loc[example_id, :]).T\n",
"test_preprocessed = pd.DataFrame(preprocessed_df.loc[example_id, :]).T\n",
"display(test)\n",
"display(test_preprocessed)\n",
"result_proba = model.predict_proba(test)[0]\n",
"result = model.predict(test)[0]\n",
"real = int(y_test.loc[example_id].values[0])\n",
"display(f\"predicted: {result} (proba: {result_proba})\")\n",
"display(f\"real: {real}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Подбор гиперпараметров методом поиска по сетке"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.pipeline import Pipeline\n",
"from sklearn.preprocessing import StandardScaler\n",
"from sklearn.compose import ColumnTransformer\n",
"from sklearn.ensemble import RandomForestClassifier\n",
"import numpy as np\n",
"from sklearn import metrics\n",
"import pandas as pd\n",
"\n",
"\n",
"# Определяем числовые признаки\n",
"numeric_features = X_train.select_dtypes(include=['float64', 'int64']).columns.tolist()\n",
"\n",
"# Установка random_state\n",
"random_state = 9\n",
"\n",
"# Определение трансформера\n",
"pipeline_end = ColumnTransformer([\n",
" ('numeric', StandardScaler(), numeric_features),\n",
" # Добавьте другие трансформеры, если требуется\n",
"])\n",
"\n",
"# Объявление модели\n",
"optimized_model = RandomForestClassifier(\n",
" random_state=random_state,\n",
" criterion=\"gini\",\n",
" max_depth=5,\n",
" max_features=\"sqrt\",\n",
" n_estimators=10,\n",
")\n",
"\n",
"# Создание пайплайна с корректными шагами\n",
"result = {}\n",
"\n",
"# Обучение модели\n",
"result[\"pipeline\"] = Pipeline([\n",
" (\"pipeline\", pipeline_end),\n",
" (\"model\", optimized_model)\n",
"]).fit(X_train, y_train.values.ravel())\n",
"\n",
"# Прогнозирование и расчет метрик\n",
"result[\"train_preds\"] = result[\"pipeline\"].predict(X_train)\n",
"result[\"probs\"] = result[\"pipeline\"].predict_proba(X_test)[:, 1]\n",
"result[\"preds\"] = np.where(result[\"probs\"] > 0.5, 1, 0)\n",
"\n",
"# Метрики для оценки модели\n",
"result[\"Precision_train\"] = metrics.precision_score(y_train, result[\"train_preds\"])\n",
"result[\"Precision_test\"] = metrics.precision_score(y_test, result[\"preds\"])\n",
"result[\"Recall_train\"] = metrics.recall_score(y_train, result[\"train_preds\"])\n",
"result[\"Recall_test\"] = metrics.recall_score(y_test, result[\"preds\"])\n",
"result[\"Accuracy_train\"] = metrics.accuracy_score(y_train, result[\"train_preds\"])\n",
"result[\"Accuracy_test\"] = metrics.accuracy_score(y_test, result[\"preds\"])\n",
"result[\"ROC_AUC_test\"] = metrics.roc_auc_score(y_test, result[\"probs\"])\n",
"result[\"F1_train\"] = metrics.f1_score(y_train, result[\"train_preds\"])\n",
"result[\"F1_test\"] = metrics.f1_score(y_test, result[\"preds\"])\n",
"result[\"MCC_test\"] = metrics.matthews_corrcoef(y_test, result[\"preds\"])\n",
"result[\"Cohen_kappa_test\"] = metrics.cohen_kappa_score(y_test, result[\"preds\"])\n",
"result[\"Confusion_matrix\"] = metrics.confusion_matrix(y_test, result[\"preds\"])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Формирование данных для оценки старой и новой версии модели"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {},
"outputs": [],
"source": [
"optimized_model_type = \"random_forest\"\n",
"optimized_metrics = pd.DataFrame(columns=list(result.keys()))\n",
"optimized_metrics.loc[len(optimized_metrics)] = pd.Series(\n",
" data=class_models[optimized_model_type]\n",
")\n",
"optimized_metrics.loc[len(optimized_metrics)] = pd.Series(\n",
" data=result\n",
")\n",
"optimized_metrics.insert(loc=0, column=\"Name\", value=[\"Old\", \"New\"])\n",
"optimized_metrics = optimized_metrics.set_index(\"Name\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Оценка параметров старой и новой модели"
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
" \n",
" \n",
" | \n",
" Precision_train | \n",
" Precision_test | \n",
" Recall_train | \n",
" Recall_test | \n",
" Accuracy_train | \n",
" Accuracy_test | \n",
" F1_train | \n",
" F1_test | \n",
"
\n",
" \n",
" Name | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" Old | \n",
" 0.955157 | \n",
" 0.535714 | \n",
" 0.995327 | \n",
" 0.555556 | \n",
" 0.982085 | \n",
" 0.675325 | \n",
" 0.974828 | \n",
" 0.545455 | \n",
"
\n",
" \n",
" New | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
"
\n",
" \n",
"
\n"
],
"text/plain": [
""
]
},
"execution_count": 61,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"optimized_metrics[\n",
" [\n",
" \"Precision_train\",\n",
" \"Precision_test\",\n",
" \"Recall_train\",\n",
" \"Recall_test\",\n",
" \"Accuracy_train\",\n",
" \"Accuracy_test\",\n",
" \"F1_train\",\n",
" \"F1_test\",\n",
" ]\n",
"].style.background_gradient(\n",
" cmap=\"plasma\",\n",
" low=0.3,\n",
" high=1,\n",
" subset=[\"Accuracy_train\", \"Accuracy_test\", \"F1_train\", \"F1_test\"],\n",
").background_gradient(\n",
" cmap=\"viridis\",\n",
" low=1,\n",
" high=0.3,\n",
" subset=[\n",
" \"Precision_train\",\n",
" \"Precision_test\",\n",
" \"Recall_train\",\n",
" \"Recall_test\",\n",
" ],\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
" \n",
" \n",
" | \n",
" Accuracy_test | \n",
" F1_test | \n",
" ROC_AUC_test | \n",
" Cohen_kappa_test | \n",
" MCC_test | \n",
"
\n",
" \n",
" Name | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" Old | \n",
" 0.675325 | \n",
" 0.545455 | \n",
" 0.715093 | \n",
" 0.293059 | \n",
" 0.293176 | \n",
"
\n",
" \n",
" New | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
"
\n",
" \n",
"
\n"
],
"text/plain": [
""
]
},
"execution_count": 62,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"optimized_metrics[\n",
" [\n",
" \"Accuracy_test\",\n",
" \"F1_test\",\n",
" \"ROC_AUC_test\",\n",
" \"Cohen_kappa_test\",\n",
" \"MCC_test\",\n",
" ]\n",
"].style.background_gradient(\n",
" cmap=\"plasma\",\n",
" low=0.3,\n",
" high=1,\n",
" subset=[\n",
" \"ROC_AUC_test\",\n",
" \"MCC_test\",\n",
" \"Cohen_kappa_test\",\n",
" ],\n",
").background_gradient(\n",
" cmap=\"viridis\",\n",
" low=1,\n",
" high=0.3,\n",
" subset=[\n",
" \"Accuracy_test\",\n",
" \"F1_test\",\n",
" ],\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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6nBKWSf99I83dmjJ+s169l871aYTU3AB1AwZaf46ecxPna759SJUcJhdrTqe1p7twZKkPduCFRJ+Rpde/ovzmE7XnJLNR/ruq+BqrxnVx9fPrhbtT+vLz0Od+xwOm776PFRtOp92Y2XwFh7RzK1fv17XXHONgoKCFBMTowcffFB5eXnO1//1r3+pS5cuCg0NVVRUlO666y4dO3aszHOtXbtW99xzj7Kzs2Wz2WSz2TRlyhTn66dPn9a9996r0NBQxcbG6qWXXnK+1qtXL40cOdLlfMePH5e/v79SUlLK/LyCggLl5OS4bCbbuDpcuTm1dOOdv16NenFKI7XpkqfuN5n9e2M6m82hv/+/A/p2e5h+3Fvyj5uomHxJ0sCRafp4eZQmDm2rfd+GKCn5G0U3/uV8p8M5mD4dpaYg17zHyWMlF5/q1HedMlenfpHztZPHfVWnnuvFylq+UmidM85j4J3CIopVy1fKOu763/nnn3xVtz4XsK1geq7V+GZu//79uummm5SYmKivv/5ab775ptavX+8SPkVFRXrqqae0c+dOrVixQj/88IMGDx5c5vm6d++u2bNnKywsTEePHtXRo0f1yCOPOF+fOXOmunTpoq+++krDhw/XsGHDlJqaKkkaMmSIli5dqoKCAufxr7/+uho1aqRevXqV+XlJSUkKDw93bjExZs+P//iNCF3RM0f1okr+Atv0cZh2bAjVA1MP/8E74e2GT9qnxi3yNH1sK+c+n//9DfXRmw215t9ROrAnRAunX6JDB4N0Y2KGmyr1bA6LpqJ4aujVBOQaAFjH9FxzezO3atUqhYSEuGy9e/d2vp6UlKSBAwdq9OjRatGihbp37645c+botddeU35+yVX7e++9V71791azZs3UrVs3zZkzRx999JFyc3NLfZ6/v7/Cw8Nls9kUFRWlqKgohYSEOF+/+eabNXz4cDVv3lzjx4/XRRddpP/85z+SpH79+kmS3nvvPefxycnJGjx4sGznWLljwoQJys7Odm7p6emV/03zUJmH/PTV56G66a4Tzn07NoTq6A/+6teqnXrHXK7eMZdLkp4a2kSPJjZ3V6moZsMm7tOV153UY39rrxOZAc79J4+VrIKats91xa/0/bVVv2GBgJqIXDPL2dsDso77uezPOu7nfC2i/hllnXAdmSk+I53K8uX2Ai+Xc7KWis9IdX43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WOF6/Pz8XH622WwuUxSGDBmiNWvW6NChQ1q8eLF69eqlxo0bX+C3h9UCAwN1ww03aOLEidq4caMGDx6syZMnlzouKCjoD89Vv359XXnllXrjjTeUk5NTFeWiHGJiYhQeHu7ckpKSyjzum2++UUhIiAICAvTAAw/o3XffVZs2bZSRkSF/f/9SK/1FRkYqIyOjGr4BTEOuwUrkGtyNaZaolE6dOmn37t1lThWQSv4Bd+LECU2fPl0xMTGSpG3btp33nP7+/i5TXiqiXbt26tKlixYuXKilS5fqhRdeuKDzoHq0adOmzGfwtG/fXi+//LJOnjx5zquYQUFBWrVqlW6++WYlJCTok08+UWhoaBVX7PmsepbO2XOkp6crLCzMuT8gIKDM41u2bKkdO3YoOztbb7/9tgYNGqR169ZVug7AauQaKoNcq35W55qnYWQOlTJ+/Hht3LhRI0eO1I4dO7R371699957zhvFY2Nj5e/vr+eff14HDhzQypUr9dRTT533nE2aNFFubq5SUlL0008/6fTp0xWqaciQIZo+fbocDofuuOOOC/5usM6JEyfUq1cvvf766/r666918OBBLV++XDNmzFCfPn1KHT9gwABFRUWpb9++2rBhgw4cOKB33nmn1LS74OBgffDBB/L19VXv3r2Vm5tbXV/Jc1m86tfZFSrPbudq5vz9/dW8eXN17txZSUlJuvzyy/XPf/5TUVFRKiwsLPV8r8zMTJb1hluQaygPcq0GYTVL4MK1b99e69at0/fff69rrrlGHTt21KRJkxQdHS2pZMpAcnKyli9frjZt2mj69On6xz/+cd5zdu/eXQ888ID+8pe/qH79+poxY0aFahowYIB8fX01YMAABQYGXvB3g3VCQkLUtWtXzZo1S9dee63atm2riRMnaujQoWVeZfb399cnn3yiBg0a6Oabb1a7du00ffp01apVq8xzf/TRR3I4HLrllltclg9HzWW321VQUKDOnTvLz8/PZZn11NRUpaWlKS4uzo0VwlTkGsqDXENNYXPw8Ap4mR9++EGXXHKJtm7dqk6dOrm7HKBGyMnJUXh4uOIvGS3fWmWPnlXEmeICfbp/trKzs12mWZZlwoQJ6t27t2JjY3Xq1CktXbpUzz77rD7++GPdcMMNGjZsmD788EMlJycrLCxMo0aNklSyqhsAcg0oiztzrSbhnjl4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fPh5n6XTpEkTDRo0SPfee69WrFjhPOdbb70lSWrcuLFsNptWrVql48ePKzc3V6GhoXrkkUc0ZswYvfrqq9q/f7++/PJLPf/8886brx944AHt3btXjz76qFJTU7V06VIlJydX6Pu2aNFCaWlpWrZsmfbv3685c+aUedN7YGCgBg0apJ07d+rzzz/Xgw8+qDvvvFNRUVGSpCeffFJJSUmaM2eOvv/+e33zzTdavHixnnvuuQrVAwCwFrlGrsFMNHMwUu3atfXf//5XsbGx6tevn1q3bq377rtP+fn5ziuaDz/8sP76179q0KBBiouLU2hoqO64447znnf+/Pn605/+pOHDh6tVq1YaOnSo8vLyJEmNGjXSk08+qccee0yRkZEaOXKkJOmpp57SxIkTlZSUpNatW+umm27SBx98oKZNm0oqme//zjvvaMWKFbr88su1YMECTZs2rULf9/bbb9eYMWM0cuRIdejQQRs3btTEiRNLHde8eXP169dPN998s2688Ua1b9/eZYnmIUOG6OWXX9bixYvVrl079ejRQ8nJyc5a4QEMX8IZ8FbkGrlmLMNzzeY4112vAACvkZOTo/DwcMVfdK98fSr/cOEz9kJ9+tMrys7OPueULgAAqgq5VoKROQAAAADwQCyAAgAmsTtkycN07EzqAADUAIbnGs0cABjE4bDL4aj8il1WnAMAgMoyPdeYZgkAAAAAHoiROQAwicNhzVQS1s4CANQEhucazRwAmMRh0b0FHhp6AAAvY3iuMc0SAAAAADwQI3MAYBK7XbJZcJO3h94oDgDwMobnGs0cAJjE8OkoAAAvY3iuMc0SAAAAADwQI3MAYBCH3S6HBdNRPPV5PAAA72J6rjEyBwAAAAAeiJE5ADCJ4fcWAAC8jOG5RjMHACaxOySbuaEHAPAyhuca0ywBAAAAwAMxMgcAJnE4JFnxPB7PvIIJAPAyhucazRwAGMRhd8hhwXQUh4eGHgDAu5iea0yzBAAAAAAPxMgcAJjEYZc101E883k8AAAvY3iuMTIHAAZx2B2WbQAAuJs7c23u3Llq0qSJAgMD1bVrV33xxRdV8A3Pj2YOAAAAACrgzTff1NixYzV58mR9+eWXuvzyy5WQkKBjx45Vax00cwBgEofdug0AAHdzU64999xzGjp0qO655x61adNGCxYsUO3atfXKK69U0RctG/fMAYBBzqhIsmCG5BkVVf4kAABUktW5lpOT47I/ICBAAQEBLvsKCwu1fft2TZgwwbnPx8dH8fHx2rRpU+WLqQCaOQAwgL+/v6KiorQ+40PLzhkVFSV/f3/LzgcAQHlVRa6FhIQoJibGZd/kyZM1ZcoUl30//fSTiouLFRkZ6bI/MjJS3333nWX1lAfNHAAYIDAwUAcPHlRhYaFl5/T391dgYKBl5wMAoLyqItccDodsNpvLvt+PytU0NHMAYIjAwECaLwCA13BXrl100UWqVauWMjMzXfZnZmYqKiqqWmthARQAAAAAKCd/f3917txZKSkpzn12u10pKSmKi4ur1loYmQMAAACAChg7dqwGDRqkLl266Morr9Ts2bOVl5ene+65p1rroJkDAAAAgAr4y1/+ouPHj2vSpEnKyMhQhw4dtHr16lKLolQ1m8PhsGAxTwAAAABAdeKeOQAAAADwQDRzAAAAAOCBaOYAAAAAwAPRzAEAAACAB6KZAwAAAAAPRDMHAAAAAB6IZg4AAAAAPBDNHAAAAAB4IJo5AAAAAPBANHMAAAAA4IFo5gAAAADAA/1/g00awjwa1uoAAAAASUVORK5CYII=",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"\n",
"\n",
"_, ax = plt.subplots(1, 2, figsize=(10, 4), sharex=False, sharey=False\n",
")\n",
"\n",
"for index in range(0, len(optimized_metrics)):\n",
" c_matrix = optimized_metrics.iloc[index][\"Confusion_matrix\"]\n",
" disp = ConfusionMatrixDisplay(\n",
" confusion_matrix=c_matrix, display_labels=[\"Healthy\", \"Sick\"]\n",
" ).plot(ax=ax.flat[index])\n",
"\n",
"plt.subplots_adjust(top=1, bottom=0, hspace=0.4, wspace=0.3)\n",
"plt.show()\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"В желтом квадрате мы видим значение 74, что обозначает количество правильно классифицированных объектов, отнесенных к классу \"Sick\". Это свидетельствует о том, что модель успешно идентифицирует объекты этого класса, минимизируя количество ложных положительных срабатываний.\n",
"\n",
"В зеленом квадрате значение 54 указывает на количество правильно классифицированных объектов, отнесенных к классу \"Healthy\". Это также является показателем хорошей точности модели в определении объектов данного класса."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Определение достижимого уровня качества модели для второй задачи"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Подготовка данных"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" Pregnancies Glucose BloodPressure SkinThickness Insulin \\\n",
"count 768.000000 768.000000 768.000000 768.000000 768.000000 \n",
"mean 3.845052 120.894531 69.105469 20.536458 79.799479 \n",
"std 3.369578 31.972618 19.355807 15.952218 115.244002 \n",
"min 0.000000 0.000000 0.000000 0.000000 0.000000 \n",
"25% 1.000000 99.000000 62.000000 0.000000 0.000000 \n",
"50% 3.000000 117.000000 72.000000 23.000000 30.500000 \n",
"75% 6.000000 140.250000 80.000000 32.000000 127.250000 \n",
"max 17.000000 199.000000 122.000000 99.000000 846.000000 \n",
"\n",
" BMI DiabetesPedigreeFunction Age Outcome \n",
"count 768.000000 768.000000 768.000000 768.000000 \n",
"mean 31.992578 0.471876 33.240885 0.348958 \n",
"std 7.884160 0.331329 11.760232 0.476951 \n",
"min 0.000000 0.078000 21.000000 0.000000 \n",
"25% 27.300000 0.243750 24.000000 0.000000 \n",
"50% 32.000000 0.372500 29.000000 0.000000 \n",
"75% 36.600000 0.626250 41.000000 1.000000 \n",
"max 67.100000 2.420000 81.000000 1.000000 \n"
]
}
],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn import set_config\n",
"\n",
"\n",
"random_state = 9\n",
"set_config(transform_output=\"pandas\")\n",
"df = pd.read_csv(\".//scv//diabetes.csv\")\n",
"print(df.describe())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Формирование выборок"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'X_train'"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Pregnancies | \n",
" Glucose | \n",
" BloodPressure | \n",
" SkinThickness | \n",
" Insulin | \n",
" BMI | \n",
" DiabetesPedigreeFunction | \n",
" Age | \n",
" Outcome | \n",
"
\n",
" \n",
" \n",
" \n",
" 196 | \n",
" 1 | \n",
" 105 | \n",
" 58 | \n",
" 0 | \n",
" 0 | \n",
" 24.3 | \n",
" 0.187 | \n",
" 21 | \n",
" 0 | \n",
"
\n",
" \n",
" 69 | \n",
" 4 | \n",
" 146 | \n",
" 85 | \n",
" 27 | \n",
" 100 | \n",
" 28.9 | \n",
" 0.189 | \n",
" 27 | \n",
" 0 | \n",
"
\n",
" \n",
" 494 | \n",
" 3 | \n",
" 80 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0.0 | \n",
" 0.174 | \n",
" 22 | \n",
" 0 | \n",
"
\n",
" \n",
" 463 | \n",
" 5 | \n",
" 88 | \n",
" 78 | \n",
" 30 | \n",
" 0 | \n",
" 27.6 | \n",
" 0.258 | \n",
" 37 | \n",
" 0 | \n",
"
\n",
" \n",
" 653 | \n",
" 2 | \n",
" 120 | \n",
" 54 | \n",
" 0 | \n",
" 0 | \n",
" 26.8 | \n",
" 0.455 | \n",
" 27 | \n",
" 0 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 322 | \n",
" 0 | \n",
" 124 | \n",
" 70 | \n",
" 20 | \n",
" 0 | \n",
" 27.4 | \n",
" 0.254 | \n",
" 36 | \n",
" 1 | \n",
"
\n",
" \n",
" 109 | \n",
" 0 | \n",
" 95 | \n",
" 85 | \n",
" 25 | \n",
" 36 | \n",
" 37.4 | \n",
" 0.247 | \n",
" 24 | \n",
" 1 | \n",
"
\n",
" \n",
" 27 | \n",
" 1 | \n",
" 97 | \n",
" 66 | \n",
" 15 | \n",
" 140 | \n",
" 23.2 | \n",
" 0.487 | \n",
" 22 | \n",
" 0 | \n",
"
\n",
" \n",
" 651 | \n",
" 1 | \n",
" 117 | \n",
" 60 | \n",
" 23 | \n",
" 106 | \n",
" 33.8 | \n",
" 0.466 | \n",
" 27 | \n",
" 0 | \n",
"
\n",
" \n",
" 197 | \n",
" 3 | \n",
" 107 | \n",
" 62 | \n",
" 13 | \n",
" 48 | \n",
" 22.9 | \n",
" 0.678 | \n",
" 23 | \n",
" 1 | \n",
"
\n",
" \n",
"
\n",
"
614 rows × 9 columns
\n",
"
"
],
"text/plain": [
" Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \\\n",
"196 1 105 58 0 0 24.3 \n",
"69 4 146 85 27 100 28.9 \n",
"494 3 80 0 0 0 0.0 \n",
"463 5 88 78 30 0 27.6 \n",
"653 2 120 54 0 0 26.8 \n",
".. ... ... ... ... ... ... \n",
"322 0 124 70 20 0 27.4 \n",
"109 0 95 85 25 36 37.4 \n",
"27 1 97 66 15 140 23.2 \n",
"651 1 117 60 23 106 33.8 \n",
"197 3 107 62 13 48 22.9 \n",
"\n",
" DiabetesPedigreeFunction Age Outcome \n",
"196 0.187 21 0 \n",
"69 0.189 27 0 \n",
"494 0.174 22 0 \n",
"463 0.258 37 0 \n",
"653 0.455 27 0 \n",
".. ... ... ... \n",
"322 0.254 36 1 \n",
"109 0.247 24 1 \n",
"27 0.487 22 0 \n",
"651 0.466 27 0 \n",
"197 0.678 23 1 \n",
"\n",
"[614 rows x 9 columns]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"'y_train'"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Outcome | \n",
"
\n",
" \n",
" \n",
" \n",
" 196 | \n",
" 0 | \n",
"
\n",
" \n",
" 69 | \n",
" 0 | \n",
"
\n",
" \n",
" 494 | \n",
" 0 | \n",
"
\n",
" \n",
" 463 | \n",
" 0 | \n",
"
\n",
" \n",
" 653 | \n",
" 0 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 322 | \n",
" 1 | \n",
"
\n",
" \n",
" 109 | \n",
" 1 | \n",
"
\n",
" \n",
" 27 | \n",
" 0 | \n",
"
\n",
" \n",
" 651 | \n",
" 0 | \n",
"
\n",
" \n",
" 197 | \n",
" 1 | \n",
"
\n",
" \n",
"
\n",
"
614 rows × 1 columns
\n",
"
"
],
"text/plain": [
" Outcome\n",
"196 0\n",
"69 0\n",
"494 0\n",
"463 0\n",
"653 0\n",
".. ...\n",
"322 1\n",
"109 1\n",
"27 0\n",
"651 0\n",
"197 1\n",
"\n",
"[614 rows x 1 columns]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"'X_test'"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Pregnancies | \n",
" Glucose | \n",
" BloodPressure | \n",
" SkinThickness | \n",
" Insulin | \n",
" BMI | \n",
" DiabetesPedigreeFunction | \n",
" Age | \n",
" Outcome | \n",
"
\n",
" \n",
" \n",
" \n",
" 669 | \n",
" 9 | \n",
" 154 | \n",
" 78 | \n",
" 30 | \n",
" 100 | \n",
" 30.9 | \n",
" 0.164 | \n",
" 45 | \n",
" 0 | \n",
"
\n",
" \n",
" 379 | \n",
" 0 | \n",
" 93 | \n",
" 100 | \n",
" 39 | \n",
" 72 | \n",
" 43.4 | \n",
" 1.021 | \n",
" 35 | \n",
" 0 | \n",
"
\n",
" \n",
" 640 | \n",
" 0 | \n",
" 102 | \n",
" 86 | \n",
" 17 | \n",
" 105 | \n",
" 29.3 | \n",
" 0.695 | \n",
" 27 | \n",
" 0 | \n",
"
\n",
" \n",
" 658 | \n",
" 11 | \n",
" 127 | \n",
" 106 | \n",
" 0 | \n",
" 0 | \n",
" 39.0 | \n",
" 0.190 | \n",
" 51 | \n",
" 0 | \n",
"
\n",
" \n",
" 304 | \n",
" 3 | \n",
" 150 | \n",
" 76 | \n",
" 0 | \n",
" 0 | \n",
" 21.0 | \n",
" 0.207 | \n",
" 37 | \n",
" 0 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 203 | \n",
" 2 | \n",
" 99 | \n",
" 70 | \n",
" 16 | \n",
" 44 | \n",
" 20.4 | \n",
" 0.235 | \n",
" 27 | \n",
" 0 | \n",
"
\n",
" \n",
" 605 | \n",
" 1 | \n",
" 124 | \n",
" 60 | \n",
" 32 | \n",
" 0 | \n",
" 35.8 | \n",
" 0.514 | \n",
" 21 | \n",
" 0 | \n",
"
\n",
" \n",
" 561 | \n",
" 0 | \n",
" 198 | \n",
" 66 | \n",
" 32 | \n",
" 274 | \n",
" 41.3 | \n",
" 0.502 | \n",
" 28 | \n",
" 1 | \n",
"
\n",
" \n",
" 280 | \n",
" 0 | \n",
" 146 | \n",
" 70 | \n",
" 0 | \n",
" 0 | \n",
" 37.9 | \n",
" 0.334 | \n",
" 28 | \n",
" 1 | \n",
"
\n",
" \n",
" 103 | \n",
" 1 | \n",
" 81 | \n",
" 72 | \n",
" 18 | \n",
" 40 | \n",
" 26.6 | \n",
" 0.283 | \n",
" 24 | \n",
" 0 | \n",
"
\n",
" \n",
"
\n",
"
154 rows × 9 columns
\n",
"
"
],
"text/plain": [
" Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \\\n",
"669 9 154 78 30 100 30.9 \n",
"379 0 93 100 39 72 43.4 \n",
"640 0 102 86 17 105 29.3 \n",
"658 11 127 106 0 0 39.0 \n",
"304 3 150 76 0 0 21.0 \n",
".. ... ... ... ... ... ... \n",
"203 2 99 70 16 44 20.4 \n",
"605 1 124 60 32 0 35.8 \n",
"561 0 198 66 32 274 41.3 \n",
"280 0 146 70 0 0 37.9 \n",
"103 1 81 72 18 40 26.6 \n",
"\n",
" DiabetesPedigreeFunction Age Outcome \n",
"669 0.164 45 0 \n",
"379 1.021 35 0 \n",
"640 0.695 27 0 \n",
"658 0.190 51 0 \n",
"304 0.207 37 0 \n",
".. ... ... ... \n",
"203 0.235 27 0 \n",
"605 0.514 21 0 \n",
"561 0.502 28 1 \n",
"280 0.334 28 1 \n",
"103 0.283 24 0 \n",
"\n",
"[154 rows x 9 columns]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"'y_test'"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Outcome | \n",
"
\n",
" \n",
" \n",
" \n",
" 669 | \n",
" 0 | \n",
"
\n",
" \n",
" 379 | \n",
" 0 | \n",
"
\n",
" \n",
" 640 | \n",
" 0 | \n",
"
\n",
" \n",
" 658 | \n",
" 0 | \n",
"
\n",
" \n",
" 304 | \n",
" 0 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 203 | \n",
" 0 | \n",
"
\n",
" \n",
" 605 | \n",
" 0 | \n",
"
\n",
" \n",
" 561 | \n",
" 1 | \n",
"
\n",
" \n",
" 280 | \n",
" 1 | \n",
"
\n",
" \n",
" 103 | \n",
" 0 | \n",
"
\n",
" \n",
"
\n",
"
154 rows × 1 columns
\n",
"
"
],
"text/plain": [
" Outcome\n",
"669 0\n",
"379 0\n",
"640 0\n",
"658 0\n",
"304 0\n",
".. ...\n",
"203 0\n",
"605 0\n",
"561 1\n",
"280 1\n",
"103 0\n",
"\n",
"[154 rows x 1 columns]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from typing import Tuple\n",
"import pandas as pd\n",
"from pandas import DataFrame\n",
"from sklearn.model_selection import train_test_split\n",
"\n",
"\n",
"def split_stratified_into_train_val_test(\n",
" df_input: DataFrame,\n",
" stratify_colname: str = \"y\",\n",
" frac_train: float = 0.6,\n",
" frac_val: float = 0.15,\n",
" frac_test: float = 0.25,\n",
" random_state: int = None,\n",
") -> Tuple[DataFrame, DataFrame, DataFrame, DataFrame, DataFrame, DataFrame]:\n",
" \n",
"\n",
" if not (0 < frac_train < 1) or not (0 <= frac_val <= 1) or not (0 <= frac_test <= 1):\n",
" raise ValueError(\"Fractions must be between 0 and 1 and the sum must equal 1.\")\n",
" \n",
" if not (frac_train + frac_val + frac_test == 1.0):\n",
" raise ValueError(\"fractions %f, %f, %f do not add up to 1.0\" %\n",
" (frac_train, frac_val, frac_test))\n",
"\n",
" if stratify_colname not in df_input.columns:\n",
" raise ValueError(f\"{stratify_colname} is not a column in the DataFrame.\")\n",
"\n",
" X = df_input\n",
" y = df_input[[stratify_colname]]\n",
"\n",
" \n",
" df_train, df_temp, y_train, y_temp = train_test_split(\n",
" X, y, stratify=y, test_size=(1.0 - frac_train), random_state=random_state\n",
" )\n",
"\n",
" if frac_val == 0:\n",
" return df_train, pd.DataFrame(), df_temp, y_train, pd.DataFrame(), y_temp\n",
"\n",
" relative_frac_test = frac_test / (frac_val + frac_test)\n",
"\n",
" df_val, df_test, y_val, y_test = train_test_split(\n",
" df_temp,\n",
" y_temp,\n",
" stratify=y_temp,\n",
" test_size=relative_frac_test,\n",
" random_state=random_state,\n",
" )\n",
"\n",
" assert len(df_input) == len(df_train) + len(df_val) + len(df_test)\n",
" \n",
" return df_train, df_val, df_test, y_train, y_val, y_test\n",
"\n",
"\n",
"X_train, X_val, X_test, y_train, y_val, y_test = split_stratified_into_train_val_test(\n",
" df, stratify_colname=\"Outcome\", frac_train=0.80, frac_val=0.0, frac_test=0.20, random_state=random_state\n",
")\n",
"\n",
"display(\"X_train\", X_train)\n",
"display(\"y_train\", y_train)\n",
"display(\"X_test\", X_test)\n",
"display(\"y_test\", y_test)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Формирование конвейера для классификации данных"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"from sklearn.base import BaseEstimator, TransformerMixin\n",
"from sklearn.compose import ColumnTransformer\n",
"from sklearn.discriminant_analysis import StandardScaler\n",
"from sklearn.impute import SimpleImputer\n",
"from sklearn.pipeline import Pipeline\n",
"from sklearn.preprocessing import OneHotEncoder\n",
"\n",
"class DiabetFeatures(BaseEstimator, TransformerMixin):\n",
" def __init__(self):\n",
" pass\n",
" def fit(self, X, y=None):\n",
" return self\n",
" \n",
"\n",
"columns_to_drop = [\"Pregnancies\", \"SkinThickness\", \"Insulin\", \"BMI\"]\n",
"num_columns = [\"Glucose\", \"Age\", \"BloodPressure\", \"Outcome\", \"DiabetesPedigreeFunction\"]\n",
"cat_columns = []\n",
"\n",
"num_imputer = SimpleImputer(strategy=\"median\")\n",
"num_scaler = StandardScaler()\n",
"preprocessing_num = Pipeline(\n",
" [\n",
" (\"imputer\", num_imputer),\n",
" (\"scaler\", num_scaler),\n",
" ]\n",
")\n",
"\n",
"cat_imputer = SimpleImputer(strategy=\"constant\", fill_value=\"unknown\")\n",
"cat_encoder = OneHotEncoder(handle_unknown=\"ignore\", sparse_output=False, drop=\"first\")\n",
"preprocessing_cat = Pipeline(\n",
" [\n",
" (\"imputer\", cat_imputer),\n",
" (\"encoder\", cat_encoder),\n",
" ]\n",
")\n",
"\n",
"features_preprocessing = ColumnTransformer(\n",
" verbose_feature_names_out=False,\n",
" transformers=[\n",
" (\"prepocessing_num\", preprocessing_num, num_columns),\n",
" (\"prepocessing_cat\", preprocessing_cat, cat_columns),\n",
" ],\n",
" remainder=\"passthrough\"\n",
")\n",
"\n",
"\n",
"drop_columns = ColumnTransformer(\n",
" verbose_feature_names_out=False,\n",
" transformers=[\n",
" (\"drop_columns\", \"drop\", columns_to_drop),\n",
" ],\n",
" remainder=\"passthrough\",\n",
")\n",
"\n",
"features_postprocessing = ColumnTransformer(\n",
" verbose_feature_names_out=False,\n",
" transformers=[\n",
" (\"prepocessing_cat\", preprocessing_cat, [\"Cabin_type\"]),\n",
" ],\n",
" remainder=\"passthrough\",\n",
")\n",
"\n",
"pipeline_end = Pipeline(\n",
" [\n",
" (\"features_preprocessing\", features_preprocessing),\n",
" (\"drop_columns\", drop_columns),\n",
" ]\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Демонстрация работы конвейера"
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Glucose | \n",
" Age | \n",
" BloodPressure | \n",
" Outcome | \n",
" DiabetesPedigreeFunction | \n",
"
\n",
" \n",
" \n",
" \n",
" 196 | \n",
" -0.478144 | \n",
" -1.029257 | \n",
" -0.554050 | \n",
" -0.731437 | \n",
" -0.849205 | \n",
"
\n",
" \n",
" 69 | \n",
" 0.818506 | \n",
" -0.522334 | \n",
" 0.804885 | \n",
" -0.731437 | \n",
" -0.843172 | \n",
"
\n",
" \n",
" 494 | \n",
" -1.268784 | \n",
" -0.944770 | \n",
" -3.473244 | \n",
" -0.731437 | \n",
" -0.888421 | \n",
"
\n",
" \n",
" 463 | \n",
" -1.015779 | \n",
" 0.322537 | \n",
" 0.452568 | \n",
" -0.731437 | \n",
" -0.635028 | \n",
"
\n",
" \n",
" 653 | \n",
" -0.003760 | \n",
" -0.522334 | \n",
" -0.755374 | \n",
" -0.731437 | \n",
" -0.040763 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 322 | \n",
" 0.122742 | \n",
" 0.238050 | \n",
" 0.049921 | \n",
" 1.367172 | \n",
" -0.647095 | \n",
"
\n",
" \n",
" 109 | \n",
" -0.794400 | \n",
" -0.775796 | \n",
" 0.804885 | \n",
" 1.367172 | \n",
" -0.668211 | \n",
"
\n",
" \n",
" 27 | \n",
" -0.731149 | \n",
" -0.944770 | \n",
" -0.151403 | \n",
" -0.731437 | \n",
" 0.055767 | \n",
"
\n",
" \n",
" 651 | \n",
" -0.098637 | \n",
" -0.522334 | \n",
" -0.453388 | \n",
" -0.731437 | \n",
" -0.007581 | \n",
"
\n",
" \n",
" 197 | \n",
" -0.414893 | \n",
" -0.860283 | \n",
" -0.352726 | \n",
" 1.367172 | \n",
" 0.631933 | \n",
"
\n",
" \n",
"
\n",
"
614 rows × 5 columns
\n",
"
"
],
"text/plain": [
" Glucose Age BloodPressure Outcome DiabetesPedigreeFunction\n",
"196 -0.478144 -1.029257 -0.554050 -0.731437 -0.849205\n",
"69 0.818506 -0.522334 0.804885 -0.731437 -0.843172\n",
"494 -1.268784 -0.944770 -3.473244 -0.731437 -0.888421\n",
"463 -1.015779 0.322537 0.452568 -0.731437 -0.635028\n",
"653 -0.003760 -0.522334 -0.755374 -0.731437 -0.040763\n",
".. ... ... ... ... ...\n",
"322 0.122742 0.238050 0.049921 1.367172 -0.647095\n",
"109 -0.794400 -0.775796 0.804885 1.367172 -0.668211\n",
"27 -0.731149 -0.944770 -0.151403 -0.731437 0.055767\n",
"651 -0.098637 -0.522334 -0.453388 -0.731437 -0.007581\n",
"197 -0.414893 -0.860283 -0.352726 1.367172 0.631933\n",
"\n",
"[614 rows x 5 columns]"
]
},
"execution_count": 67,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"preprocessing_result = pipeline_end.fit_transform(X_train)\n",
"preprocessed_df = pd.DataFrame(\n",
" preprocessing_result,\n",
" columns=pipeline_end.get_feature_names_out(),\n",
")\n",
"\n",
"preprocessed_df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Формирование набора моделей для классификации"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {},
"outputs": [],
"source": [
"from sklearn import ensemble, linear_model, naive_bayes, neighbors, neural_network, tree\n",
"\n",
"class_models = {\n",
" \"logistic\": {\"model\": linear_model.LogisticRegression()},\n",
" \"ridge\": {\"model\": linear_model.RidgeClassifierCV(cv=5, class_weight=\"balanced\")},\n",
" \"ridge\": {\"model\": linear_model.LogisticRegression(penalty=\"l2\", class_weight=\"balanced\")},\n",
" \"decision_tree\": {\n",
" \"model\": tree.DecisionTreeClassifier(max_depth=7, random_state=random_state)\n",
" },\n",
" \"knn\": {\"model\": neighbors.KNeighborsClassifier(n_neighbors=7)},\n",
" \"naive_bayes\": {\"model\": naive_bayes.GaussianNB()},\n",
" \"gradient_boosting\": {\n",
" \"model\": ensemble.GradientBoostingClassifier(n_estimators=210)\n",
" },\n",
" \"random_forest\": {\n",
" \"model\": ensemble.RandomForestClassifier(\n",
" max_depth=11, class_weight=\"balanced\", random_state=random_state\n",
" )\n",
" },\n",
" \"mlp\": {\n",
" \"model\": neural_network.MLPClassifier(\n",
" hidden_layer_sizes=(7,),\n",
" max_iter=500,\n",
" early_stopping=True,\n",
" random_state=random_state,\n",
" )\n",
" },\n",
"}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Обучение моделей на обучающем наборе данных и оценка на тестовом¶"
]
},
{
"cell_type": "code",
"execution_count": 69,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Model: logistic\n",
"Model: ridge\n",
"Model: decision_tree\n",
"Model: knn\n",
"Model: naive_bayes\n",
"Model: gradient_boosting\n",
"Model: random_forest\n",
"Model: mlp\n"
]
}
],
"source": [
"import numpy as np\n",
"from sklearn import metrics\n",
"\n",
"for model_name in class_models.keys():\n",
" print(f\"Model: {model_name}\")\n",
" model = class_models[model_name][\"model\"]\n",
"\n",
" model_pipeline = Pipeline([(\"pipeline\", pipeline_end), (\"model\", model)])\n",
" model_pipeline = model_pipeline.fit(X_train, y_train.values.ravel())\n",
"\n",
" y_train_predict = model_pipeline.predict(X_train)\n",
" y_test_probs = model_pipeline.predict_proba(X_test)[:, 1]\n",
" y_test_predict = np.where(y_test_probs > 0.5, 1, 0)\n",
"\n",
" class_models[model_name][\"pipeline\"] = model_pipeline\n",
" class_models[model_name][\"probs\"] = y_test_probs\n",
" class_models[model_name][\"preds\"] = y_test_predict\n",
"\n",
" class_models[model_name][\"Precision_train\"] = metrics.precision_score(\n",
" y_train, y_train_predict\n",
" )\n",
" class_models[model_name][\"Precision_test\"] = metrics.precision_score(\n",
" y_test, y_test_predict\n",
" )\n",
" class_models[model_name][\"Recall_train\"] = metrics.recall_score(\n",
" y_train, y_train_predict\n",
" )\n",
" class_models[model_name][\"Recall_test\"] = metrics.recall_score(\n",
" y_test, y_test_predict\n",
" )\n",
" class_models[model_name][\"Accuracy_train\"] = metrics.accuracy_score(\n",
" y_train, y_train_predict\n",
" )\n",
" class_models[model_name][\"Accuracy_test\"] = metrics.accuracy_score(\n",
" y_test, y_test_predict\n",
" )\n",
" class_models[model_name][\"ROC_AUC_test\"] = metrics.roc_auc_score(\n",
" y_test, y_test_probs\n",
" )\n",
" class_models[model_name][\"F1_train\"] = metrics.f1_score(y_train, y_train_predict)\n",
" class_models[model_name][\"F1_test\"] = metrics.f1_score(y_test, y_test_predict)\n",
" class_models[model_name][\"MCC_test\"] = metrics.matthews_corrcoef(\n",
" y_test, y_test_predict\n",
" )\n",
" class_models[model_name][\"Cohen_kappa_test\"] = metrics.cohen_kappa_score(\n",
" y_test, y_test_predict\n",
" )\n",
" class_models[model_name][\"Confusion_matrix\"] = metrics.confusion_matrix(\n",
" y_test, y_test_predict\n",
" )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Сводная таблица оценок качества для использованных моделей классификации¶\n",
"\n",
"Матрица неточностей\n"
]
},
{
"cell_type": "code",
"execution_count": 70,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA1IAAAQ9CAYAAABTI3wGAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdeVxUZd8G8OuwDrKjyIACoriR4kbu5hKFVi5pj2n25pJaKu7m8pSAWy5lkntZipa2J5mlZaamZj7uS+6KiguIIiAo28z9/kFOTTDIwMDM3Fzf93M+r9znzJnf8Oi5+p25zzmKEEKAiIiIiIiISszG3AUQERERERFZGzZSRERERERERmIjRUREREREZCQ2UkREREREREZiI0VERERERGQkNlJERERERERGYiNFRERERERkJDZSRERERERERmIjRUREREREZCQ2UmR2cXFxUBQFly9fLpf9X758GYqiIC4uziT727lzJxRFwc6dO02yPyIiIpnExMRAUZQSbasoCmJiYsq3IKJywkaKyIDly5ebrPkiIiIiIrnYmbsAovIWGBiIBw8ewN7e3qjXLV++HNWqVcOgQYP0xp944gk8ePAADg4OJqySiIhIDm+99RamTp1q7jKIyh0bKZKeoihQqVQm25+NjY1J90dERCSLrKwsODs7w86O/4lJ8uPUPrJIy5cvx2OPPQZHR0f4+flh1KhRSEtLK7TdsmXLULt2bTg5OaFly5bYvXs3OnXqhE6dOum2KeoaqaSkJAwePBg1a9aEo6MjfH190bNnT911WrVq1cKff/6JXbt2QVEUKIqi26eha6T279+PZ555Bp6ennB2dkZoaCjef/990/5iiIiILMTDa6FOnTqFl156CZ6enmjfvn2R10jl5ORg/Pjx8Pb2hqurK3r06IFr164Vud+dO3ciLCwMKpUKderUwQcffGDwuqtPP/0ULVq0gJOTE7y8vNCvXz8kJiaWy+cl+jeeLiCLExMTgxkzZiA8PBwjRozA2bNnsWLFChw4cAB79+7VTdFbsWIFIiMj0aFDB4wfPx6XL19Gr1694OnpiZo1axb7Hn369MGff/6J0aNHo1atWrh16xa2bduGq1evolatWoiNjcXo0aPh4uKCN998EwDg4+NjcH/btm3Dc889B19fX4wdOxZqtRqnT5/G5s2bMXbsWNP9coiIiCzMf/7z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Cvv27YvGjRtj5syZSEpKwueff479+/fj+PHjcHd3BwD8+uuv6NixIypXroxJkybh0aNHmDdvHpo3b45jx47J+zdo0CCsW7cOQ4cORa1atXD37l3s27cPp0+fRsOGDfHhhx8iNTUV165dw9y5cwEAzs7Ohe7Hk35eQO7fBp07d8aff/6JwYMHo0aNGvjpp58QERFh1M+MSpAgMlBUVJQAIPr166fT/tJLL4ly5crJrx8+fJjvveHh4aJy5co6ba1btxatW7eWXy9evFgAEH///bdOv1q1aom2bdvKr6dOnSqcnJzE2bNndfqNGzdO2NraiitXrhi8T61btxYAxKeffiq3ZWZmipCQEOHl5SWysrKEEELk5OSIzMxMnffeu3dPeHt76/w84uPjBQCxcOFCnb5dunQRlSpVElqtVgghxNdffy1sbGzE3r17dfotWrRIABD79+8XQggxd+5cAUDcvn3b4H0iIiLL0rlzZ1GmTBlx/fp1ue3cuXPCzs5O/PdPMQDCxsZG/PPPP/m28Xi2ZmVliTp16ujkY1xcnAAghgwZotO3V69eAoCIioqS25YvXy4AiISEBCGEEPfv3xfu7u5iwIABOu9NTEwUbm5uOu0RERECgJgyZYpO3wYNGohGjRrJr2/fvp3vcw21a9cuAUBUqFBBpKWlye1r164VAMTnn38u/xy8vLxEnTp1xKNHj+R+mzdvFgDExIkT5ba8bL97967cduLECWFjYyP69Okjt7m5uYl33nmn0Po6deokAgMD87UnJCQIAGL58uVym6E/rx9++EEAENHR0XKbRqMRbdu2zbdNsgyc2kdGGzRokM7rli1b4u7du0hLSwMA+QgRAKSmpuLOnTto3bo1Ll68iNTUVL3bffnll2FnZ4c1a9bIbSdPnsSpU6fw+uuvy23ff/89WrZsibJly+LOnTvyEhYWBo1Gg99//92o/bGzs9OZcqdSqfD222/j1q1bOHr0KIDcueR513RptVokJycjJycHoaGh8ql+AKhWrRqaNGmCVatWyW3JycnYunUrevfuLU/h+P7771GzZk3UqFFDZx/atm0LAPKUwbyjaD/99FORpy0SEZH5aDQa/Prrr+jWrRv8/Pzk9uDgYHTs2DFf/9atW6NWrVr52v+brffu3UNqaipatmypk0E///wzAGD48OE67338hggF2bFjB1JSUtCz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d2+UL18eXbt2xd69e5GQkIDdu3dj+PDhuHbtGgDg3XffxaxZs7BhwwacOXMGQ4YMKfQ5E5UqVUJERAT69euHDRs2yNtcu3YtACAwMBCSJGHz5s24ffs20tPT4eLiglGjRmHkyJFYsWIFLly4gGPHjmHevHnyRaKDBg3CuXPnMHr0aMTHx2P16tWIjY01an+rVq2KK1eu4LvvvsOFCxcQExNT4MW5arUaEREROHHiBPbu3Yvhw4eje/fu8PHxAQBMnjwZM2fORExMDM6ePYu///4by5cvx2effWZUPURERI9jNjObyUTMfZEWWY//XtBqzPqbN2+KPn36iPLlywsHBwdRuXJlMWDAAJGamiqEyL2A9d133xWurq7C3d1dvPfee6JPnz56L2gVQohHjx6JkSNHCl9fX6FSqURwcLBYtmyZvH7KlCnCx8dHSJIkIiIihBC5F+FGR0eL6tWrC3t7e+Hp6SnCw8PFnj175Pdt2rRJBAcHCwcHB9GyZUuxbNkyoy9oHT16tChXrpxwdnYWr7/+upg7d65wc3OT10dFRYn69euLBQsWCD8/P6FWq8Wrr74qkpOTdba7atUqERISIlQqlShbtqxo1aqV+PHHH4UQvKCViIhyMZsLxmymkiAJoeeqQSIiIiIiIioQp/YREREREREZiQMpIiIiIiIiI3EgRUREREREZCQOpIiIiIiIiIzEgRQREREREZGROJAiIiIiIiIyEgdSRERERERERuJAioiIiIiIyEgcSBERERERERmJAykiIiIiIiIjcSBFRERERERkJA6kiIiIiIiIjMSBFBERERERkZE4kCIiIiIiIjISB1JkMSRJwqRJk8xdhl5ff/01atSoAXt7e7i7u5u7HCIiIkW5dOkSJElCbGysuUshMggHUkQGOHPmDCIjI1GlShUsXboUS5YsMXdJ+dy4cQOTJk1CXFycuUshIiIiUjw7cxdAZA12794NrVaLzz//HMHBweYup0A3btzA5MmTUalSJYSEhJi7HCIiIiJF4xkp0uvBgwfmLsFi3Lp1CwBMOqXv4cOHJtsWEREREZUsDqQIADBp0iRIkoRTp06hV69eKFu2LFq0aIG//voLkZGRqFy5MtRqNXx8fNCvXz/cvXu3wPefP38ekZGRcHd3h5ubG/r27ZtvwJCZmYmRI0fC09MTLi4u6NKlC65du1ZgXceP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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from sklearn.metrics import ConfusionMatrixDisplay\n",
"import matplotlib.pyplot as plt\n",
"\n",
"_, ax = plt.subplots(int(len(class_models) / 2), 2, figsize=(12, 10), sharex=False, sharey=False)\n",
"for index, key in enumerate(class_models.keys()):\n",
" c_matrix = class_models[key][\"Confusion_matrix\"]\n",
" disp = ConfusionMatrixDisplay(\n",
" confusion_matrix=c_matrix, display_labels=[\"Healthy\", \"Sick\"]\n",
" ).plot(ax=ax.flat[index])\n",
" disp.ax_.set_title(key)\n",
"\n",
"plt.subplots_adjust(top=1, bottom=0, hspace=0.4, wspace=0.1)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 71,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
" \n",
" \n",
" | \n",
" Precision_train | \n",
" Precision_test | \n",
" Recall_train | \n",
" Recall_test | \n",
" Accuracy_train | \n",
" Accuracy_test | \n",
" F1_train | \n",
" F1_test | \n",
"
\n",
" \n",
" \n",
" \n",
" logistic | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
"
\n",
" \n",
" ridge | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
"
\n",
" \n",
" decision_tree | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
"
\n",
" \n",
" naive_bayes | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
"
\n",
" \n",
" random_forest | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
"
\n",
" \n",
" gradient_boosting | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
"
\n",
" \n",
" knn | \n",
" 1.000000 | \n",
" 0.981818 | \n",
" 0.990654 | \n",
" 1.000000 | \n",
" 0.996743 | \n",
" 0.993506 | \n",
" 0.995305 | \n",
" 0.990826 | \n",
"
\n",
" \n",
" mlp | \n",
" 0.729323 | \n",
" 0.685714 | \n",
" 0.453271 | \n",
" 0.444444 | \n",
" 0.750814 | \n",
" 0.733766 | \n",
" 0.559078 | \n",
" 0.539326 | \n",
"
\n",
" \n",
"
\n"
],
"text/plain": [
""
]
},
"execution_count": 71,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"class_metrics = pd.DataFrame.from_dict(class_models, \"index\")[\n",
" [\n",
" \"Precision_train\",\n",
" \"Precision_test\",\n",
" \"Recall_train\",\n",
" \"Recall_test\",\n",
" \"Accuracy_train\",\n",
" \"Accuracy_test\",\n",
" \"F1_train\",\n",
" \"F1_test\",\n",
" ]\n",
"]\n",
"class_metrics.sort_values(\n",
" by=\"Accuracy_test\", ascending=False\n",
").style.background_gradient(\n",
" cmap=\"plasma\",\n",
" low=0.3,\n",
" high=1,\n",
" subset=[\"Accuracy_train\", \"Accuracy_test\", \"F1_train\", \"F1_test\"],\n",
").background_gradient(\n",
" cmap=\"viridis\",\n",
" low=1,\n",
" high=0.3,\n",
" subset=[\n",
" \"Precision_train\",\n",
" \"Precision_test\",\n",
" \"Recall_train\",\n",
" \"Recall_test\",\n",
" ],\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"\n",
"Почти все модели, включая логистическую регрессию, ридж-регрессию, KNN, наивный байесовский классификатор, многослойную перцептронную сеть, случайный лес, дерево решений и градиентный бустинг, демонстрируют 100% точность (1.000000) на обучающей выборке. Это указывает на то, что модели смогли подстроиться под обучающие данные, что может указывать на возможное переобучение.\n",
"\n",
"ROC-кривая, каппа Коэна, коэффициент корреляции Мэтьюса\n"
]
},
{
"cell_type": "code",
"execution_count": 72,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
" \n",
" \n",
" | \n",
" Accuracy_test | \n",
" F1_test | \n",
" ROC_AUC_test | \n",
" Cohen_kappa_test | \n",
" MCC_test | \n",
"
\n",
" \n",
" \n",
" \n",
" logistic | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
"
\n",
" \n",
" ridge | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
"
\n",
" \n",
" decision_tree | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
"
\n",
" \n",
" knn | \n",
" 0.993506 | \n",
" 0.990826 | \n",
" 1.000000 | \n",
" 0.985801 | \n",
" 0.985901 | \n",
"
\n",
" \n",
" naive_bayes | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
"
\n",
" \n",
" gradient_boosting | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
"
\n",
" \n",
" random_forest | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
"
\n",
" \n",
" mlp | \n",
" 0.733766 | \n",
" 0.539326 | \n",
" 0.653148 | \n",
" 0.363893 | \n",
" 0.380814 | \n",
"
\n",
" \n",
"
\n"
],
"text/plain": [
""
]
},
"execution_count": 72,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"class_metrics = pd.DataFrame.from_dict(class_models, \"index\")[\n",
" [\n",
" \"Accuracy_test\",\n",
" \"F1_test\",\n",
" \"ROC_AUC_test\",\n",
" \"Cohen_kappa_test\",\n",
" \"MCC_test\",\n",
" ]\n",
"]\n",
"class_metrics.sort_values(by=\"ROC_AUC_test\", ascending=False).style.background_gradient(\n",
" cmap=\"plasma\",\n",
" low=0.3,\n",
" high=1,\n",
" subset=[\n",
" \"ROC_AUC_test\",\n",
" \"MCC_test\",\n",
" \"Cohen_kappa_test\",\n",
" ],\n",
").background_gradient(\n",
" cmap=\"viridis\",\n",
" low=1,\n",
" high=0.3,\n",
" subset=[\n",
" \"Accuracy_test\",\n",
" \"F1_test\",\n",
" ],\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 73,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'logistic'"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"best_model = str(class_metrics.sort_values(by=\"MCC_test\", ascending=False).iloc[0].name)\n",
"\n",
"display(best_model)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Вывод данных с ошибкой предсказания для оценки"
]
},
{
"cell_type": "code",
"execution_count": 74,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'Error items count: 0'"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Pregnancies | \n",
" Predicted | \n",
" Glucose | \n",
" BloodPressure | \n",
" SkinThickness | \n",
" Insulin | \n",
" BMI | \n",
" DiabetesPedigreeFunction | \n",
" Age | \n",
" Outcome | \n",
"
\n",
" \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
"Empty DataFrame\n",
"Columns: [Pregnancies, Predicted, Glucose, BloodPressure, SkinThickness, Insulin, BMI, DiabetesPedigreeFunction, Age, Outcome]\n",
"Index: []"
]
},
"execution_count": 74,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"preprocessing_result = pipeline_end.transform(X_test)\n",
"preprocessed_df = pd.DataFrame(\n",
" preprocessing_result,\n",
" columns=pipeline_end.get_feature_names_out(),\n",
")\n",
"\n",
"y_pred = class_models[best_model][\"preds\"]\n",
"\n",
"error_index = y_test[y_test[\"Outcome\"] != y_pred].index.tolist()\n",
"display(f\"Error items count: {len(error_index)}\")\n",
"\n",
"error_predicted = pd.Series(y_pred, index=y_test.index).loc[error_index]\n",
"error_df = X_test.loc[error_index].copy()\n",
"error_df.insert(loc=1, column=\"Predicted\", value=error_predicted)\n",
"error_df.sort_index()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Пример использования обученной модели (конвейера) для предсказания"
]
},
{
"cell_type": "code",
"execution_count": 75,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Pregnancies | \n",
" Glucose | \n",
" BloodPressure | \n",
" SkinThickness | \n",
" Insulin | \n",
" BMI | \n",
" DiabetesPedigreeFunction | \n",
" Age | \n",
" Outcome | \n",
"
\n",
" \n",
" \n",
" \n",
" 555 | \n",
" 7.0 | \n",
" 124.0 | \n",
" 70.0 | \n",
" 33.0 | \n",
" 215.0 | \n",
" 25.5 | \n",
" 0.161 | \n",
" 37.0 | \n",
" 0.0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \\\n",
"555 7.0 124.0 70.0 33.0 215.0 25.5 \n",
"\n",
" DiabetesPedigreeFunction Age Outcome \n",
"555 0.161 37.0 0.0 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Glucose | \n",
" Age | \n",
" BloodPressure | \n",
" Outcome | \n",
" DiabetesPedigreeFunction | \n",
"
\n",
" \n",
" \n",
" \n",
" 555 | \n",
" 0.122742 | \n",
" 0.322537 | \n",
" 0.049921 | \n",
" -0.731437 | \n",
" -0.927636 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Glucose Age BloodPressure Outcome DiabetesPedigreeFunction\n",
"555 0.122742 0.322537 0.049921 -0.731437 -0.927636"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"'predicted: 0 (proba: [0.99431769 0.00568231])'"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"'real: 0'"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"model = class_models[best_model][\"pipeline\"]\n",
"\n",
"example_id = 555\n",
"test = pd.DataFrame(X_test.loc[example_id, :]).T\n",
"test_preprocessed = pd.DataFrame(preprocessed_df.loc[example_id, :]).T\n",
"display(test)\n",
"display(test_preprocessed)\n",
"result_proba = model.predict_proba(test)[0]\n",
"result = model.predict(test)[0]\n",
"real = int(y_test.loc[example_id].values[0])\n",
"display(f\"predicted: {result} (proba: {result_proba})\")\n",
"display(f\"real: {real}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Подбор гиперпараметров методом поиска по сетке"
]
},
{
"cell_type": "code",
"execution_count": 76,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"d:\\5_semester\\AIM\\rep\\AIM-PIbd-31-Razubaev-S-M\\.venv\\Lib\\site-packages\\numpy\\ma\\core.py:2881: RuntimeWarning: invalid value encountered in cast\n",
" _data = np.array(data, dtype=dtype, copy=copy,\n"
]
},
{
"data": {
"text/plain": [
"{'model__criterion': 'gini',\n",
" 'model__max_depth': 5,\n",
" 'model__max_features': 'sqrt',\n",
" 'model__n_estimators': 10}"
]
},
"execution_count": 76,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.model_selection import GridSearchCV\n",
"\n",
"optimized_model_type = \"random_forest\"\n",
"\n",
"random_forest_model = class_models[optimized_model_type][\"pipeline\"]\n",
"\n",
"param_grid = {\n",
" \"model__n_estimators\": [10, 50, 100],\n",
" \"model__max_features\": [\"sqrt\", \"log2\"],\n",
" \"model__max_depth\": [5, 7, 10],\n",
" \"model__criterion\": [\"gini\", \"entropy\"],\n",
"}\n",
"\n",
"gs_optomizer = GridSearchCV(\n",
" estimator=random_forest_model, param_grid=param_grid, n_jobs=-1\n",
")\n",
"gs_optomizer.fit(X_train, y_train.values.ravel())\n",
"gs_optomizer.best_params_"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Обучение модели с новыми гиперпараметрами"
]
},
{
"cell_type": "code",
"execution_count": 77,
"metadata": {},
"outputs": [],
"source": [
"optimized_model = ensemble.RandomForestClassifier(\n",
" random_state=random_state,\n",
" criterion=\"gini\",\n",
" max_depth=5,\n",
" max_features=\"log2\",\n",
" n_estimators=10,\n",
")\n",
"\n",
"result = {}\n",
"\n",
"result[\"pipeline\"] = Pipeline([(\"pipeline\", pipeline_end), (\"model\", optimized_model)]).fit(X_train, y_train.values.ravel())\n",
"result[\"train_preds\"] = result[\"pipeline\"].predict(X_train)\n",
"result[\"probs\"] = result[\"pipeline\"].predict_proba(X_test)[:, 1]\n",
"result[\"preds\"] = np.where(result[\"probs\"] > 0.5, 1, 0)\n",
"\n",
"result[\"Precision_train\"] = metrics.precision_score(y_train, result[\"train_preds\"])\n",
"result[\"Precision_test\"] = metrics.precision_score(y_test, result[\"preds\"])\n",
"result[\"Recall_train\"] = metrics.recall_score(y_train, result[\"train_preds\"])\n",
"result[\"Recall_test\"] = metrics.recall_score(y_test, result[\"preds\"])\n",
"result[\"Accuracy_train\"] = metrics.accuracy_score(y_train, result[\"train_preds\"])\n",
"result[\"Accuracy_test\"] = metrics.accuracy_score(y_test, result[\"preds\"])\n",
"result[\"ROC_AUC_test\"] = metrics.roc_auc_score(y_test, result[\"probs\"])\n",
"result[\"F1_train\"] = metrics.f1_score(y_train, result[\"train_preds\"])\n",
"result[\"F1_test\"] = metrics.f1_score(y_test, result[\"preds\"])\n",
"result[\"MCC_test\"] = metrics.matthews_corrcoef(y_test, result[\"preds\"])\n",
"result[\"Cohen_kappa_test\"] = metrics.cohen_kappa_score(y_test, result[\"preds\"])\n",
"result[\"Confusion_matrix\"] = metrics.confusion_matrix(y_test, result[\"preds\"])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Формирование данных для оценки старой и новой версии модели"
]
},
{
"cell_type": "code",
"execution_count": 78,
"metadata": {},
"outputs": [],
"source": [
"optimized_metrics = pd.DataFrame(columns=list(result.keys()))\n",
"optimized_metrics.loc[len(optimized_metrics)] = pd.Series(\n",
" data=class_models[optimized_model_type]\n",
")\n",
"optimized_metrics.loc[len(optimized_metrics)] = pd.Series(\n",
" data=result\n",
")\n",
"optimized_metrics.insert(loc=0, column=\"Name\", value=[\"Old\", \"New\"])\n",
"optimized_metrics = optimized_metrics.set_index(\"Name\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Оценка параметров старой и новой модели"
]
},
{
"cell_type": "code",
"execution_count": 79,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
" \n",
" \n",
" | \n",
" Precision_train | \n",
" Precision_test | \n",
" Recall_train | \n",
" Recall_test | \n",
" Accuracy_train | \n",
" Accuracy_test | \n",
" F1_train | \n",
" F1_test | \n",
"
\n",
" \n",
" Name | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" Old | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
"
\n",
" \n",
" New | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
"
\n",
" \n",
"
\n"
],
"text/plain": [
""
]
},
"execution_count": 79,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"optimized_metrics[\n",
" [\n",
" \"Precision_train\",\n",
" \"Precision_test\",\n",
" \"Recall_train\",\n",
" \"Recall_test\",\n",
" \"Accuracy_train\",\n",
" \"Accuracy_test\",\n",
" \"F1_train\",\n",
" \"F1_test\",\n",
" ]\n",
"].style.background_gradient(\n",
" cmap=\"plasma\",\n",
" low=0.3,\n",
" high=1,\n",
" subset=[\"Accuracy_train\", \"Accuracy_test\", \"F1_train\", \"F1_test\"],\n",
").background_gradient(\n",
" cmap=\"viridis\",\n",
" low=1,\n",
" high=0.3,\n",
" subset=[\n",
" \"Precision_train\",\n",
" \"Precision_test\",\n",
" \"Recall_train\",\n",
" \"Recall_test\",\n",
" ],\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 80,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
" \n",
" \n",
" | \n",
" Accuracy_test | \n",
" F1_test | \n",
" ROC_AUC_test | \n",
" Cohen_kappa_test | \n",
" MCC_test | \n",
"
\n",
" \n",
" Name | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" Old | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
"
\n",
" \n",
" New | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
" 1.000000 | \n",
"
\n",
" \n",
"
\n"
],
"text/plain": [
""
]
},
"execution_count": 80,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"optimized_metrics[\n",
" [\n",
" \"Accuracy_test\",\n",
" \"F1_test\",\n",
" \"ROC_AUC_test\",\n",
" \"Cohen_kappa_test\",\n",
" \"MCC_test\",\n",
" ]\n",
"].style.background_gradient(\n",
" cmap=\"plasma\",\n",
" low=0.3,\n",
" high=1,\n",
" subset=[\n",
" \"ROC_AUC_test\",\n",
" \"MCC_test\",\n",
" \"Cohen_kappa_test\",\n",
" ],\n",
").background_gradient(\n",
" cmap=\"viridis\",\n",
" low=1,\n",
" high=0.3,\n",
" subset=[\n",
" \"Accuracy_test\",\n",
" \"F1_test\",\n",
" ],\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 81,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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hw763//9XzVo0EDt2rXTyy+/7H197969ys7OVo8ePbznEhIS1LFjR61bty74fykAANsyPdco5gDAJKfXBVhxSEpJSVFCQoL3mDp1arlvuWfPHs2dO1fNmzfXX//6V913330aOXKkXnvtNUlSdna2JCkxMdHnfYmJid7XAACokOG5xjRLAMB5279/v+Lj471fR0ZGlrvG7XarQ4cOevrppyVJ7dq109dff6158+Zp4MCBVdZXAADOxW65xsgcABjE6oXi8fHxPkdFodewYUO1atXK59wll1yiffv2SZKSkpIkSYcPH/a55vDhw97XAACoiOm5RjEHAAiqq6++Wjt27PA5t3PnTjVu3FhS2aLxpKQkrVixwvt6Xl6e1q9fr06dOlVpXwEAOJfqlGtMswQAk3j+c1jRTiWNHj1anTt31tNPP6077rhD//znP/XSSy/ppZdekiS5XC6NGjVKTz75pJo3b660tDRNmDBBycnJ6t27twWdBQA4luG5RjEHAAb55Y5dgbZTWVdccYXee+89jR8/Xk888YTS0tI0a9YsDRgwwHvN2LFjVVBQoHvuuUc5OTm65pprtHz5ckVFRQXcVwCAc5meaxRzAICgu+WWW3TLLbec8XWXy6UnnnhCTzzxRBX2CgCA81Ndco1iDgBMY8V0FAAAqguDc61SxdzSpUsr3eBtt9123p0BAARXKKajVEfkGgA4g+m5VqlirrIL9Vwul0pLSwPpDwAAQUeuAQCcoFLFnNvtDnY/AABVIQS7flVH5BoAOIThuRbQc+YKCwut6gcAoEq4LDych1wDALsxO9f8LuZKS0s1ZcoUNWrUSLGxsdqzZ48kacKECXrllVcs7yAAAMFErgEA7MrvYu6pp55SZmampk+froiICO/5Sy+9VPPnz7e0cwAAi3ksPByCXAMAGzM81/wu5hYuXKiXXnpJAwYMUI0aNbznL7vsMn3zzTeWdg4AgGAj1wAAduX3c+Z++OEHNWvWrNx5t9utkpISSzoFAAgSwxeKV4RcAwAbMzzX/B6Za9WqlVavXl3u/J///Ge1a9fOkk4BAILE47LucAhyDQBszPBc83tkbuLEiRo4cKB++OEHud1u/eUvf9GOHTu0cOFCLVu2LBh9BAAgaMg1AIBd+T0y16tXL33wwQf6+9//rpiYGE2cOFHbt2/XBx98oOuvvz4YfQQAWMTj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9/WTJ09qyJAhiouLU2pqql566SXva927d1dGRoZPe0ePHlVERIRWrFhh7YeGX3JycrR69Wo988wz6tatmxo3bqwrr7xS48eP12233Sap/HSUAwcOqH///qpbt65iYmLUoUMHrV+/vsL2d+/eraZNmyojI0M8OvMcDL+DCVQGuYZzIdeqEcNzjWIOAdm9e7d69uypvn37auvWrXrrrbe0Zs0an/ApKSnRlClTtGXLFi1ZskTfffedBg0aVGF7nTt31qxZsxQfH69Dhw7p0KFDGjNmjPf1GTNmqEOHDtq8ebOGDx+u++67Tzt27JAkDR06VIsXL1ZRUZH3+tdff12NGjVS9+7dg/MXgEqJjY1VbGyslixZ4vPv50zy8/PVtWtX/fDDD1q6dKm2bNmisWPHyu0uv9XU1q1bdc011+jOO+/U888/L5fLii2tAJiKXENlkGuoLphmibNatmyZYmNjfc6VlpZ6/zx16lQNGDBAo0aNkiQ1b95cs2fPVteuXTV37lxFRUVpyJAh3uubNm2q2bNn64orrlB+fn65tiMiIpSQkCCXy1Xh9ISbbrpJw4cPlySNGzdOM2fO1D/+8Q+1aNFCffr0UUZGht5//33dcccdksrWKQwaNIhfhCEWHh6uzMxMDRs2TPPmzVP79u3VtWtX9evXT23atCl3/eLFi3X06FFt2LBBdevWlSQ1a9as3HVr167VLbfcokcffVQPPfRQ0D+HIxj+PB6AXIMVyLVqxPBcY2QOZ9WtWzdlZWX5HPPnz/e+vmXLFmVmZnrvUMXGxio9PV1ut1t79+6VJG3cuFG33nqrUlNTFRcXp65du0qS9u3b53d/fvkL8nQwnp7aEhUVpd/+9rd69dVXJUmbNm3S119/fca7pahaffv21cGDB7V06VL17NlTK1euVPv27ZWZmVnu2qysLLVr184beBXZt2+frr/+ek2cOJHA84fbwgOwIXINViHXqgnDc42ROZxVTExMuTtHBw4c8P45Pz9fv//97zVy5Mhy701NTVVBQYHS09OVnp6uRYsWqX79+tq3b5/S09NVXFzsd39q1qzp87XL5fKZojB06FC1bdtWBw4c0IIFC9S9e3c1btzY7++D4IiKitL111+v66+/XhMmTNDQoUM1adKkcv9jEh0dfc626tevr+TkZL3xxhsaMmSI4uPjg9RrAE5CrsFK5BpCjZE5BKR9+/batm2bmjVrVu6IiIjQN998o2PHjmnatGnq0qWLWrZsecZF4qdFRET4THnxR+vWrdWhQwe9/PLLWrx4sc9UGFQ/rVq18tlU4LQ2bdooKytLx48fP+N7o6OjtWzZMkVFRSk9PV0nTpwIZlcdw/Tn8QDnQq4hEORa1TM91yjmEJBx48Zp7dq1ysjIUFZWlnbt2qX333/fu1A8NTVVEREReu6557Rnzx4tXbpUU6ZMOWubTZo0UX5+vlasWKEff/xRJ0+e9KtPQ4cO1bRp0+TxeHT77bef92eDdY4dO6bu3bvr9ddf19atW7V371698847mj59unr16lXu+v79+yspKUm9e/fW559/rj179ujdd9/VunXrfK6LiYnRhx9+qPDwcN14443Kz8+vqo9kX4bv+gWcC7mGyiDXqhHDc41iDgFp06aNVq1apZ07d6pLly5q166dJk6cqOTkZEllUwYyMzP1zjvvqFWrVpo2bZr+8Ic/nLXNzp07695779VvfvMb1a9fX9OnT/erT/3791d4eLj69++vqKio8/5ssE5sbKw6duyomTNn6tprr9Wll16qCRMmaNiwYXr++efLXR8REaG//e1vatCggW666Sa1bt1a06ZNU40aNSps++OPP5bH49HNN99c4R1RAKgscg2VQa6hunB5eHgFHOa7777TRRddpA0bNqh9+/ah7g5QLeTl5SkhIUE9Lhql8BqRAbd3qrRIf989S7m5uazrAIKMXAPKI9fKsAEKHKOkpETHjh3TY489pquuuorAAypi+BbOgJ2Qa0AlGJ5rTLOEY3z++edq2LChNmzYoHnz5oW6OwAABIRcA3AujMzBMa677joxaxg4F6sWefPfGhBs5BpQGWbnGsUcAJjE8OkoAACHMTzXmGYJAAAAADbEyBwAmMTtkSVTSdz2vIMJAHAYw3ONkTkAAAAAsCFG5gDAJB532WFFOwAAhJrhucbIHOCHQYMGqXfv3t6vr7vuOo0aNarK+7Fy5Uq5XC7l5OSc8RqXy6UlS5ZUus3Jkyerbdu2AfXru+++k8vlUlZWVkDtIIhOLxS34gBge+Ta2ZFrNmB4rlHMwfYGDRokl8sll8uliIgINWvWTE888YROnToV9O/9l7/8RVOmTKnUtZUJKgAAyDUAlcU0SzhCz549tWDBAhUVFemjjz7SiBEjVLNmTY0fP77ctcXFxYqIiLDk+9atW9eSdoAqY/hCccAuyDWgkgzPNUbm4AiRkZFKSkpS48aNdd9996lHjx5aunSppJ+nkDz11FNKTk5WixYtJEn79+/XHXfcodq1a6tu3brq1auXvvvuO2+bpaWlevDBB1W7dm3Vq1dPY8eOLffw1v+ejlJUVKRx48YpJSVFkZGRatasmV555RV999136tatmySpTp06crlcGjRokCTJ7XZr6tSpSktLU3R0tC677DL9+c9/9vk+H330kS6++GJFR0erW7duPv2srHHjxuniiy9WrVq11LRpU02YMEElJSXlrnvxxReVkpKiWrVq6Y477lBubq7P6/Pnz9cll1yiqKgotWzZUi+88ILffUEIGT4dBbALcu3cyDVIMj7XKObgSNHR0SouLvZ+vWLFCu3YsUOffPKJli1bppKSEqWnpysuLk6rV6/W559/rtjYWPXs2dP7vhkzZigzM1Ovvvqq1qxZo+PHj+u999476/f93e9+pzfeeEOzZ8/W9u3b9eKLLyo2NlYpKSl69913JUk7duzQoUOH9Mc//lGSNHXqVC1cuFDz5s3Tv/71L40ePVp33XWXVq1aJaksnPv06aNbb71VWVlZGjp0qB555BG//07i4uKUmZmpbdu26Y9//KNefvllzZw50+eab7/9Vm+//bY++OADLV++XJs3b9bw4cO9ry9atEgTJ07UU089pe3bt+vpp5/WhAkT9Nprr/ndHwBA5ZFr5ZFrANMs4TAej0crVqzQX//6V91///3e8zExMZo/f753Gsrrr78ut9ut+fPny+VySZIWLFig2rVra+XKlbrhhhs0a9YsjR8/Xn369JEkzZs3T3/961/P+L137typt99+W5988ol69OghSWratKn39dNTVxo0aKDatWtLKrvj+fTTT+vvf/+7OnXq5H3PmjVr9OKLL6pr166aO3euLrroIs2YMUOS1KJFC3311Vd65pln/Pq7eeyxx7x/btKkicaMGaM333xTY8eO9Z4vLCzUwoUL1ahRI0nSc889p5tvvlkzZsxQUlKSJk2apBkzZnj/TtLS0rRt2za9+OKLGjhwoF/9QYh4ZM3dR3vewARsh1w7M3INkozPNYo5OMKyZcsUGxurkpISud1u3XnnnZo8ebL39datW/usJ9iyZYu+/fZbxcXF+bRTWFio3bt3Kzc3V4cO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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"_, ax = plt.subplots(1, 2, figsize=(10, 4), sharex=False, sharey=False\n",
")\n",
"\n",
"for index in range(0, len(optimized_metrics)):\n",
" c_matrix = optimized_metrics.iloc[index][\"Confusion_matrix\"]\n",
" disp = ConfusionMatrixDisplay(\n",
" confusion_matrix=c_matrix, display_labels=[\"Healthy\", \"Sick\"]\n",
" ).plot(ax=ax.flat[index])\n",
"\n",
"plt.subplots_adjust(top=1, bottom=0, hspace=0.4, wspace=0.3)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Регрессионная модель"
]
},
{
"cell_type": "code",
"execution_count": 82,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Index(['Pregnancies', 'Glucose', 'BloodPressure', 'SkinThickness', 'Insulin',\n",
" 'BMI', 'DiabetesPedigreeFunction', 'Age', 'Outcome'],\n",
" dtype='object')\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Pregnancies | \n",
" Glucose | \n",
" BloodPressure | \n",
" SkinThickness | \n",
" Insulin | \n",
" BMI | \n",
" DiabetesPedigreeFunction | \n",
" Age | \n",
" Outcome | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 6 | \n",
" 148 | \n",
" 72 | \n",
" 35 | \n",
" 0 | \n",
" 33.6 | \n",
" 0.627 | \n",
" 50 | \n",
" 1 | \n",
"
\n",
" \n",
" 1 | \n",
" 1 | \n",
" 85 | \n",
" 66 | \n",
" 29 | \n",
" 0 | \n",
" 26.6 | \n",
" 0.351 | \n",
" 31 | \n",
" 0 | \n",
"
\n",
" \n",
" 2 | \n",
" 8 | \n",
" 183 | \n",
" 64 | \n",
" 0 | \n",
" 0 | \n",
" 23.3 | \n",
" 0.672 | \n",
" 32 | \n",
" 1 | \n",
"
\n",
" \n",
" 3 | \n",
" 1 | \n",
" 89 | \n",
" 66 | \n",
" 23 | \n",
" 94 | \n",
" 28.1 | \n",
" 0.167 | \n",
" 21 | \n",
" 0 | \n",
"
\n",
" \n",
" 4 | \n",
" 0 | \n",
" 137 | \n",
" 40 | \n",
" 35 | \n",
" 168 | \n",
" 43.1 | \n",
" 2.288 | \n",
" 33 | \n",
" 1 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 763 | \n",
" 10 | \n",
" 101 | \n",
" 76 | \n",
" 48 | \n",
" 180 | \n",
" 32.9 | \n",
" 0.171 | \n",
" 63 | \n",
" 0 | \n",
"
\n",
" \n",
" 764 | \n",
" 2 | \n",
" 122 | \n",
" 70 | \n",
" 27 | \n",
" 0 | \n",
" 36.8 | \n",
" 0.340 | \n",
" 27 | \n",
" 0 | \n",
"
\n",
" \n",
" 765 | \n",
" 5 | \n",
" 121 | \n",
" 72 | \n",
" 23 | \n",
" 112 | \n",
" 26.2 | \n",
" 0.245 | \n",
" 30 | \n",
" 0 | \n",
"
\n",
" \n",
" 766 | \n",
" 1 | \n",
" 126 | \n",
" 60 | \n",
" 0 | \n",
" 0 | \n",
" 30.1 | \n",
" 0.349 | \n",
" 47 | \n",
" 1 | \n",
"
\n",
" \n",
" 767 | \n",
" 1 | \n",
" 93 | \n",
" 70 | \n",
" 31 | \n",
" 0 | \n",
" 30.4 | \n",
" 0.315 | \n",
" 23 | \n",
" 0 | \n",
"
\n",
" \n",
"
\n",
"
768 rows × 9 columns
\n",
"
"
],
"text/plain": [
" Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \\\n",
"0 6 148 72 35 0 33.6 \n",
"1 1 85 66 29 0 26.6 \n",
"2 8 183 64 0 0 23.3 \n",
"3 1 89 66 23 94 28.1 \n",
"4 0 137 40 35 168 43.1 \n",
".. ... ... ... ... ... ... \n",
"763 10 101 76 48 180 32.9 \n",
"764 2 122 70 27 0 36.8 \n",
"765 5 121 72 23 112 26.2 \n",
"766 1 126 60 0 0 30.1 \n",
"767 1 93 70 31 0 30.4 \n",
"\n",
" DiabetesPedigreeFunction Age Outcome \n",
"0 0.627 50 1 \n",
"1 0.351 31 0 \n",
"2 0.672 32 1 \n",
"3 0.167 21 0 \n",
"4 2.288 33 1 \n",
".. ... ... ... \n",
"763 0.171 63 0 \n",
"764 0.340 27 0 \n",
"765 0.245 30 0 \n",
"766 0.349 47 1 \n",
"767 0.315 23 0 \n",
"\n",
"[768 rows x 9 columns]"
]
},
"execution_count": 82,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn import set_config\n",
"\n",
"random_state=9\n",
"set_config(transform_output=\"pandas\")\n",
"df = pd.read_csv(\".//scv//diabetes.csv\")\n",
"print(df.columns)\n",
"df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Разделение набора данных на обучающую и тестовые выборки"
]
},
{
"cell_type": "code",
"execution_count": 83,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'X_train'"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Pregnancies | \n",
" Glucose | \n",
" BloodPressure | \n",
" SkinThickness | \n",
" Insulin | \n",
" BMI | \n",
" DiabetesPedigreeFunction | \n",
" Age | \n",
"
\n",
" \n",
" \n",
" \n",
" 60 | \n",
" 2 | \n",
" 84 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0.0 | \n",
" 0.304 | \n",
" 21 | \n",
"
\n",
" \n",
" 618 | \n",
" 9 | \n",
" 112 | \n",
" 82 | \n",
" 24 | \n",
" 0 | \n",
" 28.2 | \n",
" 1.282 | \n",
" 50 | \n",
"
\n",
" \n",
" 346 | \n",
" 1 | \n",
" 139 | \n",
" 46 | \n",
" 19 | \n",
" 83 | \n",
" 28.7 | \n",
" 0.654 | \n",
" 22 | \n",
"
\n",
" \n",
" 294 | \n",
" 0 | \n",
" 161 | \n",
" 50 | \n",
" 0 | \n",
" 0 | \n",
" 21.9 | \n",
" 0.254 | \n",
" 65 | \n",
"
\n",
" \n",
" 231 | \n",
" 6 | \n",
" 134 | \n",
" 80 | \n",
" 37 | \n",
" 370 | \n",
" 46.2 | \n",
" 0.238 | \n",
" 46 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 71 | \n",
" 5 | \n",
" 139 | \n",
" 64 | \n",
" 35 | \n",
" 140 | \n",
" 28.6 | \n",
" 0.411 | \n",
" 26 | \n",
"
\n",
" \n",
" 106 | \n",
" 1 | \n",
" 96 | \n",
" 122 | \n",
" 0 | \n",
" 0 | \n",
" 22.4 | \n",
" 0.207 | \n",
" 27 | \n",
"
\n",
" \n",
" 270 | \n",
" 10 | \n",
" 101 | \n",
" 86 | \n",
" 37 | \n",
" 0 | \n",
" 45.6 | \n",
" 1.136 | \n",
" 38 | \n",
"
\n",
" \n",
" 435 | \n",
" 0 | \n",
" 141 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 42.4 | \n",
" 0.205 | \n",
" 29 | \n",
"
\n",
" \n",
" 102 | \n",
" 0 | \n",
" 125 | \n",
" 96 | \n",
" 0 | \n",
" 0 | \n",
" 22.5 | \n",
" 0.262 | \n",
" 21 | \n",
"
\n",
" \n",
"
\n",
"
614 rows × 8 columns
\n",
"
"
],
"text/plain": [
" Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \\\n",
"60 2 84 0 0 0 0.0 \n",
"618 9 112 82 24 0 28.2 \n",
"346 1 139 46 19 83 28.7 \n",
"294 0 161 50 0 0 21.9 \n",
"231 6 134 80 37 370 46.2 \n",
".. ... ... ... ... ... ... \n",
"71 5 139 64 35 140 28.6 \n",
"106 1 96 122 0 0 22.4 \n",
"270 10 101 86 37 0 45.6 \n",
"435 0 141 0 0 0 42.4 \n",
"102 0 125 96 0 0 22.5 \n",
"\n",
" DiabetesPedigreeFunction Age \n",
"60 0.304 21 \n",
"618 1.282 50 \n",
"346 0.654 22 \n",
"294 0.254 65 \n",
"231 0.238 46 \n",
".. ... ... \n",
"71 0.411 26 \n",
"106 0.207 27 \n",
"270 1.136 38 \n",
"435 0.205 29 \n",
"102 0.262 21 \n",
"\n",
"[614 rows x 8 columns]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"'y_train'"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Outcome | \n",
"
\n",
" \n",
" \n",
" \n",
" 60 | \n",
" 0 | \n",
"
\n",
" \n",
" 618 | \n",
" 1 | \n",
"
\n",
" \n",
" 346 | \n",
" 0 | \n",
"
\n",
" \n",
" 294 | \n",
" 0 | \n",
"
\n",
" \n",
" 231 | \n",
" 1 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 71 | \n",
" 0 | \n",
"
\n",
" \n",
" 106 | \n",
" 0 | \n",
"
\n",
" \n",
" 270 | \n",
" 1 | \n",
"
\n",
" \n",
" 435 | \n",
" 1 | \n",
"
\n",
" \n",
" 102 | \n",
" 0 | \n",
"
\n",
" \n",
"
\n",
"
614 rows × 1 columns
\n",
"
"
],
"text/plain": [
" Outcome\n",
"60 0\n",
"618 1\n",
"346 0\n",
"294 0\n",
"231 1\n",
".. ...\n",
"71 0\n",
"106 0\n",
"270 1\n",
"435 1\n",
"102 0\n",
"\n",
"[614 rows x 1 columns]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"'X_test'"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Pregnancies | \n",
" Glucose | \n",
" BloodPressure | \n",
" SkinThickness | \n",
" Insulin | \n",
" BMI | \n",
" DiabetesPedigreeFunction | \n",
" Age | \n",
"
\n",
" \n",
" \n",
" \n",
" 668 | \n",
" 6 | \n",
" 98 | \n",
" 58 | \n",
" 33 | \n",
" 190 | \n",
" 34.0 | \n",
" 0.430 | \n",
" 43 | \n",
"
\n",
" \n",
" 324 | \n",
" 2 | \n",
" 112 | \n",
" 75 | \n",
" 32 | \n",
" 0 | \n",
" 35.7 | \n",
" 0.148 | \n",
" 21 | \n",
"
\n",
" \n",
" 624 | \n",
" 2 | \n",
" 108 | \n",
" 64 | \n",
" 0 | \n",
" 0 | \n",
" 30.8 | \n",
" 0.158 | \n",
" 21 | \n",
"
\n",
" \n",
" 690 | \n",
" 8 | \n",
" 107 | \n",
" 80 | \n",
" 0 | \n",
" 0 | \n",
" 24.6 | \n",
" 0.856 | \n",
" 34 | \n",
"
\n",
" \n",
" 473 | \n",
" 7 | \n",
" 136 | \n",
" 90 | \n",
" 0 | \n",
" 0 | \n",
" 29.9 | \n",
" 0.210 | \n",
" 50 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 355 | \n",
" 9 | \n",
" 165 | \n",
" 88 | \n",
" 0 | \n",
" 0 | \n",
" 30.4 | \n",
" 0.302 | \n",
" 49 | \n",
"
\n",
" \n",
" 534 | \n",
" 1 | \n",
" 77 | \n",
" 56 | \n",
" 30 | \n",
" 56 | \n",
" 33.3 | \n",
" 1.251 | \n",
" 24 | \n",
"
\n",
" \n",
" 344 | \n",
" 8 | \n",
" 95 | \n",
" 72 | \n",
" 0 | \n",
" 0 | \n",
" 36.8 | \n",
" 0.485 | \n",
" 57 | \n",
"
\n",
" \n",
" 296 | \n",
" 2 | \n",
" 146 | \n",
" 70 | \n",
" 38 | \n",
" 360 | \n",
" 28.0 | \n",
" 0.337 | \n",
" 29 | \n",
"
\n",
" \n",
" 462 | \n",
" 8 | \n",
" 74 | \n",
" 70 | \n",
" 40 | \n",
" 49 | \n",
" 35.3 | \n",
" 0.705 | \n",
" 39 | \n",
"
\n",
" \n",
"
\n",
"
154 rows × 8 columns
\n",
"
"
],
"text/plain": [
" Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \\\n",
"668 6 98 58 33 190 34.0 \n",
"324 2 112 75 32 0 35.7 \n",
"624 2 108 64 0 0 30.8 \n",
"690 8 107 80 0 0 24.6 \n",
"473 7 136 90 0 0 29.9 \n",
".. ... ... ... ... ... ... \n",
"355 9 165 88 0 0 30.4 \n",
"534 1 77 56 30 56 33.3 \n",
"344 8 95 72 0 0 36.8 \n",
"296 2 146 70 38 360 28.0 \n",
"462 8 74 70 40 49 35.3 \n",
"\n",
" DiabetesPedigreeFunction Age \n",
"668 0.430 43 \n",
"324 0.148 21 \n",
"624 0.158 21 \n",
"690 0.856 34 \n",
"473 0.210 50 \n",
".. ... ... \n",
"355 0.302 49 \n",
"534 1.251 24 \n",
"344 0.485 57 \n",
"296 0.337 29 \n",
"462 0.705 39 \n",
"\n",
"[154 rows x 8 columns]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"'y_test'"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Outcome | \n",
"
\n",
" \n",
" \n",
" \n",
" 668 | \n",
" 0 | \n",
"
\n",
" \n",
" 324 | \n",
" 0 | \n",
"
\n",
" \n",
" 624 | \n",
" 0 | \n",
"
\n",
" \n",
" 690 | \n",
" 0 | \n",
"
\n",
" \n",
" 473 | \n",
" 0 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 355 | \n",
" 1 | \n",
"
\n",
" \n",
" 534 | \n",
" 0 | \n",
"
\n",
" \n",
" 344 | \n",
" 0 | \n",
"
\n",
" \n",
" 296 | \n",
" 1 | \n",
"
\n",
" \n",
" 462 | \n",
" 0 | \n",
"
\n",
" \n",
"
\n",
"
154 rows × 1 columns
\n",
"
"
],
"text/plain": [
" Outcome\n",
"668 0\n",
"324 0\n",
"624 0\n",
"690 0\n",
"473 0\n",
".. ...\n",
"355 1\n",
"534 0\n",
"344 0\n",
"296 1\n",
"462 0\n",
"\n",
"[154 rows x 1 columns]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from typing import Tuple\n",
"import pandas as pd\n",
"from pandas import DataFrame\n",
"from sklearn.model_selection import train_test_split\n",
"\n",
"def split_into_train_test(\n",
" df_input: DataFrame,\n",
" target_colname: str = \"above_average_close\",\n",
" frac_train: float = 0.8,\n",
" random_state: int = None,\n",
") -> Tuple[DataFrame, DataFrame, DataFrame, DataFrame]:\n",
" \n",
" if not (0 < frac_train < 1):\n",
" raise ValueError(\"Fraction must be between 0 and 1.\")\n",
" \n",
" # Проверка наличия целевого признака\n",
" if target_colname not in df_input.columns:\n",
" raise ValueError(f\"{target_colname} is not a column in the DataFrame.\")\n",
" \n",
" # Разделяем данные на признаки и целевую переменную\n",
" X = df_input.drop(columns=[target_colname]) # Признаки\n",
" y = df_input[[target_colname]] # Целевая переменная\n",
"\n",
" # Разделяем данные на обучающую и тестовую выборки\n",
" X_train, X_test, y_train, y_test = train_test_split(\n",
" X, y,\n",
" test_size=(1.0 - frac_train),\n",
" random_state=random_state\n",
" )\n",
" \n",
" return X_train, X_test, y_train, y_test\n",
"\n",
"# Применение функции для разделения данных\n",
"X_train, X_test, y_train, y_test = split_into_train_test(\n",
" df, \n",
" target_colname=\"Outcome\", \n",
" frac_train=0.8, \n",
" random_state=42 # Убедитесь, что вы задали нужное значение random_state\n",
")\n",
"\n",
"# Для отображения результатов\n",
"display(\"X_train\", X_train)\n",
"display(\"y_train\", y_train)\n",
"\n",
"display(\"X_test\", X_test)\n",
"display(\"y_test\", y_test)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Определение перечня алгоритмов решения задачи аппроксимации (регрессии)"
]
},
{
"cell_type": "code",
"execution_count": 84,
"metadata": {},
"outputs": [],
"source": [
"\n",
"\n",
"from sklearn.pipeline import make_pipeline\n",
"from sklearn.preprocessing import PolynomialFeatures\n",
"from sklearn import linear_model, tree, neighbors, ensemble, neural_network\n",
"\n",
"random_state = 9\n",
"\n",
"models = {\n",
" \"linear\": {\"model\": linear_model.LinearRegression(n_jobs=-1)},\n",
" \"linear_poly\": {\n",
" \"model\": make_pipeline(\n",
" PolynomialFeatures(degree=2),\n",
" linear_model.LinearRegression(fit_intercept=False, n_jobs=-1),\n",
" )\n",
" },\n",
" \"linear_interact\": {\n",
" \"model\": make_pipeline(\n",
" PolynomialFeatures(interaction_only=True),\n",
" linear_model.LinearRegression(fit_intercept=False, n_jobs=-1),\n",
" )\n",
" },\n",
" \"ridge\": {\"model\": linear_model.RidgeCV()},\n",
" \"decision_tree\": {\n",
" \"model\": tree.DecisionTreeRegressor(max_depth=7, random_state=random_state)\n",
" },\n",
" \"knn\": {\"model\": neighbors.KNeighborsRegressor(n_neighbors=7, n_jobs=-1)},\n",
" \"random_forest\": {\n",
" \"model\": ensemble.RandomForestRegressor(\n",
" max_depth=7, random_state=random_state, n_jobs=-1\n",
" )\n",
" },\n",
" \"mlp\": {\n",
" \"model\": neural_network.MLPRegressor(\n",
" activation=\"tanh\",\n",
" hidden_layer_sizes=(3,),\n",
" max_iter=500,\n",
" early_stopping=True,\n",
" random_state=random_state,\n",
" )\n",
" },\n",
"}\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 85,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Model: linear\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Model: linear_poly\n",
"Model: linear_interact\n",
"Model: ridge\n",
"Model: decision_tree\n",
"Model: knn\n",
"Model: random_forest\n",
"Model: mlp\n"
]
}
],
"source": [
"import math\n",
"from pandas import DataFrame\n",
"from sklearn import metrics\n",
"\n",
"for model_name in models.keys():\n",
" print(f\"Model: {model_name}\")\n",
"\n",
" fitted_model = models[model_name][\"model\"].fit(\n",
" X_train.values, y_train.values.ravel()\n",
" )\n",
" y_train_pred = fitted_model.predict(X_train.values)\n",
" y_test_pred = fitted_model.predict(X_test.values)\n",
" models[model_name][\"fitted\"] = fitted_model\n",
" models[model_name][\"train_preds\"] = y_train_pred\n",
" models[model_name][\"preds\"] = y_test_pred\n",
" models[model_name][\"RMSE_train\"] = math.sqrt(\n",
" metrics.mean_squared_error(y_train, y_train_pred)\n",
" )\n",
" models[model_name][\"RMSE_test\"] = math.sqrt(\n",
" metrics.mean_squared_error(y_test, y_test_pred)\n",
" )\n",
" models[model_name][\"RMAE_test\"] = math.sqrt(\n",
" metrics.mean_absolute_error(y_test, y_test_pred)\n",
" )\n",
" models[model_name][\"R2_test\"] = metrics.r2_score(y_test, y_test_pred)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Вывод результатов оценки"
]
},
{
"cell_type": "code",
"execution_count": 86,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
" \n",
" \n",
" | \n",
" RMSE_train | \n",
" RMSE_test | \n",
" RMAE_test | \n",
" R2_test | \n",
"
\n",
" \n",
" \n",
" \n",
" random_forest | \n",
" 0.240052 | \n",
" 0.405871 | \n",
" 0.559210 | \n",
" 0.282505 | \n",
"
\n",
" \n",
" linear | \n",
" 0.396793 | \n",
" 0.413576 | \n",
" 0.590024 | \n",
" 0.255003 | \n",
"
\n",
" \n",
" ridge | \n",
" 0.396822 | \n",
" 0.414236 | \n",
" 0.590431 | \n",
" 0.252623 | \n",
"
\n",
" \n",
" linear_poly | \n",
" 0.370076 | \n",
" 0.422852 | \n",
" 0.584147 | \n",
" 0.221209 | \n",
"
\n",
" \n",
" linear_interact | \n",
" 0.380128 | \n",
" 0.426815 | \n",
" 0.593532 | \n",
" 0.206543 | \n",
"
\n",
" \n",
" decision_tree | \n",
" 0.249880 | \n",
" 0.445708 | \n",
" 0.520376 | \n",
" 0.134743 | \n",
"
\n",
" \n",
" knn | \n",
" 0.373319 | \n",
" 0.450285 | \n",
" 0.592157 | \n",
" 0.116883 | \n",
"
\n",
" \n",
" mlp | \n",
" 0.623529 | \n",
" 0.544323 | \n",
" 0.658689 | \n",
" -0.290498 | \n",
"
\n",
" \n",
"
\n"
],
"text/plain": [
""
]
},
"execution_count": 86,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"reg_metrics = pd.DataFrame.from_dict(models, \"index\")[\n",
" [\"RMSE_train\", \"RMSE_test\", \"RMAE_test\", \"R2_test\"]\n",
"]\n",
"reg_metrics.sort_values(by=\"RMSE_test\").style.background_gradient(\n",
" cmap=\"viridis\", low=1, high=0.3, subset=[\"RMSE_train\", \"RMSE_test\"]\n",
").background_gradient(cmap=\"plasma\", low=0.3, high=1, subset=[\"RMAE_test\", \"R2_test\"])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"Вывод реального и \"спрогнозированного\" результата для обучающей и тестовой выборок\n",
"\n",
"Получение лучшей модели\n"
]
},
{
"cell_type": "code",
"execution_count": 87,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'random_forest'"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"best_model = str(reg_metrics.sort_values(by=\"RMSE_test\").iloc[0].name)\n",
"\n",
"display(best_model)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Вывод для обучающей выборки"
]
},
{
"cell_type": "code",
"execution_count": 88,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Pregnancies | \n",
" Glucose | \n",
" BloodPressure | \n",
" SkinThickness | \n",
" Insulin | \n",
" BMI | \n",
" DiabetesPedigreeFunction | \n",
" Age | \n",
" Outcome | \n",
" DiabetPred | \n",
"
\n",
" \n",
" \n",
" \n",
" 60 | \n",
" 2 | \n",
" 84 | \n",
" 0 | \n",
" 0 | \n",
" 0 | \n",
" 0.0 | \n",
" 0.304 | \n",
" 21 | \n",
" 0 | \n",
" 0.001849 | \n",
"
\n",
" \n",
" 618 | \n",
" 9 | \n",
" 112 | \n",
" 82 | \n",
" 24 | \n",
" 0 | \n",
" 28.2 | \n",
" 1.282 | \n",
" 50 | \n",
" 1 | \n",
" 0.758997 | \n",
"
\n",
" \n",
" 346 | \n",
" 1 | \n",
" 139 | \n",
" 46 | \n",
" 19 | \n",
" 83 | \n",
" 28.7 | \n",
" 0.654 | \n",
" 22 | \n",
" 0 | \n",
" 0.149231 | \n",
"
\n",
" \n",
" 294 | \n",
" 0 | \n",
" 161 | \n",
" 50 | \n",
" 0 | \n",
" 0 | \n",
" 21.9 | \n",
" 0.254 | \n",
" 65 | \n",
" 0 | \n",
" 0.239564 | \n",
"
\n",
" \n",
" 231 | \n",
" 6 | \n",
" 134 | \n",
" 80 | \n",
" 37 | \n",
" 370 | \n",
" 46.2 | \n",
" 0.238 | \n",
" 46 | \n",
" 1 | \n",
" 0.773890 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \\\n",
"60 2 84 0 0 0 0.0 \n",
"618 9 112 82 24 0 28.2 \n",
"346 1 139 46 19 83 28.7 \n",
"294 0 161 50 0 0 21.9 \n",
"231 6 134 80 37 370 46.2 \n",
"\n",
" DiabetesPedigreeFunction Age Outcome DiabetPred \n",
"60 0.304 21 0 0.001849 \n",
"618 1.282 50 1 0.758997 \n",
"346 0.654 22 0 0.149231 \n",
"294 0.254 65 0 0.239564 \n",
"231 0.238 46 1 0.773890 "
]
},
"execution_count": 88,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.concat(\n",
" [\n",
" X_train,\n",
" y_train,\n",
" pd.Series(\n",
" models[best_model][\"train_preds\"],\n",
" index=y_train.index,\n",
" name=\"DiabetPred\",\n",
" ),\n",
" ],\n",
" axis=1,\n",
").head(5)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Вывод для тестовой выборки"
]
},
{
"cell_type": "code",
"execution_count": 89,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Pregnancies | \n",
" Glucose | \n",
" BloodPressure | \n",
" SkinThickness | \n",
" Insulin | \n",
" BMI | \n",
" DiabetesPedigreeFunction | \n",
" Age | \n",
" Outcome | \n",
" DiabetPred | \n",
"
\n",
" \n",
" \n",
" \n",
" 668 | \n",
" 6 | \n",
" 98 | \n",
" 58 | \n",
" 33 | \n",
" 190 | \n",
" 34.0 | \n",
" 0.430 | \n",
" 43 | \n",
" 0 | \n",
" 0.516537 | \n",
"
\n",
" \n",
" 324 | \n",
" 2 | \n",
" 112 | \n",
" 75 | \n",
" 32 | \n",
" 0 | \n",
" 35.7 | \n",
" 0.148 | \n",
" 21 | \n",
" 0 | \n",
" 0.205507 | \n",
"
\n",
" \n",
" 624 | \n",
" 2 | \n",
" 108 | \n",
" 64 | \n",
" 0 | \n",
" 0 | \n",
" 30.8 | \n",
" 0.158 | \n",
" 21 | \n",
" 0 | \n",
" 0.047710 | \n",
"
\n",
" \n",
" 690 | \n",
" 8 | \n",
" 107 | \n",
" 80 | \n",
" 0 | \n",
" 0 | \n",
" 24.6 | \n",
" 0.856 | \n",
" 34 | \n",
" 0 | \n",
" 0.128867 | \n",
"
\n",
" \n",
" 473 | \n",
" 7 | \n",
" 136 | \n",
" 90 | \n",
" 0 | \n",
" 0 | \n",
" 29.9 | \n",
" 0.210 | \n",
" 50 | \n",
" 0 | \n",
" 0.438512 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \\\n",
"668 6 98 58 33 190 34.0 \n",
"324 2 112 75 32 0 35.7 \n",
"624 2 108 64 0 0 30.8 \n",
"690 8 107 80 0 0 24.6 \n",
"473 7 136 90 0 0 29.9 \n",
"\n",
" DiabetesPedigreeFunction Age Outcome DiabetPred \n",
"668 0.430 43 0 0.516537 \n",
"324 0.148 21 0 0.205507 \n",
"624 0.158 21 0 0.047710 \n",
"690 0.856 34 0 0.128867 \n",
"473 0.210 50 0 0.438512 "
]
},
"execution_count": 89,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.concat(\n",
" [\n",
" X_test,\n",
" y_test,\n",
" pd.Series(\n",
" models[best_model][\"preds\"],\n",
" index=y_test.index,\n",
" name=\"DiabetPred\",\n",
" ),\n",
" ],\n",
" axis=1,\n",
").head(5)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": ".venv",
"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.6"
}
},
"nbformat": 4,
"nbformat_minor": 2
}