From 1c2c69da78b971b71722f609975eb40b0493ead9 Mon Sep 17 00:00:00 2001 From: Stepan Date: Sat, 16 Nov 2024 00:44:40 +0400 Subject: [PATCH] =?UTF-8?q?=D0=BD=D0=B0=D0=B4=D0=BE=20=D0=B4=D0=BE=D0=B4?= =?UTF-8?q?=D0=B5=D0=BB=D0=B0=D1=82=D1=8C=204=20=D0=BB=D0=B0=D0=B1=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lab_4/lab4.ipynb | 2893 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 2893 insertions(+) create mode 100644 lab_4/lab4.ipynb diff --git a/lab_4/lab4.ipynb b/lab_4/lab4.ipynb new file mode 100644 index 0000000..a222bf1 --- /dev/null +++ b/lab_4/lab4.ipynb @@ -0,0 +1,2893 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Начало лабораторной работы" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*Вариант 3:* Диабет у индейцев Пима " + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PregnanciesGlucoseBloodPressureSkinThicknessInsulinBMIDiabetesPedigreeFunctionAgeOutcome
061487235033.60.627501
11856629026.60.351310
28183640023.30.672321
318966239428.10.167210
40137403516843.12.288331
..............................
76310101764818032.90.171630
76421227027036.80.340270
7655121722311226.20.245300
7661126600030.10.349471
7671937031030.40.315230
\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": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "from sklearn import set_config\n", + "\n", + "# Установим параметры для вывода\n", + "set_config(transform_output=\"pandas\")\n", + "\n", + "random_state = 42\n", + "\n", + "# Подключим датафрейм и выгрузим данные\n", + "df = pd.read_csv(\"C:/Users/TIGR228/Desktop/МИИ/Lab1/AIM-PIbd-31-Afanasev-S-S/static/csv/diabetes.csv\")\n", + "print(df.columns)\n", + "df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Бизнес-цели:\n", + "\n", + "1. Прогнозирование риска развития диабета\n", + "\n", + "Описание: Классифицировать пациентов на основе их медицинских данных для определения риска развития диабета (используя целевой признак \"Outcome\"). Эта задача актуальна для раннего выявления диабета и разработки профилактических мер, направленных на улучшение здоровья населения.\n", + "\n", + "2. Оценка факторов, влияющих на развитие диабета\n", + "\n", + "Описание: Предсказать вероятность развития диабета у новых пациентов на основе их медицинских характеристик (таких как уровень глюкозы, артериальное давление, индекс массы тела и другие параметры). Это позволит медицинским специалистам планировать лечение и наблюдение в зависимости от индивидуальных рисков пациентов. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Определение достижимого уровня качества модели для первой задачи " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Разделение набора данных на обучающую и тестовые выборки (80/20) для задачи классификации\n", + "Целевой признак -- Outcome" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'X_train'" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PregnanciesGlucoseBloodPressureSkinThicknessInsulinBMIDiabetesPedigreeFunctionAgeOutcome
35319062124327.20.580240
711512678272229.60.439400
373210558409434.90.225250
461146560029.70.564290
682095643910544.60.366220
..............................
4512134700028.90.542231
113476620034.00.391250
5561977040038.10.218300
667101117027027.50.141401
1074144582814029.50.287370
\n", + "

614 rows × 9 columns

\n", + "
" + ], + "text/plain": [ + " Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \\\n", + "353 1 90 62 12 43 27.2 \n", + "711 5 126 78 27 22 29.6 \n", + "373 2 105 58 40 94 34.9 \n", + "46 1 146 56 0 0 29.7 \n", + "682 0 95 64 39 105 44.6 \n", + ".. ... ... ... ... ... ... \n", + "451 2 134 70 0 0 28.9 \n", + "113 4 76 62 0 0 34.0 \n", + "556 1 97 70 40 0 38.1 \n", + "667 10 111 70 27 0 27.5 \n", + "107 4 144 58 28 140 29.5 \n", + "\n", + " DiabetesPedigreeFunction Age Outcome \n", + "353 0.580 24 0 \n", + "711 0.439 40 0 \n", + "373 0.225 25 0 \n", + "46 0.564 29 0 \n", + "682 0.366 22 0 \n", + ".. ... ... ... \n", + "451 0.542 23 1 \n", + "113 0.391 25 0 \n", + "556 0.218 30 0 \n", + "667 0.141 40 1 \n", + "107 0.287 37 0 \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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Outcome
3530
7110
3730
460
6820
......
4511
1130
5560
6671
1070
\n", + "

614 rows × 1 columns

\n", + "
" + ], + "text/plain": [ + " Outcome\n", + "353 0\n", + "711 0\n", + "373 0\n", + "46 0\n", + "682 0\n", + ".. ...\n", + "451 1\n", + "113 0\n", + "556 0\n", + "667 1\n", + "107 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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PregnanciesGlucoseBloodPressureSkinThicknessInsulinBMIDiabetesPedigreeFunctionAgeOutcome
447159640027.40.294400
6721068106234935.50.285470
7002122762720035.90.483260
6307114640027.40.732341
812740000.00.102220
..............................
3238858115424.80.267220
63729476186631.60.649230
593282522211528.51.699250
4254184783927737.00.264311
27317178504533.20.422210
\n", + "

154 rows × 9 columns

\n", + "
" + ], + "text/plain": [ + " Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \\\n", + "44 7 159 64 0 0 27.4 \n", + "672 10 68 106 23 49 35.5 \n", + "700 2 122 76 27 200 35.9 \n", + "630 7 114 64 0 0 27.4 \n", + "81 2 74 0 0 0 0.0 \n", + ".. ... ... ... ... ... ... \n", + "32 3 88 58 11 54 24.8 \n", + "637 2 94 76 18 66 31.6 \n", + "593 2 82 52 22 115 28.5 \n", + "425 4 184 78 39 277 37.0 \n", + "273 1 71 78 50 45 33.2 \n", + "\n", + " DiabetesPedigreeFunction Age Outcome \n", + "44 0.294 40 0 \n", + "672 0.285 47 0 \n", + "700 0.483 26 0 \n", + "630 0.732 34 1 \n", + "81 0.102 22 0 \n", + ".. ... ... ... \n", + "32 0.267 22 0 \n", + "637 0.649 23 0 \n", + "593 1.699 25 0 \n", + "425 0.264 31 1 \n", + "273 0.422 21 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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Outcome
440
6720
7000
6301
810
......
320
6370
5930
4251
2730
\n", + "

154 rows × 1 columns

\n", + "
" + ], + "text/plain": [ + " Outcome\n", + "44 0\n", + "672 0\n", + "700 0\n", + "630 1\n", + "81 0\n", + ".. ...\n", + "32 0\n", + "637 0\n", + "593 0\n", + "425 1\n", + "273 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", + "random_state = 42\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=random_state\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": [ + "#### Формирование конвейера для классификации данных\n", + "preprocessing_num -- конвейер для обработки числовых данных: заполнение пропущенных значений и стандартизация\n", + "\n", + "preprocessing_cat -- конвейер для обработки категориальных данных: заполнение пропущенных данных и унитарное кодирование\n", + "\n", + "features_preprocessing -- трансформер для предобработки признаков\n", + "\n", + "features_engineering -- трансформер для конструирования признаков\n", + "\n", + "drop_columns -- трансформер для удаления колонок\n", + "\n", + "pipeline_end -- основной конвейер предобработки данных и конструирования признаков" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "from sklearn.base import BaseEstimator, TransformerMixin\n", + "from sklearn.compose import ColumnTransformer\n", + "from sklearn.impute import SimpleImputer\n", + "from sklearn.preprocessing import OneHotEncoder, StandardScaler\n", + "from sklearn.pipeline import Pipeline\n", + "from sklearn.model_selection import train_test_split\n", + "\n", + "# Построение конвейеров предобработки\n", + "\n", + "class DiabetesFeatures(BaseEstimator, TransformerMixin):\n", + " def __init__(self):\n", + " pass\n", + "\n", + " def fit(self, X, y=None):\n", + " return self\n", + "\n", + " def transform(self, X, y=None):\n", + " # Создание новых признаков\n", + " X = X.copy()\n", + " X[\"BMI_to_Age_ratio\"] = X[\"BMI\"] / X[\"Age\"]\n", + " return X\n", + "\n", + " def get_feature_names_out(self, features_in):\n", + " # Добавление имен новых признаков\n", + " new_features = [\"BMI_to_Age_ratio\"]\n", + " return np.append(features_in, new_features, axis=0)\n", + "\n", + "# Обработка числовых данных. Числовой конвейр: заполнение пропущенных значений медианой и стандартизация\n", + "preprocessing_num_class = Pipeline(steps=[\n", + " ('imputer', SimpleImputer(strategy='median')),\n", + " ('scaler', StandardScaler())\n", + "])\n", + "\n", + "preprocessing_cat_class = Pipeline(steps=[\n", + " ('imputer', SimpleImputer(strategy='most_frequent')),\n", + " ('onehot', OneHotEncoder(handle_unknown='ignore', sparse_output=False, drop='first'))\n", + "])\n", + "\n", + "columns_to_drop = []\n", + "numeric_columns = [\"Pregnancies\", \"Glucose\", \"BloodPressure\", \"SkinThickness\", \"Insulin\",\n", + " \"BMI\", \"DiabetesPedigreeFunction\", \"Age\"]\n", + "cat_columns = [\"Outcome\"]\n", + "\n", + "features_preprocessing = ColumnTransformer(\n", + " verbose_feature_names_out=False,\n", + " transformers=[\n", + " (\"preprocessing_num\", preprocessing_num_class, numeric_columns),\n", + " (\"preprocessing_cat\", preprocessing_cat_class, 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", + "features_postprocessing = ColumnTransformer(\n", + " verbose_feature_names_out=False,\n", + " transformers=[\n", + " ('preprocessing_cat', preprocessing_cat_class, [\"Outcome\"]),\n", + " ],\n", + " remainder=\"passthrough\",\n", + ")\n", + "\n", + "pipeline_end = Pipeline(\n", + " [\n", + " (\"features_preprocessing\", features_preprocessing),\n", + " (\"custom_features\", DiabetesFeatures()),\n", + " (\"drop_columns\", drop_columns),\n", + " ]\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Демонстрация работы конвейера" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PregnanciesGlucoseBloodPressureSkinThicknessInsulinBMIDiabetesPedigreeFunctionAgeOutcome_1BMI_to_Age_ratio
353-0.851355-0.980131-0.404784-0.553973-0.331319-0.6076780.310794-0.7921690.00.767107
7110.3565760.1614440.4653680.392787-0.526398-0.302139-0.1164390.5610340.0-0.538540
373-0.549372-0.504474-0.6223221.2133120.1424440.372594-0.764862-0.7075940.0-0.526564
46-0.8513550.795653-0.731091-1.311380-0.730766-0.2894080.262314-0.3692930.00.783681
682-1.153338-0.821579-0.2960151.1501950.2446281.607482-0.337630-0.9613200.0-1.672162
.................................
451-0.5493720.4151280.030292-1.311380-0.730766-0.3912550.195653-0.8767441.00.446259
1130.054593-1.424076-0.404784-1.311380-0.7307660.258017-0.261879-0.7075940.0-0.364639
556-0.851355-0.7581580.0302921.213312-0.7307660.779980-0.786072-0.2847180.0-2.739481
6671.866489-0.3142120.0302920.392787-0.730766-0.569486-1.0193830.5610341.0-1.015065
1070.0545930.732232-0.6223220.4559040.569759-0.314870-0.5770010.3073080.0-1.024606
\n", + "

