1492 lines
801 KiB
Plaintext
Raw Normal View History

2024-12-20 22:24:20 +04:00
{
"cells": [
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Размеры датасета: (5110, 12)\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>id</th>\n",
" <th>gender</th>\n",
" <th>age</th>\n",
" <th>hypertension</th>\n",
" <th>heart_disease</th>\n",
" <th>ever_married</th>\n",
" <th>work_type</th>\n",
" <th>Residence_type</th>\n",
" <th>avg_glucose_level</th>\n",
" <th>bmi</th>\n",
" <th>smoking_status</th>\n",
" <th>stroke</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>9046</td>\n",
" <td>Male</td>\n",
" <td>67.0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>Yes</td>\n",
" <td>Private</td>\n",
" <td>Urban</td>\n",
" <td>228.69</td>\n",
" <td>36.6</td>\n",
" <td>formerly smoked</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>51676</td>\n",
" <td>Female</td>\n",
" <td>61.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>Yes</td>\n",
" <td>Self-employed</td>\n",
" <td>Rural</td>\n",
" <td>202.21</td>\n",
" <td>NaN</td>\n",
" <td>never smoked</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>31112</td>\n",
" <td>Male</td>\n",
" <td>80.0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>Yes</td>\n",
" <td>Private</td>\n",
" <td>Rural</td>\n",
" <td>105.92</td>\n",
" <td>32.5</td>\n",
" <td>never smoked</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>60182</td>\n",
" <td>Female</td>\n",
" <td>49.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>Yes</td>\n",
" <td>Private</td>\n",
" <td>Urban</td>\n",
" <td>171.23</td>\n",
" <td>34.4</td>\n",
" <td>smokes</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1665</td>\n",
" <td>Female</td>\n",
" <td>79.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>Yes</td>\n",
" <td>Self-employed</td>\n",
" <td>Rural</td>\n",
" <td>174.12</td>\n",
" <td>24.0</td>\n",
" <td>never smoked</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" id gender age hypertension heart_disease ever_married \\\n",
"0 9046 Male 67.0 0 1 Yes \n",
"1 51676 Female 61.0 0 0 Yes \n",
"2 31112 Male 80.0 0 1 Yes \n",
"3 60182 Female 49.0 0 0 Yes \n",
"4 1665 Female 79.0 1 0 Yes \n",
"\n",
" work_type Residence_type avg_glucose_level bmi smoking_status \\\n",
"0 Private Urban 228.69 36.6 formerly smoked \n",
"1 Self-employed Rural 202.21 NaN never smoked \n",
"2 Private Rural 105.92 32.5 never smoked \n",
"3 Private Urban 171.23 34.4 smokes \n",
"4 Self-employed Rural 174.12 24.0 never smoked \n",
"\n",
" stroke \n",
"0 1 \n",
"1 1 \n",
"2 1 \n",
"3 1 \n",
"4 1 "
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Импорт необходимых библиотек\n",
"import pandas as pd\n",
"import numpy as np\n",
"import seaborn as sns\n",
"import matplotlib.pyplot as plt\n",
"\n",
"# Загрузка данных\n",
"data = pd.read_csv(\"data/healthcare-dataset-stroke-data.csv\")\n",
"\n",
"# Первичный обзор данных\n",
"print(\"Размеры датасета:\", data.shape)\n",
"data.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Конструирование признаков"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Обработка данных завершена. Размеры итогового датасета: (5110, 12)\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>id</th>\n",
" <th>gender</th>\n",
" <th>age</th>\n",
" <th>hypertension</th>\n",
" <th>heart_disease</th>\n",
" <th>ever_married</th>\n",
" <th>work_type</th>\n",
" <th>Residence_type</th>\n",
" <th>avg_glucose_level</th>\n",
" <th>bmi</th>\n",
" <th>smoking_status</th>\n",
" <th>stroke</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>9046</td>\n",
" <td>0.0</td>\n",
" <td>0.816895</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>0.801265</td>\n",
" <td>0.301260</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>51676</td>\n",
" <td>1.0</td>\n",
" <td>0.743652</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>0.679023</td>\n",
" <td>NaN</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>31112</td>\n",
" <td>0.0</td>\n",
" <td>0.975586</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>0.234512</td>\n",
" <td>0.254296</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>60182</td>\n",
" <td>1.0</td>\n",
" <td>0.597168</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>0.536008</td>\n",
" <td>0.276060</td>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1665</td>\n",
" <td>1.0</td>\n",
" <td>0.963379</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>0.549349</td>\n",
" <td>0.156930</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5105</th>\n",
" <td>18234</td>\n",
" <td>1.0</td>\n",
" <td>0.975586</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>0.132167</td>\n",
" <td>NaN</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5106</th>\n",
" <td>44873</td>\n",
" <td>1.0</td>\n",
" <td>0.987793</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" <td>0.323516</td>\n",
" <td>0.340206</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5107</th>\n",
" <td>19723</td>\n",
" <td>1.0</td>\n",
" <td>0.426270</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>0.128658</td>\n",
" <td>0.232532</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5108</th>\n",
" <td>37544</td>\n",
" <td>0.0</td>\n",
" <td>0.621582</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>0.513203</td>\n",
" <td>0.175258</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5109</th>\n",
" <td>44679</td>\n",
" <td>1.0</td>\n",
" <td>0.536133</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0.139230</td>\n",
" <td>0.182131</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5110 rows × 12 columns</p>\n",
"</div>"
],
"text/plain": [
" id gender age hypertension heart_disease ever_married \\\n",
"0 9046 0.0 0.816895 0 1 1 \n",
"1 51676 1.0 0.743652 0 0 1 \n",
"2 31112 0.0 0.975586 0 1 1 \n",
"3 60182 1.0 0.597168 0 0 1 \n",
"4 1665 1.0 0.963379 1 0 1 \n",
"... ... ... ... ... ... ... \n",
"5105 18234 1.0 0.975586 1 0 1 \n",
"5106 44873 1.0 0.987793 0 0 1 \n",
"5107 19723 1.0 0.426270 0 0 1 \n",
"5108 37544 0.0 0.621582 0 0 1 \n",
"5109 44679 1.0 0.536133 0 0 1 \n",
"\n",
" work_type Residence_type avg_glucose_level bmi smoking_status \\\n",
"0 2 1 0.801265 0.301260 1 \n",
"1 3 0 0.679023 NaN 2 \n",
"2 2 0 0.234512 0.254296 2 \n",
"3 2 1 0.536008 0.276060 3 \n",
"4 3 0 0.549349 0.156930 2 \n",
"... ... ... ... ... ... \n",
"5105 2 1 0.132167 NaN 2 \n",
"5106 3 1 0.323516 0.340206 2 \n",
"5107 3 0 0.128658 0.232532 2 \n",
"5108 2 0 0.513203 0.175258 1 \n",
"5109 0 1 0.139230 0.182131 0 \n",
"\n",
" stroke \n",
"0 1 \n",
"1 1 \n",
"2 1 \n",
"3 1 \n",
"4 1 \n",
"... ... \n",
"5105 0 \n",
"5106 0 \n",
"5107 0 \n",
"5108 0 \n",
"5109 0 \n",
"\n",
"[5110 rows x 12 columns]"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.preprocessing import LabelEncoder, MinMaxScaler\n",
"\n",
"# Преобразование целевой переменной\n",
"data[\"stroke\"] = data[\"stroke\"].map({1: 1, 0: 0}) # Целевая переменная уже числовая\n",
"\n",
"# Бинарные категориальные признаки\n",
"binary_cols = [\n",
" \"hypertension\",\n",
" \"heart_disease\",\n",
"]\n",
"for col in binary_cols:\n",
" if col in data.columns:\n",
" data[col] = data[col].map({1: 1, 0: 0})\n",
"\n",
"# Преобразование признака пола\n",
"data[\"gender\"] = data[\"gender\"].map({\"Female\": 1, \"Male\": 0, \"Other\": None})\n",
"\n",
"# Нормализация числовых данных\n",
"scaler = MinMaxScaler()\n",
"numeric_cols = [\"age\", \"avg_glucose_level\", \"bmi\"]\n",
"data[numeric_cols] = scaler.fit_transform(data[numeric_cols])\n",
"\n",
"# Преобразование категориальных переменных с помощью LabelEncoder\n",
"label_encoder = LabelEncoder()\n",
"\n",
"# Преобразуем 'ever_married', 'work_type', 'Residence_type', и 'smoking_status'\n",
"categorical_cols = [\"ever_married\", \"work_type\", \"Residence_type\", \"smoking_status\"]\n",
"for col in categorical_cols:\n",
" if col in data.columns:\n",
" data[col] = label_encoder.fit_transform(data[col])\n",
"\n",
"print(\"Обработка данных завершена. Размеры итогового датасета:\", data.shape)\n",
"data"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Обзор пропусков в данных:\n",
"id 0\n",
"gender 1\n",
"age 0\n",
"hypertension 0\n",
"heart_disease 0\n",
"ever_married 0\n",
"work_type 0\n",
"Residence_type 0\n",
"avg_glucose_level 0\n",
"bmi 201\n",
"smoking_status 0\n",
"stroke 0\n",
"dtype: int64\n",
"Статистические характеристики данных:\n",
" id gender age hypertension heart_disease \\\n",
"count 5110.000000 5109.000000 5110.000000 5110.000000 5110.000000 \n",
"mean 36517.829354 0.586025 0.526692 0.097456 0.054012 \n",
"std 21161.721625 0.492592 0.276033 0.296607 0.226063 \n",
"min 67.000000 0.000000 0.000000 0.000000 0.000000 \n",
"25% 17741.250000 0.000000 0.304199 0.000000 0.000000 \n",
"50% 36932.000000 1.000000 0.548340 0.000000 0.000000 \n",
"75% 54682.000000 1.000000 0.743652 0.000000 0.000000 \n",
"max 72940.000000 1.000000 1.000000 1.000000 1.000000 \n",
"\n",
" ever_married work_type Residence_type avg_glucose_level \\\n",
"count 5110.000000 5110.000000 5110.000000 5110.000000 \n",
"mean 0.656164 2.167710 0.508023 0.235563 \n",
"std 0.475034 1.090293 0.499985 0.209046 \n",
"min 0.000000 0.000000 0.000000 0.000000 \n",
"25% 0.000000 2.000000 0.000000 0.102137 \n",
"50% 1.000000 2.000000 1.000000 0.169721 \n",
"75% 1.000000 3.000000 1.000000 0.272228 \n",
"max 1.000000 4.000000 1.000000 1.000000 \n",
"\n",
" bmi smoking_status stroke \n",
"count 4909.000000 5110.000000 5110.000000 \n",
"mean 0.212981 1.376908 0.048728 \n",
"std 0.089966 1.071534 0.215320 \n",
"min 0.000000 0.000000 0.000000 \n",
"25% 0.151203 0.000000 0.000000 \n",
"50% 0.203895 2.000000 0.000000 \n",
"75% 0.261168 2.000000 0.000000 \n",
"max 1.000000 3.000000 1.000000 \n",
"Размеры данных после обработки пропусков: (4908, 12)\n"
]
}
],
"source": [
"# Проверка данных на пропуски\n",
"print(\"Обзор пропусков в данных:\")\n",
"print(data.isnull().sum())\n",
"\n",
"# Вывод статистик по данным\n",
"print(\"Статистические характеристики данных:\")\n",
"print(data.describe())\n",
"\n",
"# Удаление или обработка пропущенных данных\n",
"# Пример: удаление строк с пропусками (если применимо)\n",
"data = data.dropna()\n",
"print(\"Размеры данных после обработки пропусков:\", data.shape)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Выборки"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Размер обучающей выборки: 3926 строк\n",
"Размер тестовой выборки: 982 строк\n"
]
}
],
"source": [
"from sklearn.model_selection import train_test_split\n",
"\n",
"# Разделение данных на признаки (X) и целевую переменную (y)\n",
"X = data.drop(columns=[\"stroke\"])\n",
"y = data[\"stroke\"]\n",
"\n",
"# Разделение на обучающую и тестовую выборки (80% на обучение, 20% на тестирование)\n",
"X_train, X_test, y_train, y_test = train_test_split(\n",
" X, y, test_size=0.2, random_state=42\n",
")\n",
"\n",
"print(f\"Размер обучающей выборки: {X_train.shape[0]} строк\")\n",
"print(f\"Размер тестовой выборки: {X_test.shape[0]} строк\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Обучение"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\TEMP_UNIVERSITY\\mai\\.venv\\Lib\\site-packages\\sklearn\\linear_model\\_logistic.py:469: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
"STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
"\n",
"Increase the number of iterations (max_iter) or scale the data as shown in:\n",
" https://scikit-learn.org/stable/modules/preprocessing.html\n",
"Please also refer to the documentation for alternative solver options:\n",
" https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
" n_iter_i = _check_optimize_result(\n",
"c:\\TEMP_UNIVERSITY\\mai\\.venv\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:1531: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n",
" _warn_prf(average, modifier, f\"{metric.capitalize()} is\", len(result))\n",
"c:\\TEMP_UNIVERSITY\\mai\\.venv\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:1531: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n",
" _warn_prf(average, modifier, f\"{metric.capitalize()} is\", len(result))\n",
"c:\\TEMP_UNIVERSITY\\mai\\.venv\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:1531: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n",
" _warn_prf(average, modifier, f\"{metric.capitalize()} is\", len(result))\n",
"c:\\TEMP_UNIVERSITY\\mai\\.venv\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:1531: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n",
" _warn_prf(average, modifier, f\"{metric.capitalize()} is\", len(result))\n",
"c:\\TEMP_UNIVERSITY\\mai\\.venv\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:1531: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n",
" _warn_prf(average, modifier, f\"{metric.capitalize()} is\", len(result))\n",
"c:\\TEMP_UNIVERSITY\\mai\\.venv\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:1531: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n",
" _warn_prf(average, modifier, f\"{metric.capitalize()} is\", len(result))\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Модель: Logistic Regression\n",
"Точность: 0.9460\n",
"ROC AUC: 0.8518\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 800x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Отчет по классификации:\n",
" precision recall f1-score support\n",
"\n",
" 0 0.95 1.00 0.97 929\n",
" 1 0.00 0.00 0.00 53\n",
"\n",
" accuracy 0.95 982\n",
" macro avg 0.47 0.50 0.49 982\n",
"weighted avg 0.89 0.95 0.92 982\n",
"\n",
"\n",
"Модель: Random Forest\n",
"Точность: 0.9460\n",
"ROC AUC: 0.7819\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\TEMP_UNIVERSITY\\mai\\.venv\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:1531: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n",
" _warn_prf(average, modifier, f\"{metric.capitalize()} is\", len(result))\n",
"c:\\TEMP_UNIVERSITY\\mai\\.venv\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:1531: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n",
" _warn_prf(average, modifier, f\"{metric.capitalize()} is\", len(result))\n",
"c:\\TEMP_UNIVERSITY\\mai\\.venv\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:1531: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n",
" _warn_prf(average, modifier, f\"{metric.capitalize()} is\", len(result))\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAqsAAAIjCAYAAAAk+FJEAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABAYElEQVR4nO3deZyN9f//8eeZfcyYGfsgjH1fJ+vHTtklIVTWsqYQMSgmiVCWREm2StZC9ClCmyyDhj5IZQllG8uYwSxmrt8ffnO+jhnMjOG8zTzut9u55byv93Wd13XOmek57+t9XZfNsixLAAAAgIFcnF0AAAAAcDuEVQAAABiLsAoAAABjEVYBAABgLMIqAAAAjEVYBQAAgLEIqwAAADAWYRUAAADGcnN2AQBgsri4OF24cEGJiYkqUKCAs8sBgCyHkVUAuMWuXbvUtWtX5c6dW56ensqfP7+eeuopZ5eFO1i4cKFsNpuOHTvm7FIAZDDCKpAOSf9jtNls+vnnn5MttyxLhQoVks1mU+vWrZ1QIdJrzZo1qlu3rg4cOKAJEyZo48aN2rhxoz788ENnl2aEY8eO2b/7NptNLi4uypkzp1q0aKFt27Y5uzxj3Po+3fyoVauWs8tL0ZIlSzR9+nRnlwEkwzQA4B54eXlpyZIlqlu3rkP7Dz/8oJMnT8rT09NJlSE9Lly4oOeff17NmjXTihUr5OHh4eySjNWlSxe1bNlSCQkJ+uOPPzR79mw1atRIYWFhqlixorPLM0bS+3SzPHnyOKmaO1uyZIn+97//afDgwc4uBXBAWAXuQcuWLbVixQrNnDlTbm7/9+O0ZMkSBQcHKyIiwonVIa0WLFigmJgYLVy4kKB6F9WqVdOzzz5rf16vXj21aNFCc+bM0ezZs51YmVlufZ8ySkxMjDw8POTiwgFSZH58y4F70KVLF50/f14bN260t8XFxWnlypXq2rVriutMnTpVderUUa5cueTt7a3g4GCtXLnSoc/tDh8mPRo2bChJ+v7772Wz2bRs2TKNGjVKgYGB8vHxUdu2bXXixAmHbTZs2NC+XpKwsDD7Nm99/RdffDFZ7a1bt1ZQUJBD2759+9SjRw8VK1ZMXl5eCgwMVK9evXT+/Pk7vXV2Z8+eVe/evZUvXz55eXmpcuXKWrRokUOfpEOqU6dOdWivUKFCsn0aM2aMbDaboqOjHfZn3LhxDv2mTJni8F5K0vbt21WlShW99dZbKlSokDw9PVWyZElNmjRJiYmJDutfv35d48ePV/HixeXp6amgoCCNGjVKsbGxDv2CgoLUo0cPh7Y+ffrIy8tL33///d3foP+/jZS+BwsXLkzWd9y4cSn2vbWGLVu2qF69esqRI4dDv5Q+99SoV6+eJOnw4cMO7QsWLFDjxo2VN29eeXp6qly5cpozZ06K+9i6dWv9/PPPqlGjhry8vFSsWDEtXrw4Wd/9+/ercePG8vb21iOPPKI333wz2eeTZPbs2Spfvrw8PT1VoEABDRw4UJcuXXLo07BhQ1WoUEH79u1TgwYNlC1bNpUoUcL+c/nDDz+oZs2a8vb2VunSpfXdd9+l5y1K0ZEjR9SxY0flzJlT2bJlU61atbR+/XqHPkk/50uXLtWYMWNUsGBBZcuWTZcvX5Yk7dixQ82bN5e/v7+yZcumBg0aaOvWrQ7biIqK0uDBgxUUFCRPT0/lzZtXjz32mPbs2WN/D9avX6+///7b/l249WcdcBZGVoF7EBQUpNq1a+vzzz9XixYtJEn//e9/FRkZqc6dO2vmzJnJ1pkxY4batm2rZ555RnFxcVq6dKk6duyodevWqVWrVpKkTz75xN7/p59+0ty5czVt2jTlzp1bkpQvXz6HbU6YMEE2m00jRozQ2bNnNX36dDVt2lTh4eHy9va+bf0jRoy45/dg48aNOnLkiHr27KnAwEDt379fc+fO1f79+7V9+/ZkQfhm165dU8OGDfXXX3/pxRdfVNGiRbVixQr16NFDly5d0ssvv3zP9aXk0qVLmjhxYrL28+fP6+eff9bPP/+sXr16KTg4WJs2bVJISIiOHTumDz74wN73+eef16JFi9ShQwe98sor2rFjhyZOnKiDBw/qyy+/vO1rjx07Vh9//LGWLVuWLGjfSZUqVfTKK69Iko4eParXX3/9jv1v/g4NGTLEYdnRo0fVqlUr5c+fX6+//rr9sPRzzz2X6npulXRiU44cORza58yZo/Lly6tt27Zyc3PTV199pQEDBigxMVEDBw506PvXX3+pQ4cO6t27t7p376758+erR48eCg4OVvny5SVJp0+fVqNGjXT9+nWNHDlSPj4+mjt3borf83Hjxik0NFRNmzZV//79dejQIc2ZM0dhYWHaunWr3N3d7X0vXryo1q1bq3PnzurYsaPmzJmjzp0767PPPtPgwYPVr18/de3aVVOmTFGHDh104sQJZc+e/a7vy9WrV5MdYfH395e7u7vOnDmjOnXq6OrVq3rppZeUK1cuLVq0SG3bttXKlSv15JNPOqw3fvx4eXh4aNiwYYqNjZWHh4c2b96sFi1aKDg4WGPHjpWLi4v9D4SffvpJNWrUkCT169dPK1eu1Isvvqhy5crZv+sHDx5UtWrVNHr0aEVGRurkyZOaNm2aJMnX1/eu+wc8EBaANFuwYIElyQoLC7NmzZplZc+e3bp69aplWZbVsWNHq1GjRpZlWVaRIkWsVq1aOayb1C9JXFycVaFCBatx48Z3fK2jR48mW7ZlyxZLklWwYEHr8uXL9vbly5dbkqwZM2bY2xo0aGA1aNDA/vzrr7+2JFnNmze3bv1VIMkaOHBgstdr1aqVVaRIkTvuj2VZ1ueff25Jsn788ccU9ynJ9OnTLUnWp59+am+Li4uzateubfn6+tr36ejRo5Yka8qUKQ7rly9f3mGfLMuyRo8ebUmyoqKiHPZn7Nix9uevvvqqlTdvXis4ONhh/QYNGliSrHHjxjlss0ePHpYk67fffrMsy7LCw8MtSdbzzz/v0G/YsGGWJGvz5s32tiJFiljdu3e3LMuyPvzwQ0uS9d57793xfblVgQIFrNatW9ufh4WFWZKsBQsWJOs7evRoy2azObTdXMPNdWzbts2h3+0+95slfRahoaHWuXPnrNOnT1s//fSTVb16dUuStWLFCof+KX0/mjVrZhUrVixZjbd+Z86ePWt5enpar7zyir1t8ODBliRrx44dDv38/f0dfk7Onj1reXh4WI8//riVkJBg7ztr1ixLkjV//nx7W9LnvmTJEnvb77//bkmyXFxcrO3bt9vbv/3229u+9ym9Tyk9tmzZ4rAvP/30k329qKgoq2jRolZQUJC97qSf82LFijm8n4mJiVbJkiWtZs2aWYmJifb2q1evWkWLFrUee+wxe5u/v/9dP9uUfr4BEzANALhHnTp10rVr17Ru3TpFRUVp3bp1t50CIMlhBOjixYuKjIxUvXr17Ifj0qNbt24OozwdOnRQ/vz59fXXX6fY37IshYSE6KmnnlLNmjXT/bqS4/7ExMQoIiLCfrbz3fbp66+/VmBgoLp06WJvc3d310svvaTo6Gj98MMP91RbSv755x+99957eu2111IcOXJ1dU02Epk0opl0eDbpfR06dOgd+91szZo1GjBggIYPH57mQ+0xMTHy8vJKVd+4uLi7ntgXFRUlScqVK1ea6rjZ2LFjlSdPHgUGBqpevXo6ePCg3nnnHXXo0MGh383fj8jISEVERKhBgwY6cuSIIiMjHfqWK1fOPp1AunEiUunSpXXkyBF729dff61atWrZRwyT+j3zzDMO2/ruu+8UFxenwYMHO8zrfOGFF+Tn55fsM/L19VXnzp3tz0uXLq2AgACVLVvW4Wck6d8313Qnffr0sV9RIulRuXJl+77UqFHD4QRNX19f9enTR8eOHdOBAwccttW9e3eH9zM8PFx//vmnunbtqvPnzysiIkIRERG6cuWKmjRpoh9//NE+PSIgIEA7duzQv//+m6q6AZMwDQC4R3ny5FHTpk21ZMkSXb16VQkJCcn+h32zdevW6c0331R4eLjD/MY7HS6/m5IlSzo
"text/plain": [
"<Figure size 800x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Отчет по классификации:\n",
" precision recall f1-score support\n",
"\n",
" 0 0.95 1.00 0.97 929\n",
" 1 0.00 0.00 0.00 53\n",
"\n",
" accuracy 0.95 982\n",
" macro avg 0.47 0.50 0.49 982\n",
"weighted avg 0.89 0.95 0.92 982\n",
"\n",
"\n",
"Модель: Gradient Boosting\n",
"Точность: 0.9399\n",
"ROC AUC: 0.8379\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\TEMP_UNIVERSITY\\mai\\.venv\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:1531: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n",
" _warn_prf(average, modifier, f\"{metric.capitalize()} is\", len(result))\n",
"c:\\TEMP_UNIVERSITY\\mai\\.venv\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:1531: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n",
" _warn_prf(average, modifier, f\"{metric.capitalize()} is\", len(result))\n",
"c:\\TEMP_UNIVERSITY\\mai\\.venv\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:1531: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n",
" _warn_prf(average, modifier, f\"{metric.capitalize()} is\", len(result))\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAqsAAAIjCAYAAAAk+FJEAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABCJElEQVR4nO3dd3yN9///8efJjkQGQogVW42KVdSmtRUtRVurqqq1WittldBWi9YoLao1Wmp26qKqyx4N/aBVJVaJEmImMq7fH3453xwnIYmQt3jcb7fc2ryv93Wd17mSczzzPu/rfdksy7IEAAAAGMglpwsAAAAA0kNYBQAAgLEIqwAAADAWYRUAAADGIqwCAADAWIRVAAAAGIuwCgAAAGMRVgEAAGAst5wuAABupytXrigmJkbJyckqUqRITpcDALgBRlYB5Hrbtm1T9+7dVaBAAXl6eqpw4cJ6+OGHc7ospGH+/Pmy2WyKioqytzVu3FiNGzfOsZpyG84n7jSEVUD/9w+kzWbTb7/95rTdsiwVK1ZMNptNbdu2zYEKkVVffPGF6tevrz179ui1117TmjVrtGbNGs2ePTunSzPKuXPn9Nprr6lmzZry9/eXp6enSpQooUcffVRff/11Tpd3y23YsEFjx47V2bNnM9S/V69e9vcMm80mNzc3FStWTF27dtWePXtubbEZsGfPHo0dO9Yh9AN3KqYBAKl4eXlp8eLFql+/vkP7zz//rKNHj8rT0zOHKkNWxMTEqG/fvmrRooWWL18uDw+PnC7JSPv371eLFi106NAhdezYUT169JCvr6+OHDmib775Rm3bttXChQv1xBNP5Eh9q1evvuWPsWHDBkVERKhXr14KCAjI0D6enp6aO3euJCkxMVH//POPZs2ape+++0579uzJ0Wkme/bsUUREhBo3bqySJUs6bLsd5xPIToRVIJXWrVtr+fLlmj59utzc/u/lsXjxYtWoUUOnTp3KweqQWfPmzVNcXJzmz59PUE1HYmKiOnbsqOjoaP3888+6//77HbaPGTNGq1evVlJS0nWPc/HiRfn4+NySGk392bm5uenxxx93aKtTp47atm2rr7/+Wk899VQOVXZ9pp5PID1MAwBS6datm06fPq01a9bY265cuaIVK1aoe/fuae4zefJk1atXT/nz55e3t7dq1KihFStWOPRJ/XFhWl8p88d++ukn2Ww2LV26VC+++KKCg4Pl4+Oj9u3b68iRIw7HTGve2datW+3HvPbxn3vuOafa27Zt6zTqsmvXLvXq1UulSpWSl5eXgoOD1adPH50+ffp6p87u5MmTevLJJ1WoUCF5eXnp3nvv1YIFCxz6REVFyWazafLkyQ7tlStXdnpOL7/8smw2my5cuODwfMaOHevQb9KkSQ7nUpI2bdqkatWq6fXXX1exYsXk6empsmXL6o033lBycrLD/omJiRo/frxKly4tT09PlSxZUi+++KLi4+Md+pUsWVK9evVyaOvXr5+8vLz0008/3fgE/f9jpPV7MH/+fKe+Y8eOTbPvtTWsW7dODRo0UGBgoEO/tH7uqS1fvlz/+9//NHr0aKegmuLBBx9Uq1at7N+nTJv5+eefNWDAABUsWFBFixaVJB06dEgDBgxQ+fLl5e3trfz586tz585pfhy9e/duNW3aVN7e3ipatKheffVVp5+LlPbvenx8vMaMGaMyZcrI09NTxYoV04gRI5x+Xinn4PPPP1flypXl6empSpUq6bvvvrP3GTt2rIYPHy5JCg0NtZ+7rHyEHhwcLEkOf+xK0oEDB9S5c2fly5dPefLkUZ06ddKcXpGR148kLVmyRDVq1FDevHnl5+enKlWqaNq0aZKu/nw6d+4sSWrSpIn9+aT8fl57PlPed5YtW6bXXntNRYsWlZeXl5o1a6b9+/c7PfbMmTNVqlQpeXt7q3bt2vr111+ZB4tbipFVIJWSJUuqbt26+uSTT+z/OH/77beKjY1V165dNX36dKd9pk2bpvbt2+uxxx7TlStXtGTJEnXu3FmrVq1SmzZtJEkfffSRvf+vv/6qOXPmaMqUKSpQoIAkqVChQg7HfO2112Sz2TRy5EidPHlSU6dOVfPmzRUZGSlvb+906x85cuRNn4M1a9bowIED6t27t4KDg7V7927NmTNHu3fv1qZNm5yCcGqXL19W48aNtX//fj333HMKDQ3V8uXL1atXL509e1aDBw++6frScvbsWU2YMMGp/fTp0/rtt9/022+/qU+fPqpRo4bWrl2r8PBwRUVFadasWfa+ffv21YIFC/TII4/ohRde0ObNmzVhwgTt3btXn332WbqPPWbMGH3wwQdaunRppv6xrlatml544QVJ0sGDB/XKK69ct3/q36GhQ4c6bDt48KDatGmjwoUL65VXXlFQUJAkZehj+6+++kqSnEYIM2LAgAEKCgrSK6+8oosXL0q6+gfThg0b1LVrVxUtWlRRUVF677331LhxY+3Zs0d58uSRJJ04cUJNmjRRYmKiRo0aJR8fH82ZM+e6v98pkpOT1b59e/3222/q16+fKlasqD/++ENTpkzRvn379Pnnnzv0/+233/Tpp59qwIAByps3r6ZPn66HH35Yhw8fVv78+dWpUyft27dPn3zyicPrMuU8Xk/Kpy1JSUk6cOCARo4cqfz58zvMbY+Ojla9evV06dIlDRo0SPnz59eCBQvUvn17rVixQh07dpSU8dfPmjVr1K1bNzVr1kxvvvmmJGnv3r1av369Bg8erIYNG2rQoEGaPn26XnzxRVWsWFGS7P9NzxtvvCEXFxcNGzZMsbGxmjhxoh577DFt3rzZ3ue9997Tc889pwYNGmjo0KGKiopShw4dFBgYaP+DBch2FgBr3rx5liRr69at1owZM6y8efNaly5dsizLsjp37mw1adLEsizLKlGihNWmTRuHfVP6pbhy5YpVuXJlq2nTptd9rIMHDzptW7dunSXJCgkJsc6dO2dvX7ZsmSXJmjZtmr2tUaNGVqNGjezff/PNN5Ykq2XLlta1L21J1rPPPuv0eG3atLFKlChx3edjWZb1ySefWJKsX375Jc3nlGLq1KmWJOvjjz+2t125csWqW7eu5evra39OBw8etCRZkyZNcti/UqVKDs/JsizrpZdesiRZ58+fd3g+Y8aMsX8/YsQIq2DBglaNGjUc9m/UqJElyRo7dqzDMXv16mVJsv744w/LsiwrMjLSkmT17dvXod+wYcMsSdaPP/5obytRooTVs2dPy7Isa/bs2ZYk65133rnueblWkSJFrLZt29q/37p1qyXJmjdvnlPfl156ybLZbA5tqWtIXcfGjRsd+qX3c08tLCzMCggIcGq/cOGC9d9//9m/YmNj7dtSfofr169vJSYmOuyX1u/Pxo0bLUnWwoUL7W1DhgyxJFmbN2+2t508edLy9/d3en1c+7v+0UcfWS4uLtavv/7q8DizZs2yJFnr1693OAceHh7W/v377W07d+50+rlNmjQp3ddlWnr27GlJcvoKCQmxtm/f7tA35bmmrvf8+fNWaGioVbJkSSspKcmyrIy/fgYPHmz5+fk5nfvUli9fbkmy1q1b57Tt2vOZ8r5TsWJFKz4+3t4+bdo0h9dJfHy8lT9/fqtWrVpWQkKCvd/8+fMtSU6vXSC7MA0AuEaXLl10+fJlrVq1SufPn9eqVavSnQIgyWEk6MyZM4qNjVWDBg20Y8eOLNfQo0cP5c2b1/79I488osKFC+ubb75Js79lWQoPD9fDDz+s++67L8uPKzk+n7i4OJ06dUp16tSRpBs+p2+++UbBwcHq1q2bvc3d3V2DBg3ShQsX9PPPP99UbWk5duyY3nnnHY0ePVq+vr5O211dXZ1GIlNGNFM+hk05r88///x1+6X2xRdfaMCAARo+fPgNP2q/VlxcnLy8vDLU98qVKze8sO/8+fOSpPz582eqDunqKgBpnbeXXnpJQUFB9q+0XgNPPfWUXF1dHdpS//4kJCTo9OnTKlOmjAICAhx+f7755hvVqVNHtWvXtrcFBQXpscceu2HNy5cvV8WKFVWhQgWdOnXK/tW0aVNJV6d
"text/plain": [
"<Figure size 800x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Отчет по классификации:\n",
" precision recall f1-score support\n",
"\n",
" 0 0.95 0.99 0.97 929\n",
" 1 0.00 0.00 0.00 53\n",
"\n",
" accuracy 0.94 982\n",
" macro avg 0.47 0.50 0.48 982\n",
"weighted avg 0.89 0.94 0.92 982\n",
"\n"
]
}
],
"source": [
"from sklearn.metrics import (\n",
" accuracy_score,\n",
" classification_report,\n",
" confusion_matrix,\n",
" roc_auc_score,\n",
" roc_curve,\n",
")\n",
"import matplotlib.pyplot as plt\n",
"from sklearn.linear_model import LogisticRegression\n",
"from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier\n",
"\n",
"\n",
"# Функция для визуализации матрицы ошибок\n",
"def plot_confusion_matrix(conf_matrix, model_name):\n",
" plt.figure(figsize=(8, 6))\n",
" sns.heatmap(conf_matrix, annot=True, fmt=\"d\", cmap=\"Blues\", cbar=False)\n",
" plt.xlabel(\"Предсказанный класс\")\n",
" plt.ylabel(\"Истинный класс\")\n",
" plt.title(f\"Матрица ошибок для {model_name}\")\n",
" plt.show()\n",
"\n",
"\n",
"# Инициализация моделей\n",
"log_reg = LogisticRegression(random_state=42, max_iter=1000)\n",
"rf_clf = RandomForestClassifier(random_state=42)\n",
"gb_clf = GradientBoostingClassifier(random_state=42)\n",
"\n",
"# Словарь моделей для перебора\n",
"models = {\n",
" \"Logistic Regression\": log_reg,\n",
" \"Random Forest\": rf_clf,\n",
" \"Gradient Boosting\": gb_clf,\n",
"}\n",
"\n",
"# Словарь для хранения результатов\n",
"results = {}\n",
"\n",
"# Обучение и оценка моделей\n",
"for name, model in models.items():\n",
" model.fit(X_train, y_train) # Обучаем модель\n",
" y_pred = model.predict(X_test) # Предсказываем на тестовой выборке\n",
" accuracy = accuracy_score(y_test, y_pred) # Точность\n",
" auc_score = roc_auc_score(y_test, model.predict_proba(X_test)[:, 1]) # ROC AUC\n",
" classification_rep = classification_report(\n",
" y_test, y_pred, output_dict=True\n",
" ) # Отчет по классификации\n",
" conf_matrix = confusion_matrix(y_test, y_pred) # Матрица ошибок\n",
"\n",
" # Сохраняем результаты\n",
" results[name] = {\n",
" \"accuracy\": accuracy,\n",
" \"auc\": auc_score,\n",
" \"classification_report\": classification_rep,\n",
" \"confusion_matrix\": conf_matrix,\n",
" }\n",
"\n",
"# Вывод результатов\n",
"for name, metrics in results.items():\n",
" print(f\"\\nМодель: {name}\")\n",
" print(f\"Точность: {metrics['accuracy']:.4f}\")\n",
" print(f\"ROC AUC: {metrics['auc']:.4f}\")\n",
" plot_confusion_matrix(metrics[\"confusion_matrix\"], name)\n",
" print(\"Отчет по классификации:\")\n",
" print(classification_report(y_test, models[name].predict(X_test)))\n",
"\n",
" import seaborn as sns"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Оценка моделей. Матрица ошибок и ROC"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Оценка модели: Logistic Regression\n",
"Точность (Accuracy): 0.9460\n",
"Точность (Precision): 0.0000\n",
"Полнота (Recall): 0.0000\n",
"F1-Score: 0.0000\n",
"AUC: 0.8518\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\TEMP_UNIVERSITY\\mai\\.venv\\Lib\\site-packages\\sklearn\\linear_model\\_logistic.py:469: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
"STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
"\n",
"Increase the number of iterations (max_iter) or scale the data as shown in:\n",
" https://scikit-learn.org/stable/modules/preprocessing.html\n",
"Please also refer to the documentation for alternative solver options:\n",
" https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
" n_iter_i = _check_optimize_result(\n",
"c:\\TEMP_UNIVERSITY\\mai\\.venv\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:1531: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples. Use `zero_division` parameter to control this behavior.\n",
" _warn_prf(average, modifier, f\"{metric.capitalize()} is\", len(result))\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Оценка модели: Random Forest\n",
"Точность (Accuracy): 0.9460\n",
"Точность (Precision): 0.0000\n",
"Полнота (Recall): 0.0000\n",
"F1-Score: 0.0000\n",
"AUC: 0.7819\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\TEMP_UNIVERSITY\\mai\\.venv\\Lib\\site-packages\\sklearn\\metrics\\_classification.py:1531: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples. Use `zero_division` parameter to control this behavior.\n",
" _warn_prf(average, modifier, f\"{metric.capitalize()} is\", len(result))\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAHHCAYAAABDUnkqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACD/0lEQVR4nO3dd1zU9R/A8dcd49ggIjJEce9tmluT3CtzVGZqVpYjy6zM3JVWpllpmZpSqbnS9JcrNS01S1MxTdHcExfKhoO7z++Pi9MLUFDgC8f7+XjcQ76f+473fUG+bz5Tp5RSCCGEEELYCb3WAQghhBBC5CZJboQQQghhVyS5EUIIIYRdkeRGCCGEEHZFkhshhBBC2BVJboQQQghhVyS5EUIIIYRdkeRGCCGEEHZFkhshhBBC2BVJboQQogAKDQ1lwIABWochRKEkyY0otMLDw9HpdNaXo6MjwcHBDBgwgIsXL2Z6jFKKb7/9lhYtWuDj44Obmxs1a9Zk8uTJJCQkZHmt1atX06FDB/z8/HB2diYoKIjevXvz888/59XHE/lkwIABNj9HBoOBSpUqMX78eJKTk7UOr8D4732687Vx40atw8vg0qVLTJw4kYiICK1DERpw1DoAIR7U5MmTKVu2LMnJyfz++++Eh4ezc+dODh8+jIuLi3U/k8nEU089xfLly2nevDkTJ07Ezc2NHTt2MGnSJFasWMGWLVsoWbKk9RilFM8++yzh4eHUrVuXkSNHEhAQwOXLl1m9ejVt2rRh165dNGnSRIuPLnKJwWBg/vz5AMTExLBmzRreeecdTp48yeLFizWOruC48z7dqXbt2hpEc3eXLl1i0qRJhIaGUqdOHa3DEflNCVFILVy4UAFq7969NuVvvvmmAtSyZctsyqdMmaIANWrUqAznWrt2rdLr9ap9+/Y25dOmTVOAeuWVV5TZbM5w3DfffKP++OOPXPg0Qiv9+/dX7u7uNmVms1k9/PDDSqfTqaioKE3iKlOmjOrfv78m185MZvcpNyUkJOTq+fbu3asAtXDhwlw9rygcpFlK2J3mzZsDcPLkSWtZUlIS06ZNo1KlSkydOjXDMV26dKF///5s3LiR33//3XrM1KlTqVKlCh999BE6nS7Dcf369aNhw4Z3jWfixIkZjt22bRsGg4EXX3wxw36RkZH07t0bLy8vihcvzogRIzI0j+h0OiZOnGhTNm3aNHQ6Ha1atbKWbd++PdMml6lTp6KUsu539uxZhgwZQuXKlXF1daV48eL06tWLM2fOZPg8Bw4coH379pQoUcLm3J07d77rfUj33+bE9FdoaGim+2fVFHJnbPHx8bz22muUK1cOJycnm/2uX7+erbj+e81mzZqhlOLUqVPW8uzep/TPuGvXLkaOHEmJEiVwd3fnscce49q1azb7KqV49913KVWqFG5ubrRu3Zq///4707hOnTpFr1698PX1xc3NjYcffph169bZ7JP+PV++fDmTJk0iODgYT09PevbsSUxMDCkpKbzyyiv4+/vj4eHBwIEDSUlJyfE9ysrnn39O9erVMRgMBAUFMXToUG7dumWzT6tWrahRowb79u2jRYsWuLm5MWbMGABSUlKYMGECFSpUwGAwEBISwhtvvJEhxs2bN9OsWTN8fHzw8PCgcuXK1nNs376dhx56CICBAwdafxbCw8Nz7XOKgk2apYTdSX/QFCtWzFq2c+dObt68yYgRI3B0zPzH/plnnmHhwoX8+OOPPPzww+zcuZPo6GheeeUVHBwcci2+gwcP0r17dzp27Mjs2bMzvN+7d29CQ0OZOnUqv//+O59++ik3b97km2++yfKct27dyjRpSzdmzBiqVq1KUlISy5YtY8yYMfj7+zNo0CAA9u7dy2+//cYTTzxBqVKlOHPmDF988QWtWrXiyJEjuLm5AZYmmw4dOqCUYuTIkYSEhADw6quv5vg+pDcnAkyfPp2bN29mue9jjz1Gjx49ANixYwdz5861ef/1119nzpw5DBo0iKZNm+Lk5MSqVatYvXp1juNKl9nPUXbvU7rhw4dTrFgxJkyYwJkzZ5g5cybDhg1j2bJl1n3Gjx/Pu+++S8eOHenYsSP79++nbdu2GI1Gm3NduXKFJk2akJiYyMsvv0zx4sX5+uuv6dq1KytXruSxxx6z2X/q1Km4uroyevRoTpw4wWeffYaTkxN6vZ6bN28yceJEazNu2bJlGT9+fLbuy3+TRScnJ7y9vQFLgj5p0iTCwsJ46aWXOHbsGF988QV79+5l165dODk5WY+7ceMGHTp04IknnuDpp5+mZMmSmM1munbtys6dO3nhhReoWrUqhw4d4uOPP+b48eP88MMPAPz999907tyZWrVqMXnyZAwGAydOnGDXrl0AVK1alcmTJzN+/HheeOEF6x880nxchGhbcSTE/UtvltqyZYu6du2aOn/+vFq5cqUqUaKEMhgM6vz589Z9Z86cqQC1evXqLM8XHR2tANWjRw+llFKffPLJPY/JjgkTJqj0/2pnzpxRgYGBqlmzZiopKSnT/bp27WpTPmTIEAWogwcPWssANWHCBOv2G2+8ofz9/VX9+vVVy5YtreXbtm1TgNq2bZu1LDk5Wen1ejVkyBBrWWJiYoa4d+/erQD1zTffWMs2bdqkAPXdd9/Z7FumTBnVqVOne98MpdTcuXMVoP78809rWadOnVSZMmUy7JuamqoANWnSJGtZ+vf99OnT1rLAwEDVrl07m2PT7+e1a9fuGk96c8u1a9fUtWvX1IkTJ9RHH32kdDqdqlGjhk1zZHbvU3qMYWFhNse/+uqrysHBQd26dUsppdTVq1eVs7Oz6tSpk81+Y8aMUYBNs9Qrr7yiALVjxw5rWVxcnCpbtqwKDQ1VJpNJKXX7e16jRg1lNBqt+z755JNKp9OpDh062MTfuHHjTO99ZvcJyPBK/3lL/yxt27a1xqKUUrNmzVKAWrBggbWsZcuWClBz5syxuca3336r9Hq9zWdUSqk5c+YoQO3atUsppdTHH398z++tNEsVbdIsJQq9sLAwSpQoQUhICD179sTd3Z21a9dSqlQp6z5xcXEAeHp6Znme9PdiY2Nt/r3bMTlx48YN2rVrh6enJ2vXrrXp7HynoUOH2mwPHz4cgPXr12e6/8WLF/nss88YN24cHh4eme4TExPD9evXOXfuHB9++CFms5lHHnnE+r6rq6v169TUVG7cuEGFChXw8fFh//791vfS72Px4sWz8Ykzl97EltXnv1N67YXBYLjrfnFxcQ8UU0JCAiVKlKBEiRJUqFCBUaNG0bRpU9asWWPTpJjd+5TuhRdesDm+efPmmEwmzp49C8CWLVswGo0MHz7cZr9XXnklw7nWr19Pw4YNadasmbXMw8ODF154gTNnznDkyBGb/Z955hmbmpJGjRpZO8jfqVGjRpw/f560tLR73SZcXFzYvHmzzWv69Ok2n+WVV15Br7/9aHn++efx8vLK0HxmMBgYOHCgTdmKFSuoWrUqVapU4fr169ZX+s/qtm3bAPDx8QFgzZo1mM3me8Ytih5plhKF3uzZs6lUqRIxMTEsWLCAX3/9NcPDMD1BSX84Z+a/CZCXl9c9j0lnMpky9KXw9fXF2dnZut25c2eOHTuGv7+/TX+X/6pYsaLNdvny5dHr9Zn2fwGYMGECQUFBDB48mJUrV2a6T/fu3a1f6/V6xo4dy+OPP24tS+9ftHDhQi5evGgTX0xMjPXrBg0a4OTkxMSJE/Hz87M2S+XkAZPerJHelHE36X01skra0jVu3JjVq1ezcuVKa7NUYmJitmNycXHhf//7HwAXLlzgww8/5OrVqzbJDGT/PqUrXbq0zXZ6E1d6E1x6kvPf73mJEiVsmsPS923UqFGGa1StWtX6fo0aNbK8dvr9Tv+e3VluNpuJiYm5Z4Lo4OBAWFhYpu+lf5bKlSvblDs7O1OuXDnr++mCg4Nt/n8A/PPPPxw9epQSJUpkeo2rV68C0KdPH+bPn89zzz3H6NGjadOmDT169KBnz542iZUouiS5EYVew4YNadCgAWB5iDdr1oynnnqKY8eOWR+K6Q+Av/7
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Оценка модели: Gradient Boosting\n",
"Точность (Accuracy): 0.9399\n",
"Точность (Precision): 0.0000\n",
"Полнота (Recall): 0.0000\n",
"F1-Score: 0.0000\n",
"AUC: 0.8379\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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YrPZGDZsmGP78ePH8+KLL9KxY0c6duzI5s2bueOOO0hKSrrqa//www906NCBxo0bExkZibOzM3PmzOHWW29l3bp1NG3aNN36vXv3pnLlykyePJnNmzfzwQcfEBgYyCuvvALAJ598woMPPkjTpk156KGHAKhatepVc1y8eJFTp04BEBcXx3fffcfy5ct55pln0q33/PPPM2HCBMLDw3nkkUfYvXs37777Lr///jsbNmzAzc0NuHyq+aabbmLy5MkcP36cN954gw0bNrBlyxZKliwJwF133cVff/3FiBEjCAsL48SJE6xcuZKDBw8SFhbG9OnTGTFiBCVKlODZZ58FSHe6OTNnz56lffv29OjRg969e7Nw4UKefvppbrzxRjp06ABAfHw8t956K8eOHWPkyJGUL1+ezz77jDVr1lz1WEkhYHV1JWLM5R6AVatWmZMnT5pDhw6ZhQsXmrJlyxoPDw9z6NAhx7rTp083gFm0aFGW+ztz5owBTI8ePYwxxrzxxhtX3SY7/t1zEx0dbYKCgswtt9ySoTcmbb2uXbumax86dKgBzNatWx1t/Kfn5qmnnjKBgYGmcePGmfbc/PsvyoSEBOPs7GyGDh3qaMvslMrGjRsNYD7++GNH24oVKwxgPv/883TrpvVkZMf7779vAPPHH3842jp16pRpz01ycrIBzIQJExxtad/3f/fcBAUFmYiIiHTbph3PK/XcfPPNNwYw06dPT9dus9nMyZMn0z3+3eOX1jOwfPnyDPvM7FhGRESYKlWqOJZPnDhh3N3dTadOndL1oI0dOzZDr8l/v4c2m81Ur17dREREpNv24sWLpnLlyub222/PcAweeOCBdHnuvPNOU6ZMmXRt13JaKrPHI488ki5X2nu94447TGpqqqP97bffNoCZPXu2McaYpKQkExgYaG644YZ0/zfSemLHjx9vjDHm7NmzWfYa/VtWp6Wy6rn57896YmKiKV++vLnrrrscbVOnTjWAWbx4saPt0qVLplatWuq5KQI0AksKlPDwcMqWLUtoaCg9e/bEx8eHJUuWUKFCBcc658+fB8DX1zfL/aQ9FxcXl+7fK22TE6dPnyYiIgJfX1+WLFmSbrDzv/37r3uAESNGALBs2bJM1z9y5AhvvfUW48aNy7L3ITY2llOnTnHw4EFeffVVbDYbt956q+N5Ly8vx9fJycmcPn2aatWqUbJkSTZv3ux4Lu04lilTJhvvOHMJCQkAWb7/f0vrxfDw8LjieufPn7+mTGnf4/8et9jYWMqWLZvuERUVlW6dypUrExERkWGf/z6Wace9TZs27N+/n9jYWABWrVpFUlISI0aMwMnJybH+Y489dtXMUVFR/P3339x7772cPn2aU6dOcerUKeLj47ntttv46aefsNls6bZ5+OGH0y23atWK06dPO97/tXrooYdYuXIlK1eu5KuvvmLYsGG89957jBo1yrFO2nt97LHH0g3gHTx4MH5+fixduhSAP/74gxMnTjB06NB0PxudOnWiVq1ajvW8vLxwd3dn7dq1V+zty6kSJUpw3333OZbd3d1p2rQp+/fvd7QtX76ckJAQunbt6mjz9PRk8ODBuZZDrKPTUlKgzJgxgxo1ahAbG8vs2bP56aefMnwYphUoaR/OmflvAeTn53fVbdKkpqZy8uTJdG2lS5f
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from sklearn.metrics import (\n",
" accuracy_score,\n",
" precision_score,\n",
" recall_score,\n",
" f1_score,\n",
" roc_auc_score,\n",
" confusion_matrix,\n",
" ConfusionMatrixDisplay,\n",
")\n",
"\n",
"# Перебор всех моделей и вывод результатов\n",
"for name, model in models.items():\n",
" print(f\"\\nОценка модели: {name}\")\n",
"\n",
" # Обучаем модель\n",
" model.fit(X_train, y_train)\n",
"\n",
" # Предсказания\n",
" y_pred = model.predict(X_test)\n",
"\n",
" # Метрики\n",
" accuracy = accuracy_score(y_test, y_pred)\n",
" precision = precision_score(y_test, y_pred)\n",
" recall = recall_score(y_test, y_pred)\n",
" f1 = f1_score(y_test, y_pred)\n",
" roc_auc = roc_auc_score(y_test, model.predict_proba(X_test)[:, 1])\n",
"\n",
" print(f\"Точность (Accuracy): {accuracy:.4f}\")\n",
" print(f\"Точность (Precision): {precision:.4f}\")\n",
" print(f\"Полнота (Recall): {recall:.4f}\")\n",
" print(f\"F1-Score: {f1:.4f}\")\n",
" print(f\"AUC: {roc_auc:.4f}\")\n",
"\n",
" # Матрица ошибок\n",
" conf_matrix = confusion_matrix(y_test, y_pred)\n",
" disp = ConfusionMatrixDisplay(\n",
" confusion_matrix=conf_matrix,\n",
" display_labels=[\"No Heart Disease\", \"Heart Disease\"],\n",
" )\n",
" disp.plot(cmap=\"Blues\")\n",
" plt.title(f\"Матрица ошибок: {name}\")\n",
" plt.show()\n",
"\n",
" # ROC-кривая\n",
" fpr, tpr, thresholds = roc_curve(y_test, model.predict_proba(X_test)[:, 1])\n",
" plt.figure()\n",
" plt.plot(fpr, tpr, label=f\"ROC curve (AUC = {roc_auc:.2f})\")\n",
" plt.plot([0, 1], [0, 1], linestyle=\"--\")\n",
" plt.xlabel(\"False Positive Rate\")\n",
" plt.ylabel(\"True Positive Rate\")\n",
" plt.title(f\"ROC-кривая для {name}\")\n",
" plt.legend(loc=\"lower right\")\n",
" plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Настройки гипермараметров"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fitting 5 folds for each of 960 candidates, totalling 4800 fits\n",
"Лучшие параметры для RandomForest: {'max_depth': 10, 'max_features': 'sqrt', 'min_samples_leaf': 1, 'min_samples_split': 15, 'n_estimators': 300}\n",
"Точность RandomForest: 0.9460\n",
"AUC RandomForest: 0.8348\n"
]
}
],
"source": [
"from sklearn.model_selection import GridSearchCV\n",
"from sklearn.ensemble import RandomForestClassifier\n",
"from sklearn.metrics import accuracy_score, roc_auc_score\n",
"\n",
"# Параметры для настройки RandomForest\n",
"param_grid_rf = {\n",
" \"n_estimators\": [100, 200, 300, 500], # Увеличено количество деревьев\n",
" \"max_depth\": [10, 20, 30, 50, None], # Больше вариантов глубины\n",
" \"min_samples_split\": [2, 5, 10, 15], # Более широкий диапазон\n",
" \"min_samples_leaf\": [1, 2, 4, 6], # Увеличено минимальное число в листе\n",
" \"max_features\": [\"sqrt\", \"log2\", None], # Добавлена настройка признаков для деления\n",
"}\n",
"\n",
"grid_search_rf = GridSearchCV(\n",
" estimator=RandomForestClassifier(random_state=42),\n",
" param_grid=param_grid_rf,\n",
" cv=5, # Кросс-валидация с 5 фолдами\n",
" scoring=\"roc_auc\", # Оценка по метрике AUC\n",
" n_jobs=-1,\n",
" verbose=2, # Вывод прогресса\n",
")\n",
"\n",
"grid_search_rf.fit(X_train, y_train)\n",
"\n",
"# Лучшие параметры и результаты\n",
"print(\"Лучшие параметры для RandomForest:\", grid_search_rf.best_params_)\n",
"best_rf_model = grid_search_rf.best_estimator_\n",
"\n",
"y_pred_rf = best_rf_model.predict(X_test)\n",
"accuracy_rf = accuracy_score(y_test, y_pred_rf)\n",
"roc_auc_rf = roc_auc_score(y_test, best_rf_model.predict_proba(X_test)[:, 1])\n",
"\n",
"print(f\"Точность RandomForest: {accuracy_rf:.4f}\")\n",
"print(f\"AUC RandomForest: {roc_auc_rf:.4f}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Логическая регрессия"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fitting 5 folds for each of 60 candidates, totalling 300 fits\n",
"Лучшие параметры для LogisticRegression: {'C': 5, 'max_iter': 100, 'penalty': 'l2', 'solver': 'liblinear'}\n",
"Точность LogisticRegression: 0.9460\n",
"AUC LogisticRegression: 0.5230\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\TEMP_UNIVERSITY\\mai\\.venv\\Lib\\site-packages\\sklearn\\model_selection\\_validation.py:540: FitFailedWarning: \n",
"150 fits failed out of a total of 300.\n",
"The score on these train-test partitions for these parameters will be set to nan.\n",
"If these failures are not expected, you can try to debug them by setting error_score='raise'.\n",
"\n",
"Below are more details about the failures:\n",
"--------------------------------------------------------------------------------\n",
"75 fits failed with the following error:\n",
"Traceback (most recent call last):\n",
" File \"c:\\TEMP_UNIVERSITY\\mai\\.venv\\Lib\\site-packages\\sklearn\\model_selection\\_validation.py\", line 888, in _fit_and_score\n",
" estimator.fit(X_train, y_train, **fit_params)\n",
" File \"c:\\TEMP_UNIVERSITY\\mai\\.venv\\Lib\\site-packages\\sklearn\\base.py\", line 1473, in wrapper\n",
" return fit_method(estimator, *args, **kwargs)\n",
" ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
" File \"c:\\TEMP_UNIVERSITY\\mai\\.venv\\Lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 1194, in fit\n",
" solver = _check_solver(self.solver, self.penalty, self.dual)\n",
" ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
" File \"c:\\TEMP_UNIVERSITY\\mai\\.venv\\Lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 75, in _check_solver\n",
" raise ValueError(\n",
"ValueError: Only 'saga' solver supports elasticnet penalty, got solver=liblinear.\n",
"\n",
"--------------------------------------------------------------------------------\n",
"75 fits failed with the following error:\n",
"Traceback (most recent call last):\n",
" File \"c:\\TEMP_UNIVERSITY\\mai\\.venv\\Lib\\site-packages\\sklearn\\model_selection\\_validation.py\", line 888, in _fit_and_score\n",
" estimator.fit(X_train, y_train, **fit_params)\n",
" File \"c:\\TEMP_UNIVERSITY\\mai\\.venv\\Lib\\site-packages\\sklearn\\base.py\", line 1473, in wrapper\n",
" return fit_method(estimator, *args, **kwargs)\n",
" ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
" File \"c:\\TEMP_UNIVERSITY\\mai\\.venv\\Lib\\site-packages\\sklearn\\linear_model\\_logistic.py\", line 1204, in fit\n",
" raise ValueError(\"l1_ratio must be specified when penalty is elasticnet.\")\n",
"ValueError: l1_ratio must be specified when penalty is elasticnet.\n",
"\n",
" warnings.warn(some_fits_failed_message, FitFailedWarning)\n",
"c:\\TEMP_UNIVERSITY\\mai\\.venv\\Lib\\site-packages\\sklearn\\model_selection\\_search.py:1103: UserWarning: One or more of the test scores are non-finite: [0.5074054 0.48088501 nan nan 0.5074054 0.48088501\n",
" nan nan 0.5074054 0.48088501 nan nan\n",
" 0.50938703 0.48088501 nan nan 0.50938703 0.48088501\n",
" nan nan 0.50938703 0.48088501 nan nan\n",
" 0.50984721 0.48088501 nan nan 0.50984721 0.48088501\n",
" nan nan 0.50984721 0.48088501 nan nan\n",
" 0.5098801 0.48088501 nan nan 0.5098801 0.48088501\n",
" nan nan 0.5098801 0.48088501 nan nan\n",
" 0.50983732 0.48088501 nan nan 0.50983732 0.48088501\n",
" nan nan 0.50983732 0.48088501 nan nan]\n",
" warnings.warn(\n"
]
}
],
"source": [
"# Параметры для настройки LogisticRegression\n",
"param_grid_lr = {\n",
" \"C\": [\n",
" 0.01,\n",
" 0.1,\n",
" 1,\n",
" 5,\n",
" 10,\n",
" ], # Регуляризационный параметр, добавлено больше вариантов\n",
" \"solver\": [\"liblinear\", \"saga\"], # Алгоритм оптимизации\n",
" \"max_iter\": [100, 200, 300], # Максимальное количество итераций\n",
" \"penalty\": [\"l2\", \"elasticnet\"], # Добавлена настройка для типа регуляризации\n",
"}\n",
"\n",
"# GridSearchCV для LogisticRegression\n",
"grid_search_lr = GridSearchCV(\n",
" estimator=LogisticRegression(random_state=42),\n",
" param_grid=param_grid_lr,\n",
" cv=5, # Увеличена кросс-валидация до 5 фолдов\n",
" scoring=\"roc_auc\", # Используется AUC вместо accuracy для более точной оценки\n",
" n_jobs=-1,\n",
" verbose=2, # Вывод прогресса выполнения\n",
")\n",
"\n",
"grid_search_lr.fit(X_train, y_train)\n",
"\n",
"# Лучшие параметры для LogisticRegression\n",
"print(\"Лучшие параметры для LogisticRegression:\", grid_search_lr.best_params_)\n",
"\n",
"# Обучение модели с лучшими параметрами\n",
"best_lr_model = grid_search_lr.best_estimator_\n",
"\n",
"# Оценка лучшей модели\n",
"y_pred_lr = best_lr_model.predict(X_test)\n",
"accuracy_lr = accuracy_score(y_test, y_pred_lr)\n",
"roc_auc_lr = roc_auc_score(y_test, best_lr_model.predict_proba(X_test)[:, 1])\n",
"\n",
"print(f\"Точность LogisticRegression: {accuracy_lr:.4f}\")\n",
"print(f\"AUC LogisticRegression: {roc_auc_lr:.4f}\")"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fitting 5 folds for each of 162 candidates, totalling 810 fits\n",
"Лучшие параметры для GradientBoosting: {'learning_rate': 0.01, 'max_depth': 3, 'min_samples_split': 5, 'n_estimators': 100, 'subsample': 0.8}\n",
"Точность GradientBoosting: 0.9460\n",
"AUC GradientBoosting: 0.8416\n"
]
}
],
"source": [
"# Параметры для настройки GradientBoosting\n",
"param_grid_gb = {\n",
" \"n_estimators\": [100, 200, 300], # Количество деревьев\n",
" \"learning_rate\": [0.01, 0.05, 0.1], # Скорость обучения\n",
" \"max_depth\": [3, 5, 7], # Глубина деревьев\n",
" \"subsample\": [0.8, 0.9, 1.0], # Доля выборки для обучения\n",
" \"min_samples_split\": [2, 5], # Минимальное количество образцов для разделения узла\n",
"}\n",
"\n",
"# GridSearchCV для GradientBoosting\n",
"grid_search_gb = GridSearchCV(\n",
" estimator=GradientBoostingClassifier(random_state=42),\n",
" param_grid=param_grid_gb,\n",
" cv=5, # Увеличена кросс-валидация до 5 фолдов\n",
" scoring=\"roc_auc\", # Используется AUC вместо accuracy для более точной оценки\n",
" n_jobs=-1,\n",
" verbose=2, # Вывод прогресса выполнения\n",
")\n",
"\n",
"grid_search_gb.fit(X_train, y_train)\n",
"\n",
"# Лучшие параметры для GradientBoosting\n",
"print(\"Лучшие параметры для GradientBoosting:\", grid_search_gb.best_params_)\n",
"\n",
"# Обучение модели с лучшими параметрами\n",
"best_gb_model = grid_search_gb.best_estimator_\n",
"\n",
"# Оценка лучшей модели\n",
"y_pred_gb = best_gb_model.predict(X_test)\n",
"accuracy_gb = accuracy_score(y_test, y_pred_gb)\n",
"roc_auc_gb = roc_auc_score(y_test, best_gb_model.predict_proba(X_test)[:, 1])\n",
"\n",
"print(f\"Точность GradientBoosting: {accuracy_gb:.4f}\")\n",
"print(f\"AUC GradientBoosting: {roc_auc_gb:.4f}\")"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1000x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import pandas as pd\n",
"\n",
"feature_importances = pd.Series(\n",
" best_rf_model.feature_importances_, index=X_train.columns\n",
")\n",
"feature_importances.sort_values(ascending=False).plot(kind=\"bar\")\n",
"plt.title(\"Важность признаков (RandomForest)\")\n",
"plt.show()\n",
"\n",
"feature_importances = pd.Series(\n",
" best_gb_model.feature_importances_, index=X_train.columns\n",
")\n",
"feature_importances.sort_values(ascending=False).plot(kind=\"bar\")\n",
"plt.title(\"Важность признаков (Gradient Boosting)\")\n",
"plt.show()\n",
"\n",
"\n",
"# Извлечение коэффициентов модели\n",
"coefficients = best_lr_model.coef_[0]\n",
"\n",
"# Получение имен признаков\n",
"feature_names = X_train.columns # если X_train это DataFrame\n",
"\n",
"# Сортировка признаков по важности (по абсолютным значениям коэффициентов)\n",
"importance = np.abs(coefficients)\n",
"sorted_idx = np.argsort(importance)[::-1] # Индексы сортировки по убыванию\n",
"\n",
"# Построение графика\n",
"plt.figure(figsize=(10, 6))\n",
"plt.barh(range(len(importance)), importance[sorted_idx], align=\"center\")\n",
"plt.yticks(range(len(importance)), np.array(feature_names)[sorted_idx])\n",
"plt.xlabel(\"Важность признака\")\n",
"plt.title(\"Важность признаков для Logistic Regression\")\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1000x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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CtWqVWPdunX079+f48ePO8Jou3btCA4OZu/evVSsWNHxPtu3b+fQoUMMHDjwrjXFZbfbadKkCZs2baJLly6UK1eOv/76i48//phDhw4lebzQ3fz99998/vnn8bZfu3aNp59+GsMw6NOnD/7+/gBJ+myjoqLYvn073bp1c9p+6NAhDh06ROfOnZPdM3Hw4EFat27Na6+9RnBwsONcmTp1KhUqVKBJkya4ubnx3Xff0b17d+x2Oz169HC8fvDgwbz//vsEBQURFBTEzp07eeqpp4iMjLzre//88888/fTTVKtWjSFDhuDi4uIIfb/++is1atRwat+iRQsCAgIYNWoUO3fu5IsvviB//vyMHj0aMM//zp07U6NGDbp06QJAYGDgXesICwvj8uXLAISEhPDjjz+yatUq+vfv79Ru6NChDBs2jAYNGtCtWzcOHjzI1KlT2b59O5s3b8bd3R24dSnyww8/zKhRo7hw4QITJ05k8+bN7Nq1i5w5cwLw4osv8r///Y/XX3+d4sWLc/HiRdasWcPJkycpXrw4EyZM4PXXX8fHx4cBAwYAUKBAgTsey5UrV2jcuDEvvPACLVq04JtvvqFv3748+OCDPP300wCEhoby5JNPcu7cOd544w0KFizIl19+yfr16xPcZ/ny5fH29mbz5s2On18RyWAMEZFMYtasWQZgfP/990ZgYKABGE899VSi7evVq2cAxrhx4xzbIiIijMqVKxv58+c3IiMjDcMwjPXr1xuAsX79eke7mjVrGk8//bQBGEOGDHFsHzJkiHH7P62rV682AGPx4sWObWFhYfHqGTVqlGGz2YwTJ044tvXv398AjHPnzjm2HTt2zACMjz766I6fx5tvvmkAxq+//urYdv36dSMgIMAoXry4ERMT4/Q5DB061On1HTt2NADjr7/+MgzDMK5evWp4eXkZffv2dWrXq1cvI3v27MaNGzcMwzCMOXPmGIBx9OhRp3b16tUz6tWr53g8b948w8XFxak+wzCMadOmGYCxefNmxzbA6NGjR7xjfOaZZ4xixYrF+2xmzZrl2NaiRQujYsWKhr+/v9GhQwfH9p9++skAjIULFzrts1ixYsYzzzwT773i+vvvvw3AmDRpktP2b7/91gCMCRMmOG232+3GpUuXnJaoqCin9wSMVatWxXuvhM6VRo0aGSVKlHA8vnjxouHh4WE888wzht1ud2x/7733DMDpuG8/n+12u1GqVCmjUaNGTq8NCwszAgICjIYNGzq2xZ7fr7zyilM9zZo1M/LkyeO0LXv27E7veyex31tCS7du3Zzqij3Wp556ynEOG4ZhTJ482QCMmTNnGoZhGJGRkUb+/PmNihUrGjdv3nS0+/777w3AGDx4sGEYhnHlypUk/TxVqFDB6fyNldC/D7E/U3PnznVsi4iIMAoWLGi8+OKLjm3jxo0zAGP58uWObTdv3jTKli0bb5+xSpcubTz99NN3rFVE0i9ddigimU7Hjh05deoUbdq0YfXq1U49Sbdzc3Pjtddeczz28PDgtdde4+LFi+zYsSPB1yxdupTt27fz4YcfJrrfy5cvc/nyZfbv38+0adPInj07jzzyiOP5uGN5QkNDuXz5MrVr18YwDHbt2uV47vr167i4uDj+Qp8cK1eupEaNGjz66KOObT4+PnTp0oXjx4+
"text/plain": [
"<Figure size 1000x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1000x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from sklearn.model_selection import learning_curve\n",
"\n",
"train_sizes, train_scores, test_scores = learning_curve(\n",
" best_rf_model, X_train, y_train, cv=3, scoring=\"accuracy\", n_jobs=-1\n",
")\n",
"\n",
"train_scores_mean = train_scores.mean(axis=1)\n",
"test_scores_mean = test_scores.mean(axis=1)\n",
"\n",
"plt.figure(figsize=(10, 6))\n",
"plt.plot(train_sizes, train_scores_mean, label=\"Точность на обучении\", color=\"blue\")\n",
"plt.plot(train_sizes, test_scores_mean, label=\"Точность на валидации\", color=\"orange\")\n",
"plt.xlabel(\"Размер обучающей выборки\")\n",
"plt.ylabel(\"Точность\")\n",
"plt.title(\"Кривая обучения (RandomForest)\")\n",
"plt.legend()\n",
"plt.grid()\n",
"plt.show()\n",
"\n",
"\n",
"train_sizes, train_scores, test_scores = learning_curve(\n",
" best_gb_model, X_train, y_train, cv=3, scoring=\"accuracy\", n_jobs=-1\n",
")\n",
"\n",
"train_scores_mean = train_scores.mean(axis=1)\n",
"test_scores_mean = test_scores.mean(axis=1)\n",
"\n",
"plt.figure(figsize=(10, 6))\n",
"plt.plot(train_sizes, train_scores_mean, label=\"Точность на обучении\", color=\"blue\")\n",
"plt.plot(train_sizes, test_scores_mean, label=\"Точность на валидации\", color=\"orange\")\n",
"plt.xlabel(\"Размер обучающей выборки\")\n",
"plt.ylabel(\"Точность\")\n",
"plt.title(\"Кривая обучения (Gradient Boosting)\")\n",
"plt.legend()\n",
"plt.grid()\n",
"plt.show()\n",
"\n",
"\n",
"train_sizes, train_scores, test_scores = learning_curve(\n",
" best_lr_model, X_train, y_train, cv=3, scoring=\"accuracy\", n_jobs=-1\n",
")\n",
"\n",
"train_scores_mean = train_scores.mean(axis=1)\n",
"test_scores_mean = test_scores.mean(axis=1)\n",
"\n",
"plt.figure(figsize=(10, 6))\n",
"plt.plot(train_sizes, train_scores_mean, label=\"Точность на обучении\", color=\"blue\")\n",
"plt.plot(train_sizes, test_scores_mean, label=\"Точность на валидации\", color=\"orange\")\n",
"plt.xlabel(\"Размер обучающей выборки\")\n",
"plt.ylabel(\"Точность\")\n",
"plt.title(\"Кривая обучения (Logistic Regression)\")\n",
"plt.legend()\n",
"plt.grid()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\TEMP_UNIVERSITY\\mai\\.venv\\Lib\\site-packages\\sklearn\\base.py:493: UserWarning: X does not have valid feature names, but RandomForestClassifier was fitted with feature names\n",
" warnings.warn(\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA0wAAAIjCAYAAAAwSJuMAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3gUVRfA4d/spvcOoYbeEaRIb1KkSFORIh1BEQWxgKCCqBQ7HwoqKihFFBCwAEqvolTpPdRAeu+7M98fQ0LKLiSQznmfJw9kZnbm7uxmd87cc89VNE3TEEIIIYQQQgiRjaGwGyCEEEIIIYQQRZUETEIIIYQQQghhhQRMQgghhBBCCGGFBExCCCGEEEIIYYUETEIIIYQQQghhhQRMQgghhBBCCGGFBExCCCGEEEIIYYUETEIIIYQQQghhhQRMQgghhBBCCGGFBExCCCGEEEIIYYUETEIIIUQGH3zwATVr1kRV1cJuyh1t374dRVHYvn17YTdFFKD+/fvTr1+/wm6GEA8UCZiEELmyePFiFEVJ/3FwcKB69eqMGzeO4ODgwm6eEPclJiaGOXPmMGnSJAyG21+RGd/ziqLg5uZG27Zt+eOPPwqxtYUnLViz9NO/f//Cbp5F8+fPZ/Hixfe1j2HDhmV7Hzz00EN8/PHHJCcnZ9v+yJEjPPPMM5QvXx57e3u8vLzo2LEjixYtwmw2Z9s+KioKBwcHFEXh1KlTFtswadIkVq9ezX///Xdfz0UIkXM2hd0AIUTxNGPGDCpVqkRSUhK7d+9mwYIFrF+/nuPHj+Pk5FTYzRPinnz33XeYTCYGDBiQbV2nTp0YMmQImqZx+fJlFixYwOOPP86GDRvo0qVLIbS28L300ks0adIk07KAgIDCacxdzJ8/Hx8fH4YNG3Zf+7G3t+ebb74B9ABn9erVvPrqq+zfv58VK1akb/fNN9/w3HPPUapUKQYPHky1atWIjY1ly5YtjBw5khs3bjBlypRM+165ciWKolC6dGmWLVvGe++9l+34DRs2pHHjxnz88cf88MMP9/VchBA5IwGTEOKedO3alcaNGwMwatQovL29+eSTT1i3bp3Fi00hioNFixbRs2dPHBwcsq2rXr06zzzzTPrvTzzxBLVr12bu3LkPbMDUunVrnnzyyTzfb3x8PM7Oznm+37xgY2OT6X0wduxYHnnkEX766Sc++eQTypQpw759+3juuedo3rw569evx9XVNX37CRMmcODAAY4fP55t30uXLqVbt25UrFiR5cuXWwyYAPr168e0adOYP38+Li4uef8khRCZSEqeECJPdOjQAYDAwEAAIiIiePXVV6lXrx4uLi64ubnRtWvXbGkku3fvplWrVvj4+ODg4EDlypWZNGkSSUlJ2Y6RNR0m7cfSHeMNGzbQunVrnJ2dcXV1pXv37pw4ccJi262lFl26dCnTdkuXLqVRo0Y4Ojri5eVF//79uXr1aqZt2rVrR926dbMd46OPPsq2z4CAgGxtT7vDnPUuvaqqfPbZZ9SpUwcHBwdKlSrFmDFjiIyMtPicMho2bFi2/S1duhSDwcDs2bPv6XwsWrSIDh064Ofnh729PbVr12bBggUWj79hwwbatm2Lq6srbm5uNGnShOXLl2fa5p9//qFbt254enri7OxM/fr1mTt3bqZttm7dmv6aenh40KtXr2xpS9OnT8/UZldXV5o2bcratWvvep4CAwM5evQoHTt2vOu2ALVq1cLHx4cLFy5kWr5u3Tq6d+9OmTJlsLe3p0qVKrz77rvZUrDS3isnT56kffv2ODk5UbZsWT744INsx7p27Rq9e/fG2dkZPz8/Xn75ZYspYKC/h9Lepz4+PjzzzDNcv3490zbDhg3DxcWFK1eu0KNHD1xcXChbtixffPEFAMeOHaNDhw44OzunX7zfi8OHD9O1a1fc3NxwcXHh0UcfZd++fZm2SUvz3bFjB2PHjsXPz49y5cqlr8/J3/LNmzcZPnw45cqVw97eHn9/f3r16pX+ng0ICODEiRPs2LEj/b3Rrl27e3pOWRkMhvR9pR3vnXfeQVEUli1blilYStO4ceNsf/tXrlxh165d9O/fn/79+xMYGMjevXstHrNTp07Ex8ezadOmPHkOQog7kx4mIUSeSLto9Pb2BuDixYusXbuWp556ikqVKhEcHMxXX31F27ZtOXnyJGXKlAEgNjaWWrVq0a9fP5ycnPj777/54IMPSEhIYN68edmOkzEdBvTerayWLFnC0KFD6dKlC3PmzCEhIYEFCxbQqlUrDh8+bDFlqE+fPvTt2xeAXbt28fXXX2da//777/PWW2/Rr18/Ro0aRWhoKPPmzaNNmzYcPnwYDw+PezpvGZlMJqZOnWpx3ZgxY1i8eDHDhw/npZdeIjAwkM8//5zDhw+zZ88ebG1tc3ycv/76ixEjRjBu3DgmT55scZu7nY8FCxZQp04devbsiY2NDb/99htjx45FVVVeeOGF9O0WL17MiBEjqFOnDm+88QYeHh4cPnyYjRs3MnDgQAA2bdpEjx498Pf3Z/z48ZQuXZpTp07x+++/M378eAA2b95M165dqVy5MtOnTycxMZF58+bRsmVLDh06lO01XbJkCQBhYWHMnz+fp556iuPHj1OjRg2r5yXt4vThhx/O0XmMjo4mMjKSKlWqZFq+ePFiXFxcmDhxIi4uLmzdupW3336bmJgYPvzww0zbRkZG8thjj9G3b1/69evHqlWrmDRpEvXq1aNr164AJCYm8uijj3LlyhVeeuklypQpw5IlS9i6dWu2NqW9R5o0acKsWbMIDg5m7ty57NmzJ9v71Gw207VrV9q0acMHH3zAsmXLGDduHM7OzkydOpVBgwbRt29fvvzyS4YMGULz5s2pVKlSpuPFxsYSFhaWaZmXlxcGg4ETJ07QunVr3NzceP3117G1teWrr76iXbt27Nixg0ceeSTT48aOHYuvry9vv/028fHxQM7/lp944glOnDjBiy++SEBAACEhIWzatIkrV64QEBDAZ599xosvvoiLi0v631ipUqVy9DrnRMbPv4SEBLZs2UKbNm2oUKFCjvfx448/4uzsTI8ePXB0dKRKlSosW7aMFi1aZNu2du3aODo6smfPHvr06ZNnz0MIYYUmhBC5sGjRIg3QNm/erIWGhmpXr17VVqxYoXl7e2uOjo7atWvXNE3TtKSkJM1sNmd6bGBgoGZvb6/NmDHjjsfo1q2bVrdu3WzLBw4cqLm4uGRa5uzsrA0dOjT999jYWM3Dw0N79tlnM2138+ZNzd3dPdvy1NRUDdDeeeedbM8xMDBQ0zRNu3TpkmY0GrX3338/02OPHTum2djYZFretm1brU6dOtna/uGHH2bap6ZpWsWKFTO1ff78+Zq9vb3Wvn17rWLFiunLd+3apQHasmXLMu1z48aNFpdnNXTo0PT9HThwQHNxcdGeeuqpbK9PTs+HpmlaQkJCtsd26dJFq1y5cvrvUVFRmqurq/bII49oiYmJmbZVVVXTNE0zmUxapUqVtIoVK2qRkZEWt9E0TWvQoIHm5+enhYeHpy/777//NIPBoA0ZMiR92bRp07SsX21//fWXBmg///xztjZn9Oabb2qAFhsbm20doI0cOVILDQ3VQkJCtAMHDmiPPfaYBmgffvhhpm0tnZsxY8ZoTk5OWlJSUvqytm3baoD2ww8/pC9LTk7WSpcurT3xxBPpyz777LNs7Y+Pj9eqVq2qAdq2bds0TdO0lJQUzc/PT6tbt26m8/37779rgPb222+nLxs6dKgGaDNnzkxfFhkZqTk6OmqKomgrVqxIX3769GkN0KZNm5a+bNu2bRpg8SftfdK7d2/Nzs5Ou3DhQvrjgoKCNFdXV61Nmzbpy9LeX61atdJMJlP68pz+LUdGRlp8HbKqU6eO1rZt2ztuczdDhw7VnJ2dtdDQUC00NFQ7f/68NnPmTE1RFK1+/fqapunvS0AbP358rvZdr149bdCgQem/T5kyRfPx8dFSU1Mtbl+9enWta9eu9/xchBA5Jyl5Qoh70rFjR3x9fSlfvjz9+/fHxcWFNWvWULZsWUDvCUq
"text/plain": [
"<Figure size 1000x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from sklearn.decomposition import PCA\n",
"from sklearn.preprocessing import StandardScaler\n",
"\n",
"# Применяем PCA для снижения размерности до 2D\n",
"scaler = StandardScaler()\n",
"X_scaled = scaler.fit_transform(X_test) # Масштабируем данные\n",
"pca = PCA(n_components=2)\n",
"X_pca = pca.fit_transform(X_scaled)\n",
"\n",
"# Устанавливаем диапазон для сетки\n",
"x_min, x_max = X_pca[:, 0].min() - 1, X_pca[:, 0].max() + 1\n",
"y_min, y_max = X_pca[:, 1].min() - 1, X_pca[:, 1].max() + 1\n",
"\n",
"xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.1), np.arange(y_min, y_max, 0.1))\n",
"\n",
"# Создаем новые данные на основе сетки для предсказаний\n",
"grid_points = pca.inverse_transform(\n",
" np.c_[xx.ravel(), yy.ravel()]\n",
") # Возвращаем в исходное пространство\n",
"Z = best_rf_model.predict(grid_points)\n",
"Z = Z.reshape(xx.shape)\n",
"\n",
"# Визуализация\n",
"plt.figure(figsize=(10, 6))\n",
"plt.contourf(xx, yy, Z, alpha=0.8, cmap=ListedColormap((\"orange\", \"blue\")))\n",
"plt.scatter(\n",
" X_pca[:, 0],\n",
" X_pca[:, 1],\n",
" c=y_test,\n",
" edgecolor=\"k\",\n",
" cmap=ListedColormap((\"red\", \"green\")),\n",
")\n",
"plt.title(\"Разделение классов (RandomForest, PCA)\")\n",
"plt.xlabel(\"PCA Component 1\")\n",
"plt.ylabel(\"PCA Component 2\")\n",
"plt.show()"
]
}
],
"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.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}