614 rows × 10 columns

\n", + "
" + ], + "text/plain": [ + " Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \\\n", + "353 -0.851355 -0.980131 -0.404784 -0.553973 -0.331319 -0.607678 \n", + "711 0.356576 0.161444 0.465368 0.392787 -0.526398 -0.302139 \n", + "373 -0.549372 -0.504474 -0.622322 1.213312 0.142444 0.372594 \n", + "46 -0.851355 0.795653 -0.731091 -1.311380 -0.730766 -0.289408 \n", + "682 -1.153338 -0.821579 -0.296015 1.150195 0.244628 1.607482 \n", + ".. ... ... ... ... ... ... \n", + "451 -0.549372 0.415128 0.030292 -1.311380 -0.730766 -0.391255 \n", + "113 0.054593 -1.424076 -0.404784 -1.311380 -0.730766 0.258017 \n", + "556 -0.851355 -0.758158 0.030292 1.213312 -0.730766 0.779980 \n", + "667 1.866489 -0.314212 0.030292 0.392787 -0.730766 -0.569486 \n", + "107 0.054593 0.732232 -0.622322 0.455904 0.569759 -0.314870 \n", + "\n", + " DiabetesPedigreeFunction Age Outcome_1 BMI_to_Age_ratio \n", + "353 0.310794 -0.792169 0.0 0.767107 \n", + "711 -0.116439 0.561034 0.0 -0.538540 \n", + "373 -0.764862 -0.707594 0.0 -0.526564 \n", + "46 0.262314 -0.369293 0.0 0.783681 \n", + "682 -0.337630 -0.961320 0.0 -1.672162 \n", + ".. ... ... ... ... \n", + "451 0.195653 -0.876744 1.0 0.446259 \n", + "113 -0.261879 -0.707594 0.0 -0.364639 \n", + "556 -0.786072 -0.284718 0.0 -2.739481 \n", + "667 -1.019383 0.561034 1.0 -1.015065 \n", + "107 -0.577001 0.307308 0.0 -1.024606 \n", + "\n", + "[614 rows x 10 columns]" + ] + }, + "execution_count": 49, + "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": [ + "#### Формирование набора моделей для классификации\n", + " logistic -- логистическая регрессия\n", + "\n", + "ridge -- гребневая регрессия\n", + "\n", + "decision_tree -- дерево решений\n", + "\n", + "knn -- k-ближайших соседей\n", + "\n", + "naive_bayes -- наивный Байесовский классификатор\n", + "\n", + "gradient_boosting -- метод градиентного бустинга (набор деревьев решений)\n", + "\n", + "random_forest -- метод случайного леса (набор деревьев решений)\n", + "\n", + "mlp -- многослойный персептрон (нейронная сеть)" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn import ensemble, linear_model, naive_bayes, neighbors, neural_network, tree\n", + "\n", + "# Определите random_state для воспроизводимости результатов\n", + "random_state = 42\n", + "\n", + "# Определите модели машинного обучения для классификации\n", + "class_models = {\n", + " \"logistic\": {\"model\": linear_model.LogisticRegression(random_state=random_state)},\n", + " \"ridge\": {\"model\": linear_model.LogisticRegression(penalty=\"l2\", class_weight=\"balanced\", random_state=random_state)},\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, random_state=random_state)\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": 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": [ + "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": [ + "#### Сводная таблица оценок качества для использованных моделей классификации" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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/fZb3LhxA3l5eXB3d8e4ceMwZswYrF69GhcvXsSxY8ewaNEi4wPJb7zxBs6fP4/x48fj7NmzWLduHRISEip1vk2aNEFqairWr1+PixcvIi4urtwHwTUaDSIjI3Hy5Ens2bMHI0eOxIABA6DT6QAA06dPR0xMDOLi4nDu3Dn8+uuviI+Px4IFCypVDxER0d2Yzcxmkom1H8ojssQ/H56uzPr09HTx8ssvi9q1awsnJyfRqFEjMXToUJGTkyOEKH1YetSoUcLDw0N4enqKsWPHipdfftnsw9NCCPHnn3+KMWPGCD8/P+Ho6CgaN24sVq1aZVwfHR0tdDqdkCRJREZGCiFKH/iOjY0VzZo1E7Vq1RJ16tQR4eHhYvfu3cb9tm7dKho3biycnJzEE088IVatWlXph6fHjx8vfHx8hJubmxg4cKBYuHCh0Gq1xvVRUVGiTZs2YunSpcLf319oNBrRv39/kZWVZXLctWvXipCQEOHo6Ci8vLxEly5dxMaNG4UQfHiaiIhKMZvLx2ym6iAJYeYpUSIiIiIiIrI5HE5JRERERESkIOzEERERERERKQg7cURERERERArCThwREREREZGCsBNHRERERESkIOzEERERERERKQg7cURERERERArCThwREREREZGCsBNHRERERESkIOzEERERERERKQg7cURERERERAry/wHoYFxkolVSKAAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from sklearn.metrics import ConfusionMatrixDisplay\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Определите количество строк и столбцов для subplots\n", + "n_rows = int(len(class_models) / 2)\n", + "n_cols = 2\n", + "\n", + "fig, ax = plt.subplots(n_rows, n_cols, figsize=(12, 10), sharex=False, sharey=False)\n", + "\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=[\"No Diabetes\", \"Diabetes\"]\n", + " ).plot(ax=ax.flat[index])\n", + " disp.ax_.set_title(key)\n", + "\n", + "# Настройте расположение subplots\n", + "plt.subplots_adjust(top=1, bottom=0, hspace=0.4, wspace=0.1)\n", + "plt.show()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "100 - количество истинных положительных диагнозов (True Positives), где модель правильно определила объекты как \"No Diabetes\".\n", + "\n", + "54 в некоторых моделях - количество ложных отрицательных диагнозов (False Negatives), где модель неправильно определила объекты, которые на самом деле принадлежат к классу \"No Diabetes\", но были отнесены к классу \"Diabetes\". \n", + "\n", + "Исходя из значений True Positives и False Negatives, можно сказать, что модель имеет высокую точность при предсказании класса \"No Diabetes\". В принципе, уровень ложных отрицательных результатов в некоторых моделях (54) говорит нам о том, что существует некотрое небольшое количество примеров, которые модель пропускает.\n", + "\n", + "Точность, полнота, верность (аккуратность), F-мера" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 Precision_trainPrecision_testRecall_trainRecall_testAccuracy_trainAccuracy_testF1_trainF1_test
logistic1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000
ridge1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000
decision_tree1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000
naive_bayes1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000
random_forest1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000
gradient_boosting1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000
knn0.9183670.7777780.8411210.7777780.9185670.8441560.8780490.777778
mlp0.2542370.2380950.0700930.0925930.6042350.5779220.1098900.133333
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 65, + "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": [ + "Все модели в данной выборке, а именно логистическая регрессия, ридж-регрессия, дерево решений, KNN, наивный байесовский классификатор, градиентный бустинг, случайный лес и многослойный перцептрон (MLP) демонстрируют неплохие значения по всем метрикам на обучающих и тестовых наборах данных.\n", + "\n", + "Модели MLP не так эффективна по сравнению с другими, но в некоторых метриках показывают высокие результаты. " + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 Accuracy_testF1_testROC_AUC_testCohen_kappa_testMCC_test
logistic1.0000001.0000001.0000001.0000001.000000
ridge1.0000001.0000001.0000001.0000001.000000
decision_tree1.0000001.0000001.0000001.0000001.000000
naive_bayes1.0000001.0000001.0000001.0000001.000000
random_forest1.0000001.0000001.0000001.0000001.000000
gradient_boosting1.0000001.0000001.0000001.0000001.000000
knn0.8441560.7777780.9080560.6577780.657778
mlp0.5779220.1333330.488148-0.078431-0.093728
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 66, + "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": "markdown", + "metadata": {}, + "source": [ + "Схожий вывод можно сделать и для следующих метрик: Accuracy, F1, ROC AUC, Cohen's Kappa и MCC. Все модели, кроме KNN и MLP, указывают на хорошо-развитую способность к выделению классов" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "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": 73, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'Error items count: 0'" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PregnanciesPredictedGlucoseBloodPressureSkinThicknessInsulinBMIDiabetesPedigreeFunctionAgeOutcome
\n", + "
" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: [Pregnancies, Predicted, Glucose, BloodPressure, SkinThickness, Insulin, BMI, DiabetesPedigreeFunction, Age, Outcome]\n", + "Index: []" + ] + }, + "execution_count": 73, + "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": 88, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PregnanciesGlucoseBloodPressureSkinThicknessInsulinBMIDiabetesPedigreeFunctionAgeOutcome
1632.0100.064.023.00.029.70.36821.00.0
\n", + "
" + ], + "text/plain": [ + " Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \\\n", + "163 2.0 100.0 64.0 23.0 0.0 29.7 \n", + "\n", + " DiabetesPedigreeFunction Age Outcome \n", + "163 0.368 21.0 0.0 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PregnanciesGlucoseBloodPressureSkinThicknessInsulinBMIDiabetesPedigreeFunctionAgeOutcome_1BMI_to_Age_ratio
163-0.549372-0.663027-0.2960150.140318-0.730766-0.289408-0.33157-1.0458950.00.276709
\n", + "
" + ], + "text/plain": [ + " Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \\\n", + "163 -0.549372 -0.663027 -0.296015 0.140318 -0.730766 -0.289408 \n", + "\n", + " DiabetesPedigreeFunction Age Outcome_1 BMI_to_Age_ratio \n", + "163 -0.33157 -1.045895 0.0 0.276709 " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "'predicted: 0 (proba: [0.98965692 0.01034308])'" + ] + }, + "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 = 163\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}\")\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Подбор гиперпараметров методом поиска по сетке " + ] + }, + { + "cell_type": "code", + "execution_count": 89, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\TIGR228\\Desktop\\МИИ\\Lab1\\AIM-PIbd-31-Afanasev-S-S\\aimenv\\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": 89, + "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": 90, + "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 = 42\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=50,\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": 91, + "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": 92, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 Precision_trainPrecision_testRecall_trainRecall_testAccuracy_trainAccuracy_testF1_trainF1_test
Name        
Old1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000
New1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 92, + "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": 93, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 Accuracy_testF1_testROC_AUC_testCohen_kappa_testMCC_test
Name     
Old1.0000001.0000001.0000001.0000001.000000
New1.0000001.0000001.0000001.0000001.000000
\n" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 93, + "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": 94, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA5IAAAGxCAYAAAAQ1omjAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABOw0lEQVR4nO3dfVxUZf7/8fcBBLzhRrzhRhE177A0tVxzK+0Gwy0rs77mLruLpba7ZaZmVlugYom2aS5W6mZJ7s/WbFNTK3fLVss0S1OrlbS8CU3RNhWEFgRmfn+wTjsLKsMczgxzXs/H4zyCczfXTMibz7mucx3D6XQ6BQAAAABALQX5ugEAAAAAgIaFQhIAAAAA4BEKSQAAAACARygkAQAAAAAeoZAEAAAAAHiEQhIAAAAA4BEKSQAAAACARygkAQAAAAAeoZAEAAAAAHiEQhIAAAAA4BEKSQBAQHv//fd18803KyEhQYZhaNWqVW7bnU6nMjMzFR8fr8aNGyslJUVfffWV2z4nTpxQWlqaIiMjFR0drVGjRqm4uNjCdwEAQBV/yTUKSQBAQCspKdGll16q5557rsbtTz31lHJycrRgwQJt3bpVTZs2VWpqqkpLS137pKWl6Z///KfeeecdrV27Vu+//77uueceq94CAAAu/pJrhtPpdHr1TgAAaCAMw9DKlSs1dOhQSVVXbRMSEvTggw9q0qRJkqTCwkLFxsYqNzdXI0aMUF5enrp3765PPvlEl19+uSRp3bp1uvHGG3X48GElJCT46u0AAGzOl7kWUi/vCACA/1JaWqozZ86Ydj6n0ynDMNzWhYWFKSwszKPzHDhwQAUFBUpJSXGti4qKUr9+/bRlyxaNGDFCW7ZsUXR0tCtsJSklJUVBQUHaunWrbrvtNu/eDACgwSHXKCQBAPWstLRUHZKaqeB4pWnnbNasWbV7OaZMmaKpU6d6dJ6CggJJUmxsrNv62NhY17aCggK1bt3abXtISIhiYmJc+wAA7INc+88xHrUMAAAPnTlzRgXHK3Vge5IiI7y/Nb/otEMdLvtGhw4dUmRkpGu9p1dtAQCoC3KtCoUkAMASkRFBpgSu63yRkW6BWxdxcXGSpGPHjik+Pt61/tixY+rVq5drn+PHj7sdV1FRoRMnTriOBwDYj91zjVlbAQCWqHQ6TFvM0qFDB8XFxWn9+vWudUVFRdq6dav69+8vSerfv79OnTql7du3u/Z577335HA41K9fP9PaAgBoWOyea/RIAgAs4ZBTDnk/Ubin5yguLtbXX3/t+v7AgQPauXOnYmJi1K5dO40fP15PPPGEOnfurA4dOigjI0MJCQmuGfCSk5M1ePBgjRkzRgsWLFB5ebnGjh2rESNGMGMrANiY3XONQhIAENC2bduma6+91vX9xIkTJUnp6enKzc3V5MmTVVJSonvuuUenTp3SVVddpXXr1ik8PNx1zNKlSzV27Fhdf/31CgoK0u23366cnBzL3wsAAP6SazxHEgBQr4qKihQVFaUje9qaNilBQtfDKiws9PpeEgAAPEWuVaFHEgBgiUqnU5UmXLs04xwAAHjL7rnGZDsAAAAAAI/QIwkAsISvJiUAAKA+2D3XKCQBAJZwyKlKGwcuACCw2D3XGNoKAAAAAPAIPZIAAEvYfQgQACCw2D3X6JEEAAAAAHiEHkkAgCXsPk06ACCw2D3XKCQBAJZw/Gcx4zwAAPia3XONoa0AAAAAAI/QIwkAsESlSdOkm3EOAAC8Zfdco5AEAFii0lm1mHEeAAB8ze65xtBWAAAAAIBH6JEEAFjC7pMSAAACi91zjUISAGAJhwxVyjDlPAAA+Jrdc42hrQAAAAAAj9AjCQCwhMNZtZhxHgAAfM3uuUaPJAAAAADAI/RIAgAsUWnSvSRmnAMAAG/ZPdcoJAEAlrB74AIAAovdc42hrQAAAAAAj9AjCQCwhMNpyOE0YZp0E84BAIC37J5rFJIAAEvYfQgQACCw2D3XGNoKAAAAAPAIPZIAAEtUKkiVJly/rDShLQAAeMvuuUYhCQCwhNOke0mcDfReEgBAYLF7rjG0FQAAAADgEXokAQCWsPukBACAwGL3XKOQBABYotIZpEqnCfeSOE1oDAAAXrJ7rjG0FQAAAADgEXokAQCWcMiQw4Trlw410Eu3AICAYvdco0cSAAAAAOAReiQBAJaw+6QEAIDAYvdco5AEAFjCvEkJGuYQIABAYLF7rjG0FQAAAADgEXokAQCWqJqUwPvhO2acAwAAb9k91ygkAQCWcChIlTae3Q4AEFjsnmsMbQUAAAAAeIQeSQCAJew+KQEAILDYPdcoJAEAlnAoyNYPbgYABBa75xpDWwEAAAAAHqFHEgBgiUqnoUqnCQ9uNuEcAAB4y+65Ro8kAAAAAMAj9EgCACxRadI06ZUN9F4SAEBgsXuuUUgCACzhcAbJYcLsdo4GOrsdACCw2D3XGNoKAAAAAPAIPZIAAEvYfQgQACCw2D3XKCQBAJZwyJyZ6RzeNwUAAK/ZPdcY2goAAAAA8Ag9kgAASzgUJIcJ1y/NOAcAAN6ye65RSAIALFHpDFKlCbPbmXEOAAC8Zfdca5itBgAAAAD4DD2SAABLOGTIITMmJfD+HAAAeMvuuUYhCQCwhN2HAAEAAovdc61hthoAAAAA4DP0SAIALGHeg5u5BgoA8D2751rDbDUAAAAAwGfokbQRh8OhI0eOKCIiQobRMG/qBWAtp9Op06dPKyEhQUFB3l17dDgNOZwmTEpgwjkQGMg1AJ4i18xDIWkjR44cUWJioq+bAaABOnTokNq2bevVORwmDQFqqA9uhvnINQB1Ra55j0LSRiIiIiRJ33zaXpHNGuYPLOrPbV16+LoJ8EMVKtcmveX6/QH4E3IN50OuoSbkmnkoJG3k7LCfyGZBiowgcOEuxGjk6ybAHzmr/mPGsEGHM0gOE6Y4N+McCAzkGs6HXEONyDXTUEgCACxRKUOVJjx02YxzAADgLbvnWsMsfwEAAAAAPkOPJADAEnYfAgQACCx2zzUKSQCAJSplzvCdSu+bAgCA1+yeaw2z/AUAAAAA+Aw9kgAAS9h9CBAAILDYPdcaZqsBAAAAAD5DjyQAwBKVziBVmnDV1YxzAADgLbvnWsNsNQCgwXHKkMOExenBxAaVlZXKyMhQhw4d1LhxY1100UWaPn26nE7nj+1yOpWZman4+Hg1btxYKSkp+uqrr+rjIwAABBC75xqFJAAgYM2aNUvz58/Xs88+q7y8PM2aNUtPPfWU5s2b59rnqaeeUk5OjhYsWKCtW7eqadOmSk1NVWlpqQ9bDgBAdf6UawxtBQBYwhdDgDZv3qxbb71VN910kySpffv2+stf/qKPP/5YUtVV27lz5+rxxx/XrbfeKklasmSJYmNjtWrVKo0YMcLr9gIAApPdc40eSQCAJRxOw7RFkoqKityWsrKyaq/505/+VOvXr9fevXslSbt27dKmTZv0s5/9TJJ04MABFRQUKCUlxXVMVFSU+vXrpy1btljwqQAAGiq75xo9kgCABikxMdHt+ylTpmjq1Klu6x555BEVFRWpW7duCg4OVmVlpZ588kmlpaVJkgoKCiRJsbGxbsfFxsa6tgEAYIWGlmsUkgAAS1QqSJUmDIQ5e45Dhw4pMjLStT4sLKzavsuXL9fSpUv1yiuv6OKLL9bOnTs1fvx4JSQkKD093eu2AADsy+65RiEJALDEfw/f8fY8khQZGekWuDV56KGH9Mgjj7juCenRo4e++eYbZWdnKz09XXFxcZKkY8eOKT4+3nXcsWPH1KtXL6/bCgAIXHbPNe6RBAAErB9++EFBQe5RFxwcLIfDIUnq0KGD4uLitH79etf2oqIibd26Vf3797e0rQAAXIg/5Ro9kgAASzgUJIcJ1y89OcfNN9+sJ598Uu3atdPFF1+sHTt2aM6cObr77rslSYZhaPz48XriiSfUuXNndejQQRkZGUpISNDQoUO9bisAIHDZPdcoJAEAlqh0Gqo0YQiQJ+eYN2+eMjIydO+99+r48eNKSEjQb37zG2VmZrr2mTx5skpKSnTPPffo1KlTuuqqq7Ru3TqFh4d73VYAQOCye64ZTqfTaeoZ4beKiooUFRWlk3s7KjKCUc1wl5rQy9dNgB+qcJZrg95QYWHhBe/bOJezv3t+98EwhTVr5HWbyorLNf/qFV61CYGBXMP5kGuoCblmHnokAQCWMHtSAgAAfMnuucblOwAAAACAR+iRBABYwukMksPp/fVLpwnnAADAW3bPNQpJAIAlKmWoUiZMSmDCOQAA8Jbdc61hlr8AAAAAAJ+hRxIAYAmH05wJBRzMNQ4A8AN2zzUKSQCAJRwm3UtixjkAAPCW3XOtYbYaAAAAAOAz9EgCACzhkCGHCRMKmHEOAAC8Zfdco5AEAFii0mmo0oR7Scw4BwAA3rJ7rjG0FQAAAADgEXokAQCWsPukBACAwGL3XGuYrQYAAAAA+Aw9kgAASzhkmPO8rQY6KQEAILDYPdcoJAEAlnCaNLuds4EGLgAgsNg91xjaCgAAAADwCD2SAABLOJwmDQFqoNOkAwACi91zjUISAGAJu89uBwAILHbPtYbZagAAAACAz9AjCQCwhN2HAAEAAovdc41CEgBgCYdJs9s11GnSAQCBxe65xtBWAAAAAIBH6JEEAFjC7kOAAACBxe65RiEJALCE3QMXABBY7J5rDG0FAAAAAHiEHkkAgCXsfuUWABBY7J5r9EgCAAAAADxCjyQAwBJ2v3ILAAgsds81CkkAgCWcMudZWU7vmwIAgNfsnmsMbQUAAAAAeIQeSQCAJew+BAgAEFjsnmsUkgAAS9g9cAEAgcXuucbQVgAAAACAR+iRBABYwu5XbgEAgcXuuUYhCQCwhN0DFwAQWOyeawxtBQAAAAB4hB5JAIAlnE5DThOuuppxDgAAvGX3XKNHEgAAAADgEXokAQCWcMiQQybcS2LCOQAA8Jbdc41CEgBgCbtPSgAACCx2zzWGtiKgfP5RU2X+uoN+3vtipSb00ua3o9y2O53Sy0/F6ee9LtbNHXvq4eEX6dv9oW77FJ0M1sz72um2Lj00rFsPzZmYqH+X8E/FLm4e+S+9vHW31uz/TH9c+5W69vrB100CYGPkGrxFrqG+8FtE0jXXXKPx48fXev8NGzbIMAydOnWq3tqEuin9IUgdL/63xs44XOP25c+11hsvtdL9Mw/pj2v3KryJQ7//xUU6U/rjlaBZY5P0zZ7Gyl62T1kv79fnW5tp7kOJVr0F+NDAW07qnilHtHROnO5L7aL9u8P15Cv7FdWi3NdNCwhnJyUwY8H5kWuBg1yDN8i1+mX3XPNpITly5EgZhqGZM2e6rV+1apUMw7sPNDc3V4ZhyDAMBQcHq3nz5urXr5+ysrJUWFjotu+KFSs0ffp0r16vLtq3b6+5c+da/rqBrO91pzXy4QJd+bPCatucTmnVolb6+QMF+ungInXsXqrJOd/o+2ONtHld1RXe/K/CtO0fkZowO1/d+vygS/qV6N4nDmvjG9H6voCR4IFu2D3/0rpXYvT3V2OU/1W4ch5uq7J/G0r9+QlfNy0gnB0CZMbir8g1cs1s5Bq8Qa7VLzvk2vn4vEcyPDxcs2bN0smTJ00/d2RkpI4eParDhw9r8+bNuueee7RkyRL16tVLR44cce0XExOjiIgI018f/qUgP1QnjjdSn6uLXeuaRjrUrfcPytveVJKUt62pmkVVqMul/3bt0+fq0zKCpC93NLW8zbBOSCOHOvf8QZ9+8OPvAqfT0I4PItT9MoYBofbINViFXMP5kGuobz4vJFNSUhQXF6fs7Ozz7vf666/r4osvVlhYmNq3b6/Zs2df8NyGYSguLk7x8fFKTk7WqFGjtHnzZhUXF2vy5Mmu/f53CNCf//xnXX755YqIiFBcXJx+8Ytf6Pjx49XO/+GHH6pnz54KDw/XFVdcoS+++MJt+6ZNm3T11VercePGSkxM1Lhx41RSUuJ6zW+++UYTJkxwXWGuzXGS9Pzzz6tz584KDw9XbGys7rjjjhrff1lZmYqKitwWOztxvOrKa3Qr9+Ec0a3KXdtOfBei6BYVbtuDQ6SI6ArXPghMkTGVCg6RTn3n/v/55L9C1LxVxTmOgifsMgSIXCPXrEKu4XzItfpnl1w7F58XksHBwZoxY4bmzZunw4drHv+/fft2DR8+XCNGjNDnn3+uqVOnKiMjQ7m5uR6/XuvWrZWWlqbVq1ersrKyxn3Ky8s1ffp07dq1S6tWrdLBgwc1cuTIavs99NBDmj17tj755BO1atVKN998s8rLq36Z79u3T4MHD9btt9+uzz77TK+++qo2bdqksWPHSqoadtS2bVtlZWXp6NGjOnr0aK2O27Ztm8aNG6esrCzt2bNH69at04ABA2p8H9nZ2YqKinItiYncDwHAd5wmDf/x98Al18g1APZgl1w7F7+4FHXbbbepV69emjJlil588cVq2+fMmaPrr79eGRkZkqQuXbpo9+7d+sMf/lBjEF5It27ddPr0aX3//fdq3bp1te1333236+uOHTsqJydHffv2VXFxsZo1a+baNmXKFA0aNEiS9PLLL6tt27ZauXKlhg8fruzsbKWlpbmuCHfu3Fk5OTkaOHCg5s+fr5iYGAUHB7uuDp91oePy8/PVtGlTDRkyRBEREUpKSlLv3r1rfJ+PPvqoJk6c6Pq+qKjI1qEb07rq6tup7xqpReyPV+JOfddIF11cNeQnplWFTn3v/s+iskI6fSrEdTwCU9GJYFVWSNH/c5W2ecsKnfzOL35VogEh18g1K5BrOB9yDfXN5z2SZ82aNUsvv/yy8vLyqm3Ly8vTlVde6bbuyiuv1FdffXXOq6/n43Q6JemcEx9s375dN998s9q1a6eIiAgNHDhQkpSfn++2X//+/V1fx8TEqGvXrq7279q1S7m5uWrWrJlrSU1NlcPh0IEDB87ZtgsdN2jQICUlJaljx4761a9+paVLl+qHH2oe5x4WFqbIyEi3xc7i2p1RTOty7dj04x9NJaeD9OWOJkq+rGqIVfLlJSouDNFXnzV27bNzU4ScDqlb75Jq50TgqCgP0lefNVHvq0671hmGU72uKtbu7U182LLA4VTV5CBeL75+I7VErqlWx5FrdUeu4XzItfpnt1z7X35zOWLAgAFKTU3Vo48+WqersZ7Iy8tTZGSkWrRoUW1bSUmJUlNTlZqaqqVLl6pVq1bKz89Xamqqzpw5U+vXKC4u1m9+8xuNGzeu2rZ27drV+bjQ0FB9+umn2rBhg/7+978rMzNTU6dO1SeffKLo6Ohaty9Q/bskSEcOhLm+LzgUqn1fNFZEdIVaty3X0NHf6S9/jFWbDmWKa3dGLz8Vrxax5frp4KrZ8Np1LtPl1xZp7qRE3T/rsCrLDT33eBsNvPWUWsRx5TbQrfhTS02ae0h7dzXRnh1NdNuY7xTexKG/L4vxddMCgkOGDJnw4GYTzmEFcq12x5Fr50euwRvkWv2yW679L78pJCVp5syZ6tWrl7p27eq2Pjk5WR9++KHbug8//FBdunRRcHCwR69x/PhxvfLKKxo6dKiCgqp3yH755Zf6/vvvNXPmTNdwmW3bttV4ro8++sgVnidPntTevXuVnJwsSerTp492796tTp06nbMtoaGh1a481+a4kJAQpaSkKCUlRVOmTFF0dLTee+89DRs27Pxv3gb27mqiyXf8+NktnNpGkjRo+AlNmpuv4fcdV+kPQfrj5EQVFwXr4r4lenLpfoWG/3gt6OFnv9Fzj7XVI8MvkhEkXXXjKd37xLeWvxdYb+Pq5opqUalfP1Sg5q0qtP+fjfVYWged+lcjXzcNDRS5Rq55i1yDN8g11Ce/KiR79OihtLQ05eTkuK1/8MEH1bdvX02fPl133nmntmzZomeffVbPP//8ec/ndDpVUFAgp9OpU6dOacuWLZoxY4aioqKqPePrrLNXR+fNm6ff/va3+uKLL875LK6srCy1aNFCsbGxeuyxx9SyZUsNHTpUkvTwww/riiuu0NixYzV69Gg1bdpUu3fv1jvvvKNnn31WUtXztt5//32NGDFCYWFhatmy5QWPW7t2rfbv368BAwaoefPmeuutt+RwOKr9kWJXl/60WH87svOc2w1DSp9coPTJBefcJ7J5pR59/pt6aB0agtWLW2r14pa+bkZAMmtmuoY0KQG5Rq55i1yDt8i1+mPHXPtvfnOP5FlZWVlyOBxu6/r06aPly5dr2bJluuSSS5SZmamsrKwLDhUqKipSfHy82rRpo/79+2vhwoVKT0/Xjh07FB8fX+MxrVq1Um5url577TV1795dM2fO1NNPP13jvjNnztQDDzygyy67TAUFBVqzZo1CQ0MlST179tTGjRu1d+9eXX311erdu7cyMzOVkJDg9l4PHjyoiy66SK1atarVcdHR0VqxYoWuu+46JScna8GCBfrLX/6iiy++uFafLwDAWuQauQYAgchwnr1DHwGvqKhIUVFROrm3oyIj/O4aAnwsNaGXr5sAP1ThLNcGvaHCwsI6T2xy9nfPJcsfUnCTsAsfcAGVP5Tpi+F/8KpNCAzkGs6HXENNyDXz+NXQVgBA4Do7O50Z5wEAwNfsnmtcvgMAAAAAeIQeSQCAJew+KQEAILDYPdcoJAEAlrB74AIAAovdc42hrQAAAAAAj9AjCQCwhMNpyDDhqqujgV65BQAEFrvnGoUkAMASdp/dDgAQWOyeawxtBQAAAAB4hB5JAIAlqq7cmjEpgQmNAQDAS3bPNXokAQAAAAAeoUcSAGAJu0+TDgAILHbPNQpJAIAlnP9ZzDgPAAC+ZvdcY2grAAAAAMAj9EgCACxh9yFAAIDAYvdco5AEAFjD7mOAAACBxea5xtBWAAAAAIBHKCQBANb4zxAgbxd5OATo22+/1S9/+Uu1aNFCjRs3Vo8ePbRt27Yfm+V0KjMzU/Hx8WrcuLFSUlL01Vdfmf3uAQCBxua5RiEJALBE1YObzVlq6+TJk7ryyivVqFEjvf3229q9e7dmz56t5s2bu/Z56qmnlJOTowULFmjr1q1q2rSpUlNTVVpaWg+fAgAgUNg917hHEgAQsGbNmqXExEQtXrzYta5Dhw6ur51Op+bOnavHH39ct956qyRpyZIlio2N1apVqzRixAjL2wwAwLn4U67RIwkAsIQZw3/+e4a8oqIit6WsrKzaa65evVqXX365/u///k+tW7dW79699cILL7i2HzhwQAUFBUpJSXGti4qKUr9+/bRly5b6/1AAAA2W3XONQhIAYI2z94GYsUhKTExUVFSUa8nOzq72kvv379f8+fPVuXNn/e1vf9Pvfvc7jRs3Ti+//LIkqaCgQJIUGxvrdlxsbKxrGwAANbJ5rjG0FQDQIB06dEiRkZGu78PCwqrt43A4dPnll2vGjBmSpN69e+uLL77QggULlJ6ebllbAQC4kIaWa/RIAgAsYfakBJGRkW5LTYEbHx+v7t27u61LTk5Wfn6+JCkuLk6SdOzYMbd9jh075toGAEBN7J5rFJIAgIB15ZVXas+ePW7r9u7dq6SkJElVExTExcVp/fr1ru1FRUXaunWr+vfvb2lbAQC4EH/KNYa2AgCs4fzPYsZ5amnChAn66U9/qhkzZmj48OH6+OOP9ac//Ul/+tOfJEmGYWj8+PF64okn1LlzZ3Xo0EEZGRlKSEjQ0KFDTWgsACBg2TzXKCQBAJb475npvD1PbfXt21crV67Uo48+qqysLHXo0EFz585VWlqaa5/JkyerpKRE99xzj06dOqWrrrpK69atU3h4uNdtBQAELrvnGoUkACCgDRkyREOGDDnndsMwlJWVpaysLAtbBQBA3fhLrlFIAgCsY8YQIAAA/IWNc61WheTq1atrfcJbbrmlzo0BAAQuXwwBOhdyDQDgLX/KNV+oVSFZ2xszDcNQZWWlN+0BAKDekWsAAHinVoWkw+Go73YAAAKdD2a3OxdyDQDgNT/KNV/w6jmSpaWlZrUDABDwDBOX+kGuAQBqz/9zrT55XEhWVlZq+vTpatOmjZo1a6b9+/dLkjIyMvTiiy+a3kAAAOoTuQYAgOc8LiSffPJJ5ebm6qmnnlJoaKhr/SWXXKJFixaZ2jgAQABxmriYiFwDANSJn+aaVTwuJJcsWaI//elPSktLU3BwsGv9pZdeqi+//NLUxgEAUN/INQAAPOfxcyS//fZbderUqdp6h8Oh8vJyUxoFAAhAfjopAbkGAKgTP801q3jcI9m9e3d98MEH1db/9a9/Ve/evU1pFAAgADkN8xYTkWsAgDrx01yzisc9kpmZmUpPT9e3334rh8OhFStWaM+ePVqyZInWrl1bH20EAKDekGsAAHjO4x7JW2+9VWvWrNG7776rpk2bKjMzU3l5eVqzZo0GDRpUH20EAAQAp9O8xUzkGgCgLvw116zicY+kJF199dV65513zG4LACCQ+fG9JOQaAMBjfpxrVqhTISlJ27ZtU15enqSq+0suu+wy0xoFAIDVyDUAAGrP40Ly8OHD+vnPf64PP/xQ0dHRkqRTp07ppz/9qZYtW6a2bdua3UYAQCAwa0IBkyclINcAAHXip7lmFY/vkRw9erTKy8uVl5enEydO6MSJE8rLy5PD4dDo0aPro40AgABgOM1bzESuAQDqwl9zzSoe90hu3LhRmzdvVteuXV3runbtqnnz5unqq682tXEAANQ3cg0AAM95XEgmJibW+IDmyspKJSQkmNIoAEAA8tNJCcg1AECd+GmuWcXjoa1/+MMfdP/992vbtm2uddu2bdMDDzygp59+2tTGAQACiJ8+uJlcAwDUiZ/mmlVq1SPZvHlzGcaPb7CkpET9+vVTSEjV4RUVFQoJCdHdd9+toUOH1ktDAQAwC7kGAIB3alVIzp07t56bAQAIeH40BIhcAwB4zY9yzRdqVUimp6fXdzsAALAMuQYAgHc8nmznv5WWlurMmTNu6yIjI71qEAAgQDWAK7fkGgCg1hpArtUnjyfbKSkp0dixY9W6dWs1bdpUzZs3d1sAAKiR08TFROQaAKBO/DTXrOJxITl58mS99957mj9/vsLCwrRo0SJNmzZNCQkJWrJkSX20EQCAekOuAQDgOY+Htq5Zs0ZLlizRNddco7vuuktXX321OnXqpKSkJC1dulRpaWn10U4AQENn1hTnJk+TTq4BAOrET3PNKh73SJ44cUIdO3aUVHXfyIkTJyRJV111ld5//31zWwcACBiG07zFTOQaAKAu/DXXrOJxIdmxY0cdOHBAktStWzctX75cUtUV3ejoaFMbBwBAfSPXAADwnMeF5F133aVdu3ZJkh555BE999xzCg8P14QJE/TQQw+Z3kAAQIDw00kJyDUAQJ34aa5ZxeN7JCdMmOD6OiUlRV9++aW2b9+uTp06qWfPnqY2DgCA+kauAQDgOa+eIylJSUlJSkpKMqMtAAD4HLkGAMCF1aqQzMnJqfUJx40bV+fGAAAClyFzJhQwY247cg0A4C1/yjVfqFUh+cwzz9TqZIZhELgNwG1deijEaOTrZsDP7F3wE183AX7I8e9Safwbvm6G6ci1wEKuoSbkGmoSqLnmC7UqJM/OZgcAQJ350fO2yDUAgNf8KNd8wet7JAEAqBWzZqZroLPbAQACjM1zzePHfwAAAAAA7I0eSQCANWx+5RYAEGBsnmsUkgAASxhOk2a3a6CBCwAILHbPNYa2AgAAAAA8UqdC8oMPPtAvf/lL9e/fX99++60k6c9//rM2bdpkauMAAAHEaeJiMnINAOAxP841K3hcSL7++utKTU1V48aNtWPHDpWVlUmSCgsLNWPGDNMbCAAIEH4auOQaAKBO/DTXrOJxIfnEE09owYIFeuGFF9So0Y8P/73yyiv16aefmto4AADqG7kGAIDnPJ5sZ8+ePRowYEC19VFRUTp16pQZbQIABCB/nZSAXAMA1IW/5ppVPO6RjIuL09dff11t/aZNm9SxY0dTGgUACEBOw7zFROQaAKBO/DTXrOJxITlmzBg98MAD2rp1qwzD0JEjR7R06VJNmjRJv/vd7+qjjQAA1BtyDQAAz3k8tPWRRx6Rw+HQ9ddfrx9++EEDBgxQWFiYJk2apPvvv78+2ggACAR++uBmcg0AUCd+mmtW8biQNAxDjz32mB566CF9/fXXKi4uVvfu3dWsWbP6aB8AAPWKXAMAwHMeF5JnhYaGqnv37ma2BQAQwPx9UgJyDQDgCX/PtfrmcSF57bXXyjDOfUPoe++951WDAAAByk+HAJFrAIA68dNcs4rHhWSvXr3cvi8vL9fOnTv1xRdfKD093ax2AQBgCXINAADPeVxIPvPMMzWunzp1qoqLi71uEAAgQJk0BMjsK7fkGgCgTvw016zi8eM/zuWXv/ylXnrpJbNOBwAINE4TFwuQawCA82pguWY20wrJLVu2KDw83KzTAQDgU+QaAADn5vHQ1mHDhrl973Q6dfToUW3btk0ZGRmmNQwAEGD8dFICcg0AUCd+mmtW8biQjIqKcvs+KChIXbt2VVZWlm644QbTGgYACCz+Ok06uQYAqAt/zTWreFRIVlZW6q677lKPHj3UvHnz+moTAACWINcAAKgbj+6RDA4O1g033KBTp07VU3MAALAOuQYAQN14PNnOJZdcov3799dHWwAAsBy5BgCA5zwuJJ944glNmjRJa9eu1dGjR1VUVOS2AABQIz+dJp1cAwDUiZ/mmlVqfY9kVlaWHnzwQd14442SpFtuuUWGYbi2O51OGYahyspK81sJAGjw/G1SAnINAOANf8s1q9W6kJw2bZp++9vf6h//+Ed9tgcAAEuQawAA1F2tC0mns6pUHjhwYL01BgAQ4Pzoqiu5BgDwmh/lmtU8evzHfw/5AQDAI3744GZyDQBQZ36Ya1byqJDs0qXLBUP3xIkTXjUIAACrkGsAANSNR4XktGnTFBUVVV9tAQAEMH+clIBcAwDUlT/mmpU8KiRHjBih1q1b11dbAACBzA+HAJFrAIA688Ncs1KtnyPJfSQAgEBCrgEAUHcez9oKAEBd+NsQIHINAOANf8s1q9W6kHQ4HPXZDgBAoPOzIUDkGgDAK36Wa1ar9dBWAAAaupkzZ8owDI0fP961rrS0VPfdd59atGihZs2a6fbbb9exY8d810gAAGrJl7lGIQkAsIbTxKUOPvnkEy1cuFA9e/Z0Wz9hwgStWbNGr732mjZu3KgjR45o2LBhdXsRAIB92DzXKCQBAAGvuLhYaWlpeuGFF9S8eXPX+sLCQr344ouaM2eOrrvuOl122WVavHixNm/erI8++siHLQYA4Nz8IdcoJAEAljg7KYEZiyQVFRW5LWVlZed87fvuu0833XSTUlJS3NZv375d5eXlbuu7deumdu3aacuWLfXyOQAAAoPdc41CEgBgDZOHACUmJioqKsq1ZGdn1/iyy5Yt06efflrj9oKCAoWGhio6OtptfWxsrAoKCrx7vwCAwGbzXKv1rK0AAPiTQ4cOKTIy0vV9WFhYjfs88MADeueddxQeHm5l8wAA8EhDyzV6JAEA1jD5ym1kZKTbUlPgbt++XcePH1efPn0UEhKikJAQbdy4UTk5OQoJCVFsbKzOnDmjU6dOuR137NgxxcXFmf4RAAACiM1zjR5JAIAlfPHg5uuvv16ff/6527q77rpL3bp108MPP6zExEQ1atRI69ev1+233y5J2rNnj/Lz89W/f3/vGwsACFh2zzUKSQBAwIqIiNAll1zitq5p06Zq0aKFa/2oUaM0ceJExcTEKDIyUvfff7/69++vK664whdNBgDgnPwp1ygkAQDW8OJZWdXOY6JnnnlGQUFBuv3221VWVqbU1FQ9//zz5r4IACDw2DzXKCQBAJbwxRCgmmzYsMHt+/DwcD333HN67rnnvDsxAMBW7J5rTLYDAAAAAPAIPZIAAGv46RAgAADqxOa5Ro8kAAAAAMAj9EgCAKxh8yu3AIAAY/Nco5AEAFjC+M9ixnkAAPA1u+caQ1sBAAAAAB6hRxIAYA2bDwECAAQYm+cahSQAwBL+8rwtAADMYPdcY2grAAAAAMAj9EgCAKxh8yFAAIAAY/Nco5AEAFingYYlAAA1snGuMbQVAAAAAOAReiQBAJaw+6QEAIDAYvdco5AEAFjD5veSAAACjM1zjaGtAAAAAACP2L5H0jAMrVy5UkOHDq3V/lOnTtWqVau0c+fOem0X6tfNI/+lO353XDGtKrR/d2M9/3gb7dnZxNfNgoVarDmsFm8ecVt3JjZcB6f1dN/R6VSbZ/eq6T8L9e1vO6ukV3MLWxlY7D4EyCrkmj2RayDXrGf3XAvYHsmRI0fKMAwZhqFGjRopNjZWgwYN0ksvvSSHw+Ha7+jRo/rZz35madsOHjwowzAIbR8ZeMtJ3TPliJbOidN9qV20f3e4nnxlv6JalPu6abBYWUJj7ZvVy7XkP5RcbZ/o9cd80DKgOnIN50Ku4SxyDVYK2EJSkgYPHqyjR4/q4MGDevvtt3XttdfqgQce0JAhQ1RRUSFJiouLU1hYmI9bCisNu+dfWvdKjP7+aozyvwpXzsNtVfZvQ6k/P+HrpsFiziBDlVGhrsXRrJHb9rBDJWr+7lEV/LqDj1oYYJwmLjZFrqEm5BrOItcsZvNcC+hCMiwsTHFxcWrTpo369Omj3//+93rjjTf09ttvKzc3V1LVEKBVq1a5jnn44YfVpUsXNWnSRB07dlRGRobKy6tf0Vu4cKESExPVpEkTDR8+XIWFhW7bFy1apOTkZIWHh6tbt256/vnnXds6dKj6x9u7d28ZhqFrrrmmVsedOXNGY8eOVXx8vMLDw5WUlKTs7GwTPin7CGnkUOeeP+jTDyJc65xOQzs+iFD3y37wYcvgC6HHS9Xx4R1q//guxb24TyEnylzbjDOVintxn46PaK/KqFAftjJwnB0CZMZiV+Qa/he5hv9GrlnL7rlmu3skr7vuOl166aVasWKFRo8eXW17RESEcnNzlZCQoM8//1xjxoxRRESEJk+e7Nrn66+/1vLly7VmzRoVFRVp1KhRuvfee7V06VJJ0tKlS5WZmalnn31WvXv31o4dOzRmzBg1bdpU6enp+vjjj/WTn/xE7777ri6++GKFhobW6ricnBytXr1ay5cvV7t27XTo0CEdOnTonO+1rKxMZWU//gIpKioy62NssCJjKhUcIp36zv1H/+S/QpTYqewcRyEQ/btDM5Wld9SZ2HCFFJ5RizePKPHpPB3M7CFneLBavZav0osiuHcEfo9cszdyDWeRa7Ca7QpJSerWrZs+++yzGrc9/vjjrq/bt2+vSZMmadmyZW6BW1paqiVLlqhNmzaSpHnz5ummm27S7NmzFRcXpylTpmj27NkaNmyYpKortbt379bChQuVnp6uVq1aSZJatGihuLg413kvdFx+fr46d+6sq666SoZhKCkp6bzvMzs7W9OmTavDJwQEvh8uiXZ9faZtE5V2aKYOv9+liO0nVNksRE2+LNI3j13iuwYGIptPk16fyDUA5JoP2DzXbFlIOp1OGYZR47ZXX31VOTk52rdvn4qLi1VRUaHIyEi3fdq1a+cKW0nq37+/HA6H9uzZo4iICO3bt0+jRo3SmDFjXPtUVFQoKirqnG0qKSm54HEjR47UoEGD1LVrVw0ePFhDhgzRDTfccM5zPvroo5o4caLr+6KiIiUmJp5zfzsoOhGsygopulWF2/rmLSt08jtb/nPAfziahKg8Nlyhx0tlfOtQo3+VqdPE7W77JCz8Sv/uFKHDD1afvAC1YPPArU/kmn2RazgXcs0CNs81W/6GycvLc93P8d+2bNmitLQ0TZs2TampqYqKitKyZcs0e/bsWp+7uLhYkvTCCy+oX79+btuCg4O9Oq5Pnz46cOCA3n77bb377rsaPny4UlJS9Ne//rXGc4aFhTHhwv+oKA/SV581Ue+rTmvLuqo/ZAzDqV5XFWt1bgsftw6+ZJRWqtF3paro10KnL4tR4ZWt3La3n/6Fvvu/diruyZAg+B9yzb7INZwLuYb6ZrtC8r333tPnn3+uCRMmVNu2efNmJSUl6bHHHnOt++abb6rtl5+fryNHjighIUGS9NFHHykoKEhdu3ZVbGysEhIStH//fqWlpdXYhrP3jlRWVrrW1eY4SYqMjNSdd96pO++8U3fccYcGDx6sEydOKCYmpnYfALTiTy01ae4h7d3VRHt2NNFtY75TeBOH/r6Mz9BOWv41XyU9o1UeE1Z1L8mab+UMMnS6bwtVRjSqcSKC8pgwVbTkj9i6svvztuoLuQZyDRK55gt2z7WALiTLyspUUFCgyspKHTt2TOvWrVN2draGDBmiX//619X279y5s/Lz87Vs2TL17dtXb775plauXFltv/DwcKWnp+vpp59WUVGRxo0bp+HDh7vuC5k2bZrGjRunqKgoDR48WGVlZdq2bZtOnjypiRMnqnXr1mrcuLHWrVuntm3bKjw8XFFRURc8bs6cOYqPj1fv3r0VFBSk1157TXFxcYqOjq7vjzKgbFzdXFEtKvXrhwrUvFWF9v+zsR5L66BT/2p04YMRMEJOnVH8i/sUVFKhymYh+nenCB16uLsqI/g5qDc2HwJkBnINNSHXIJFrPmHzXAvoQnLdunWKj49XSEiImjdvrksvvVQ5OTlKT09XUFD1J5/ccsstmjBhgsaOHauysjLddNNNysjI0NSpU93269Spk4YNG6Ybb7xRJ06c0JAhQ9ymMx89erSaNGmiP/zhD3rooYfUtGlT9ejRQ+PHj5ckhYSEKCcnR1lZWcrMzNTVV1+tDRs2XPC4iIgIPfXUU/rqq68UHBysvn376q233qrxveD8Vi9uqdWLW/q6GfChgtGdPNp/74Kf1FNLgNoj13Au5BrINVjNcDqdDbQGhqeKiooUFRWla3SrQgyuTsEdgYKaOP5dqsPjM1VYWFhtgpbaOvu7p9evnlRwaLjXbao8U6qdf37MqzYhMJBrOB9yDTUh18zDJT8AAAAAgEcCemgrAMCP2PxeEgBAgLF5rlFIAgAsYffZ7QAAgcXuucbQVgAAAACAR+iRBABYw+ZDgAAAAcbmuUYhCQCwhN2HAAEAAovdc42hrQAAAAAAj9AjCQCwhs2HAAEAAozNc41CEgBgCbsPAQIABBa75xpDWwEAAAAAHqFHEgBgDZsPAQIABBib5xqFJADAMg11+A4AADWxc64xtBUAAAAA4BF6JAEA1nA6qxYzzgMAgK/ZPNfokQQAAAAAeIQeSQCAJew+TToAILDYPdcoJAEA1rD57HYAgABj81xjaCsAAAAAwCP0SAIALGE4qhYzzgMAgK/ZPdcoJAEA1rD5ECAAQICxea4xtBUAAAAA4BF6JAEAlrD77HYAgMBi91yjkAQAWMPmD24GAAQYm+caQ1sBAAAAAB6hRxIAYAm7DwECAAQWu+caPZIAAAAAAI/QIwkAsIbNp0kHAAQYm+cahSQAwBJ2HwIEAAgsds81hrYCAAAAADxCjyQAwBo2nyYdABBgbJ5rFJIAAEvYfQgQACCw2D3XGNoKAAAAAPAIPZIAAGvYfHY7AECAsXmuUUgCACxh9yFAAIDAYvdcY2grAAAAAMAj9EgCAKzhcFYtZpwHAABfs3muUUgCAKxh83tJAAABxua5xtBWAAAAAIBH6JEEAFjCkEmTEnh/CgAAvGb3XKNHEgAAAADgEXokAQDWcDqrFjPOAwCAr9k81ygkAQCWsPvztgAAgcXuucbQVgBAwMrOzlbfvn0VERGh1q1ba+jQodqzZ4/bPqWlpbrvvvvUokULNWvWTLfffruOHTvmoxYDAHBu/pRrFJIAAGs4TVxqaePGjbrvvvv00Ucf6Z133lF5ebluuOEGlZSUuPaZMGGC1qxZo9dee00bN27UkSNHNGzYMK/fLgAgwNk81xjaCgCwhOF0yjDhPhBPzrFu3Tq373Nzc9W6dWtt375dAwYMUGFhoV588UW98soruu666yRJixcvVnJysj766CNdccUVXrcXABCY7J5r9EgCABqkoqIit6WsrOyCxxQWFkqSYmJiJEnbt29XeXm5UlJSXPt069ZN7dq105YtW+qn4QAA1KCh5RqFJADAGg4TF0mJiYmKiopyLdnZ2ed/eYdD48eP15VXXqlLLrlEklRQUKDQ0FBFR0e77RsbG6uCggLv3zMAIHDZPNcY2goAsITZQ4AOHTqkyMhI1/qwsLDzHnfffffpiy++0KZNm7xuAwAAds81CkkAQIMUGRnpFrjnM3bsWK1du1bvv/++2rZt61ofFxenM2fO6NSpU25Xb48dO6a4uDizmwwAwDk1tFxjaCsAwBo+mN3O6XRq7NixWrlypd577z116NDBbftll12mRo0aaf369a51e/bsUX5+vvr371+39wkAsAeb5xo9kgCAgHXffffplVde0RtvvKGIiAjX/SFRUVFq3LixoqKiNGrUKE2cOFExMTGKjIzU/fffr/79+zNjKwDA7/hTrlFIAgCs4XRWLWacp5bmz58vSbrmmmvc1i9evFgjR46UJD3zzDMKCgrS7bffrrKyMqWmpur555/3vp0AgMBm81yjkAQAWMJwVi1mnKe2nLUI5/DwcD333HN67rnnvGgVAMBu7J5r3CMJAAAAAPAIPZIAAGv4YAgQAAD1xua5RiEJALCE4ahazDgPAAC+ZvdcY2grAAAAAMAj9EgCAKxh8yFAAIAAY/Nco5AEAFjDw4cun/c8AAD4ms1zjULSRs5OF1yh8gb7A4v64/h3qa+bAD/kKK36uajNdOOA1cg1nA+5hpqQa+ahkLSR06dPS5I26S0ftwR+afwbvm4B/Njp06cVFRXl1TkMp1OGCcFtxjkQGMg1nBe5hvMg17xHIWkjCQkJOnTokCIiImQYhq+b43NFRUVKTEzUoUOHFBkZ6evmwE/wc+HO6XTq9OnTSkhIMONktr6XBOYj19zx+ws14efCHblmHgpJGwkKClLbtm193Qy/ExkZyS9WVMPPxY+8vWIL1BdyrWb8/kJN+Ln4EblmDgpJAIA1nJLMeFZWw7xwCwAINDbPNZ4jCQAAAADwCD2SsK2wsDBNmTJFYWFhvm4K/Ag/F/XH7pMSAPWN31+oCT8X9cfuuWY4mfsWAFCPioqKFBUVpet6PaKQYO//kKmoLNN7O2eqsLCQ+30AAJYj16owtBUAAAAA4BGGtgIArGHzadIBAAHG5rlGIQkAsIZDkhmP+jNjhjwAALxl81xjaCsAAAAAwCMUkgho11xzjcaPH1/r/Tds2CDDMHTq1Kl6axPqh2EYWrVqVa33nzp1qnr16lVv7UF1Z2e3M2MB7Ipcsw9yzf/ZPdcoJFEvRo4cKcMwNHPmTLf1q1atkmF4NwYgNzdXhmHIMAwFBwerefPm6tevn7KyslRYWOi274oVKzR9+nSvXq8u2rdvr7lz51r+uoHo7M+SYRhq1KiRYmNjNWjQIL300ktyOH4cC3L06FH97Gc/s7RtBw8elGEY2rlzp6Wv22CdvZfEjAWwGLlGrpmFXAsgNs81CknUm/DwcM2aNUsnT540/dyRkZE6evSoDh8+rM2bN+uee+7RkiVL1KtXLx05csS1X0xMjCIiIkx/fVhr8ODBOnr0qA4ePKi3335b1157rR544AENGTJEFRUVkqS4uDiekQWgXpFrMAu5hkBAIYl6k5KSori4OGVnZ593v9dff10XX3yxwsLC1L59e82ePfuC5zYMQ3FxcYqPj1dycrJGjRqlzZs3q7i4WJMnT3bt979DgP785z/r8ssvV0REhOLi4vSLX/xCx48fr3b+Dz/8UD179lR4eLiuuOIKffHFF27bN23apKuvvlqNGzdWYmKixo0bp5KSEtdrfvPNN5owYYLrimNtjpOk559/Xp07d1Z4eLhiY2N1xx13XPCzsIOwsDDFxcWpTZs26tOnj37/+9/rjTfe0Ntvv63c3FxJ1YcAPfzww+rSpYuaNGmijh07KiMjQ+Xl5dXOvXDhQiUmJqpJkyYaPnx4tav/ixYtUnJyssLDw9WtWzc9//zzrm0dOnSQJPXu3VuGYeiaa66p1XFnzpzR2LFjFR8fr/DwcCUlJV3w30lAsPmVWzR85Bq5ZhZyLUDYPNcoJFFvgoODNWPGDM2bN0+HDx+ucZ/t27dr+PDhGjFihD7//HNNnTpVGRkZrl+inmjdurXS0tK0evVqVVZW1rhPeXm5pk+frl27dmnVqlU6ePCgRo4cWW2/hx56SLNnz9Ynn3yiVq1a6eabb3b9st63b58GDx6s22+/XZ999pleffVVbdq0SWPHjpVUNeyobdu2ysrK0tGjR3X06NFaHbdt2zaNGzdOWVlZ2rNnj9atW6cBAwZ4/DnYxXXXXadLL71UK1asqHF7RESEcnNztXv3bv3xj3/UCy+8oGeeecZtn6+//lrLly/XmjVrtG7dOu3YsUP33nuva/vSpUuVmZmpJ598Unl5eZoxY4YyMjL08ssvS5I+/vhjSdK7776ro0ePutpyoeNycnK0evVqLV++XHv27NHSpUvVvn17sz8iACYj18i1+kSuoaHh8R+oV7fddpt69eqlKVOm6MUXX6y2fc6cObr++uuVkZEhSerSpYt2796tP/zhDzUG4YV069ZNp0+f1vfff6/WrVtX23733Xe7vu7YsaNycnLUt29fFRcXq1mzZq5tU6ZM0aBBgyRJL7/8stq2bauVK1dq+PDhys7OVlpamuuKcOfOnZWTk6OBAwdq/vz5iomJUXBwsOvq8FkXOi4/P19NmzbVkCFDFBERoaSkJPXu3dvjz8BOunXrps8++6zGbY8//rjr6/bt22vSpElatmyZ25X90tJSLVmyRG3atJEkzZs3TzfddJNmz56tuLg4TZkyRbNnz9awYcMkVV2p3b17txYuXKj09HS1atVKktSiRQu3/9cXOi4/P1+dO3fWVVddJcMwlJSUZO4H469s/rwtBAZyjVyrT+RaA2PzXKOQRL2bNWuWrrvuOk2aNKnatry8PN16661u66688krNnTtXlZWVCg4O9ui1nP/5h3iuiQ+2b9+uqVOnateuXTp58qTrpvb8/Hx1797dtV///v1dX8fExKhr167Ky8uTJO3atUufffaZli5d6va6DodDBw4cUHJyco2vfaHjBg0apKSkJHXs2FGDBw/W4MGDddttt6lJkyYefQZ24nQ6z/n/+tVXX1VOTo727dun4uJiVVRUKDIy0m2fdu3aucJWqvr/7nA4tGfPHkVERGjfvn0aNWqUxowZ49qnoqJCUVFR52xTSUnJBY8bOXKkBg0apK5du2rw4MEaMmSIbrjhhjp9Bg2KzZ+3hcBBrqlWx5FrniPXGhib5xqFJOrdgAEDlJqaqkcffbROV2M9kZeXp8jISLVo0aLatpKSEqWmpio1NVVLly5Vq1atlJ+fr9TUVJ05c6bWr1FcXKzf/OY3GjduXLVt7dq1q/NxoaGh+vTTT7Vhwwb9/e9/V2ZmpqZOnapPPvlE0dHRtW6fneTl5bnu5/hvW7ZsUVpamqZNm6bU1FRFRUVp2bJltbpP6azi4mJJ0gsvvKB+/fq5bTvfH4K1Oa5Pnz46cOCA3n77bb377rsaPny4UlJS9Ne//rXW7QPgO+Ra7Y4j1zxHrqEhoZCEJWbOnKlevXqpa9eubuuTk5P14Ycfuq378MMP1aVLF4+v2h4/flyvvPKKhg4dqqCg6rf/fvnll/r+++81c+ZMJSYmSqq6f6MmH330kSs8T548qb1797quyPbp00e7d+9Wp06dztmW0NDQavez1Oa4kJAQpaSkKCUlRVOmTFF0dLTee+8911AS/Oi9997T559/rgkTJlTbtnnzZiUlJemxxx5zrfvmm2+q7Zefn68jR44oISFBUtX/96CgIHXt2lWxsbFKSEjQ/v37lZaWVmMbQkNDJcnt/3VtjpOqZmi88847deedd+qOO+7Q4MGDdeLECcXExNTuA2iAzHpWVkN93hYCC7lGrpmNXGt47J5rFJKwRI8ePZSWlqacnBy39Q8++KD69u2r6dOn684779SWLVv07LPPus0EVhOn06mCggI5nU6dOnVKW7Zs0YwZMxQVFVXtGV9nnb06Om/ePP32t7/VF198cc5ncWVlZalFixaKjY3VY489ppYtW2ro0KGSqmZNu+KKKzR27FiNHj1aTZs21e7du/XOO+/o2WeflVR178L777+vESNGKCwsTC1btrzgcWvXrtX+/fs1YMAANW/eXG+99ZYcDke1P1LsqKysTAUFBaqsrNSxY8e0bt06ZWdna8iQIfr1r39dbf/OnTsrPz9fy5YtU9++ffXmm29q5cqV1fYLDw9Xenq6nn76aRUVFWncuHEaPny4676QadOmady4cYqKitLgwYNVVlambdu26eTJk5o4caJat26txo0ba926dWrbtq3Cw8MVFRV1wePmzJmj+Ph49e7dW0FBQXrttdcUFxcX+FfobX4vCQILuUaueYNcCxA2zzVmbYVlsrKy3B60K1VdzVy+fLmWLVumSy65RJmZmcrKyrrgUKGioiLFx8erTZs26t+/v+tm7x07dig+Pr7GY1q1aqXc3Fy99tpr6t69u2bOnKmnn366xn1nzpypBx54QJdddpkKCgq0Zs0a11W6nj17auPGjdq7d6+uvvpq9e7dW5mZma6rf2ff68GDB3XRRRe5bly/0HHR0dFasWKFrrvuOiUnJ2vBggX6y1/+oosvvrhWn28gW7duneLj49W+fXsNHjxY//jHP5STk6M33nijxiv8t9xyiyZMmKCxY8eqV69e2rx5s2vii//WqVMnDRs2TDfeeKNuuOEG9ezZ0+2PvdGjR2vRokVavHixevTooYEDByo3N9c17CgkJEQ5OTlauHChEhISXPdFXei4iIgIPfXUU7r88svVt29fHTx4UG+99VaNPQ4A/Be5Rq7VFbmGQGA4nQ20BAYANAhFRUWKiopSykXjFRLs/cO1KyrL9O6+uSosLKw20QQAAPWNXKvC0FYAgDVsPgQIABBgbJ5r9DcDAAAAADxCjyQAwCImXblVw7xyCwAINPbONQpJAIA1bD4ECAAQYGyeawxtBQAAAAB4hB5JAIA1HE6ZMnzH0TCv3AIAAozNc40eSQAAAACAR+iRBABYw+moWsw4DwAAvmbzXKNHEmggRo4cqaFDh7q+v+aaazR+/HjL27FhwwYZhqFTp06dcx/DMLRq1apan3Pq1Knq1auXV+06ePCgDMPQzp07vToP6tHZSQnMWAA0eOTa+ZFrDYDNc41CEvDCyJEjZRiGDMNQaGioOnXqpKysLFVUVNT7a69YsULTp0+v1b61CUkAAMg1ALXF0FbAS4MHD9bixYtVVlamt956S/fdd58aNWqkRx99tNq+Z86cUWhoqCmvGxMTY8p5AMvYfFICoKEg14Basnmu0SMJeCksLExxcXFKSkrS7373O6WkpGj16tWSfhy28+STTyohIUFdu3aVJB06dEjDhw9XdHS0YmJidOutt+rgwYOuc1ZWVmrixImKjo5WixYtNHnyZDn/Z9jD/w4BKisr08MPP6zExESFhYWpU6dOevHFF3Xw4EFde+21kqTmzZvLMAyNHDlSkuRwOJSdna0OHTqocePGuvTSS/XXv/7V7XXeeustdenSRY0bN9a1117r1s7aevjhh9WlSxc1adJEHTt2VEZGhsrLy6vtt3DhQiUmJqpJkyYaPny4CgsL3bYvWrRIycnJCg8PV7du3fT888973Bb4kM2HAAENBbl2YeQaJNk+1ygkAZM1btxYZ86ccX2/fv167dmzR++8847Wrl2r8vJypaamKiIiQh988IE+/PBDNWvWTIMHD3YdN3v2bOXm5uqll17Spk2bdOLECa1cufK8r/vrX/9af/nLX5STk6O8vDwtXLhQzZo1U2Jiol5//XVJ0p49e3T06FH98Y9/lCRlZ2dryZIlWrBggf75z39qwoQJ+uUvf6mNGzdKqvrDYNiwYbr55pu1c+dOjR49Wo888ojHn0lERIRyc3O1e/du/fGPf9QLL7ygZ555xm2fr7/+WsuXL9eaNWu0bt067dixQ/fee69r+9KlS5WZmaknn3xSeXl5mjFjhjIyMvTyyy973B4AQO2Ra9WRawBDWwHTOJ1OrV+/Xn/72990//33u9Y3bdpUixYtcg39+X//7//J4XBo0aJFMgxDkrR48WJFR0drw4YNuuGGGzR37lw9+uijGjZsmCRpwYIF+tvf/nbO1967d6+WL1+ud955RykpKZKkjh07urafHS7UunVrRUdHS6q60jtjxgy9++676t+/v+uYTZs2aeHChRo4cKDmz5+viy66SLNnz5Ykde3aVZ9//rlmzZrl0Wfz+OOPu75u3769Jk2apGXLlmny5Mmu9aWlpVqyZInatGkjSZo3b55uuukmzZ49W3FxcZoyZYpmz57t+kw6dOig3bt3a+HChUpPT/eoPfARp8y56towL9wCDQ65dm7kGiTZPtcoJAEvrV27Vs2aNVN5ebkcDod+8YtfaOrUqa7tPXr0cLt/ZNeuXfr6668VERHhdp7S0lLt27dPhYWFOnr0qPr16+faFhISossvv7zaMKCzdu7cqeDgYA0cOLDW7f7666/1ww8/aNCgQW7rz5w5o969e0uS8vLy3NohyRXOnnj11VeVk5Ojffv2qbi4WBUVFYqMjHTbp127dq6wPfs6DodDe/bsUUREhPbt26dRo0ZpzJgxrn0qKioUFRXlcXvgI2YN32mgQ4CAhoJcuzByDZJsn2sUkoCXrr32Ws2fP1+hoaFKSEhQSIj7P6umTZu6fV9cXKzLLrtMS5curXauVq1a1akNjRs39viY4uJiSdKbb77pFnRS1f0xZtmyZYvS0tI0bdo0paamKioqSsuWLXNdDfakrS+88EK1PwCCg4NNaysAgFy7EHINqEIhCXipadOm6tSpU63379Onj1599VW1bt262tXLs+Lj47V161YNGDBAUtUVyu3bt6tPnz417t+jRw85HA5t3LjRNQTov529clxZWela1717d4WFhSk/P/+cV3yTk5NdEyyc9dFHH134Tf6XzZs3KykpSY899phr3TfffFNtv/z8fB05ckQJCQmu1wkKClLXrl0VGxurhIQE7d+/X2lpaR69PvyIwyHJhIcuOxrmg5uBhoJcOz9yDS42zzUm2wEslpaWppYtW+rWW2/VBx98oAMHDmjDhg0aN26cDh8+LEl64IEHNHPmTK1atUpffvml7r333vM+K6t9+/ZKT0/X3XffrVWrVrnOuXz5cklSUlKSDMPQ2rVr9d1336m4uFgRERGaNGmSJkyYoJdffln79u3Tp59+qnnz5rlu9P/tb3+rr776Sg899JD27NmjV155Rbm5uR69386dOys/P1/Lli3Tvn37lJOTU+MEC+Hh4UpPT9euXbv0wQcfaNy4cRo+fLji4uIkSdOmTVN2drZycnK0d+9eff7551q8eLHmzJnjUXsAAOYi18g12BOFJGCxJk2a6P3331e7du00bNgwJScna9SoUSotLXVdyX3wwQf1q1/9Sunp6erfv78iIiJ02223nfe88+fP1x133KF7771X3bp105gxY1RSUiJJatOmjaZNm6ZHHnlEsbGxGjt2rCRp+vTpysjIUHZ2tpKTkzV48GC9+eab6tChg6Sq+ztef/11rVq1SpdeeqkWLFigGTNmePR+b7nlFk2YMEFjx45Vr169tHnzZmVkZFTbr1OnTho2bJhuvPFG3XDDDerZs6fbNOijR4/WokWLtHjxYvXo0UMDBw5Ubm6uq61oAGw+TToQqMg1cs22bJ5rhvNcdzkDAGCCoqIiRUVFKaXl3QoJ8v7B5RWOM3r3Xy+psLDwnMPoAACoL+RaFXokAQAAAAAeYbIdAIA1HE6Z8rAsBwNpAAB+wOa5RiEJALCE0+mQ0+n9zHRmnAMAAG/ZPdcY2goAAAAA8Ag9kgAAazid5gzfYY44AIA/sHmuUUgCAKzhNOlekgYauACAAGPzXGNoKwAAAADAI/RIAgCs4XBIhgkTCjTQSQkAAAHG5rlGIQkAsIbNhwABAAKMzXONoa0AAAAAAI/QIwkAsITT4ZDThCFADfV5WwCAwGL3XKNHEgAAAADgEXokAQDWsPm9JACAAGPzXKOQBABYw+GUDPsGLgAgwNg81xjaCgAAAADwCD2SAABrOJ2SzHjeVsO8cgsACDA2zzUKSQCAJZwOp5wmDAFyNtDABQAEFrvnGkNbAQAAAAAeoUcSAGANp0PmDAFqmM/bAgAEGJvnGj2SAABLOB1O0xZPPffcc2rfvr3Cw8PVr18/ffzxx/XwDgEAdmL3XKOQBAAEtFdffVUTJ07UlClT9Omnn+rSSy9Vamqqjh8/7uumAQDgMX/JNQpJAIA1nA7zFg/MmTNHY8aM0V133aXu3btrwYIFatKkiV566aV6eqMAAFuwea5xjyQAwBIVKpdMmJiuQuWSpKKiIrf1YWFhCgsLc1t35swZbd++XY8++qhrXVBQkFJSUrRlyxbvGwMAsC275xqFJACgXoWGhiouLk6bCt4y7ZzNmjVTYmKi27opU6Zo6tSpbuv+9a9/qbKyUrGxsW7rY2Nj9eWXX5rWHgCAfZBrVSgkAQD1Kjw8XAcOHNCZM2dMO6fT6ZRhGG7r/veqLQAA9YFcq0IhCQCod+Hh4QoPD7f8dVu2bKng4GAdO3bMbf2xY8cUFxdneXsAAIGBXGOyHQBAAAsNDdVll12m9evXu9Y5HA6tX79e/fv392HLAADwnD/lGj2SAICANnHiRKWnp+vyyy/XT37yE82dO1clJSW66667fN00AAA85i+5RiEJAAhod955p7777jtlZmaqoKBAvXr10rp166pNVAAAQEPgL7lmOJ1OEyatBQAAAADYBfdIAgAAAAA8QiEJAAAAAPAIhSQAAAAAwCMUkgAAAAAAj1BIAgAAAAA8QiEJAAAAAPAIhSQAAAAAwCMUkgAAAAAAj1BIAgAAAAA8QiEJAAAAAPAIhSQAAAAAwCP/H6a6QsVMBTCuAAAAAElFTkSuQmCC", + "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=[\"No Diabetes\", \"Diabetes\"]\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": [ + "В желтых квадрате мы наблюдаем значение 100, что обозначает количество правильно классифицированных объектов, отнесенных к классу \"No Diabetes\". Это свидетельствует о том, что модель успешно идентифицирует объекты этого класса, минимизируя количество ложных положительных срабатываний.\n", + "\n", + "В бирюзовом квадрате значение 0 указывает на количество правильно классифицированных объектов, отнесенных к классу \"Diabetes\". Это является показателем не такой высокой точности модели в определении объектов данного класса." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Определение достижимого уровня качества модели для второй задачи (задача регрессии)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(700, 8)\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PregnanciesGlucoseBloodPressureSkinThicknessInsulinBMIDiabetesPedigreeFunctionAge
0698583319034.00.43043
121127532035.70.14821
22108640030.80.15821
38107800024.60.85634
47136900029.90.21050
...........................
6952105804519133.70.71129
6961126562915228.70.80121
69729554148826.10.74822
698310068238131.60.94928
6991856629026.60.35131
\n", + "

700 rows × 8 columns

\n", + "
" + ], + "text/plain": [ + " Pregnancies Glucose BloodPressure SkinThickness Insulin BMI \\\n", + "0 6 98 58 33 190 34.0 \n", + "1 2 112 75 32 0 35.7 \n", + "2 2 108 64 0 0 30.8 \n", + "3 8 107 80 0 0 24.6 \n", + "4 7 136 90 0 0 29.9 \n", + ".. ... ... ... ... ... ... \n", + "695 2 105 80 45 191 33.7 \n", + "696 1 126 56 29 152 28.7 \n", + "697 2 95 54 14 88 26.1 \n", + "698 3 100 68 23 81 31.6 \n", + "699 1 85 66 29 0 26.6 \n", + "\n", + " DiabetesPedigreeFunction Age \n", + "0 0.430 43 \n", + "1 0.148 21 \n", + "2 0.158 21 \n", + "3 0.856 34 \n", + "4 0.210 50 \n", + ".. ... ... \n", + "695 0.711 29 \n", + "696 0.801 21 \n", + "697 0.748 22 \n", + "698 0.949 28 \n", + "699 0.351 31 \n", + "\n", + "[700 rows x 8 columns]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "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 для воспроизводимости результатов\n", + "random_state = 42\n", + "set_config(transform_output=\"pandas\")\n", + "\n", + "df = pd.read_csv(\"C:/Users/TIGR228/Desktop/МИИ/Lab1/AIM-PIbd-31-Afanasev-S-S/static/csv/diabetes.csv\")\n", + "\n", + "# Удалите столбцы, которые не нужны для анализа\n", + "df = df.drop(columns=[\"Outcome\"])\n", + "\n", + "df = df.sample(n=700, random_state=random_state).reset_index(drop=True)\n", + "\n", + "print(df.shape) \n", + "display(df)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 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", + " DiabetesPedigreeFunction Age diabetes_risk_index \n", + "0 0.627 50 71.68 \n", + "1 0.351 31 46.28 \n", + "2 0.672 32 74.69 \n", + "3 0.167 21 55.33 \n", + "4 2.288 33 81.43 \n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "df = pd.read_csv(\"C:/Users/TIGR228/Desktop/МИИ/Lab1/AIM-PIbd-31-Afanasev-S-S/static/csv/diabetes.csv\")\n", + "\n", + "required_columns = [\"Pregnancies\", \"Glucose\", \"BloodPressure\", \"SkinThickness\", \"Insulin\", \"BMI\", \"DiabetesPedigreeFunction\", \"Age\"]\n", + "missing_columns = [col for col in required_columns if col not in df.columns]\n", + "if missing_columns:\n", + " raise ValueError(f\"Отсутствуют столбцы: {missing_columns}\")\n", + "\n", + "df[\"diabetes_risk_index\"] = (\n", + " df[\"Glucose\"] * 0.3 \n", + " + df[\"BMI\"] * 0.3 \n", + " + df[\"Age\"] * 0.2 \n", + " + df[\"BloodPressure\"] * 0.1 \n", + " + df[\"Insulin\"] * 0.1 \n", + ")\n", + "\n", + "# Проверка новых данных\n", + "print(df[[\"Pregnancies\", \"Glucose\", \"BloodPressure\", \"SkinThickness\", \"Insulin\", \"BMI\", \"DiabetesPedigreeFunction\", \"Age\", \"diabetes_risk_index\"]].head())\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Разделение набора данных на обучающую и тестовые выборки (80/20) для задачи регрессии " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "aimenv", + "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.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}