4368 lines
295 KiB
Plaintext
4368 lines
295 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"# Классификация"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"#### Загрузка набора данных"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 1,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>Survived</th>\n",
|
||
" <th>Pclass</th>\n",
|
||
" <th>Name</th>\n",
|
||
" <th>Sex</th>\n",
|
||
" <th>Age</th>\n",
|
||
" <th>SibSp</th>\n",
|
||
" <th>Parch</th>\n",
|
||
" <th>Ticket</th>\n",
|
||
" <th>Fare</th>\n",
|
||
" <th>Cabin</th>\n",
|
||
" <th>Embarked</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>PassengerId</th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>Braund, Mr. Owen Harris</td>\n",
|
||
" <td>male</td>\n",
|
||
" <td>22.0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>A/5 21171</td>\n",
|
||
" <td>7.2500</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>S</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
|
||
" <td>female</td>\n",
|
||
" <td>38.0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>PC 17599</td>\n",
|
||
" <td>71.2833</td>\n",
|
||
" <td>C85</td>\n",
|
||
" <td>C</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>Heikkinen, Miss. Laina</td>\n",
|
||
" <td>female</td>\n",
|
||
" <td>26.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>STON/O2. 3101282</td>\n",
|
||
" <td>7.9250</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>S</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
|
||
" <td>female</td>\n",
|
||
" <td>35.0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>113803</td>\n",
|
||
" <td>53.1000</td>\n",
|
||
" <td>C123</td>\n",
|
||
" <td>S</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>5</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>Allen, Mr. William Henry</td>\n",
|
||
" <td>male</td>\n",
|
||
" <td>35.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>373450</td>\n",
|
||
" <td>8.0500</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>S</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",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>887</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>Montvila, Rev. Juozas</td>\n",
|
||
" <td>male</td>\n",
|
||
" <td>27.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>211536</td>\n",
|
||
" <td>13.0000</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>S</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>888</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>Graham, Miss. Margaret Edith</td>\n",
|
||
" <td>female</td>\n",
|
||
" <td>19.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>112053</td>\n",
|
||
" <td>30.0000</td>\n",
|
||
" <td>B42</td>\n",
|
||
" <td>S</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>889</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>Johnston, Miss. Catherine Helen \"Carrie\"</td>\n",
|
||
" <td>female</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>W./C. 6607</td>\n",
|
||
" <td>23.4500</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>S</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>890</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>Behr, Mr. Karl Howell</td>\n",
|
||
" <td>male</td>\n",
|
||
" <td>26.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>111369</td>\n",
|
||
" <td>30.0000</td>\n",
|
||
" <td>C148</td>\n",
|
||
" <td>C</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>891</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>Dooley, Mr. Patrick</td>\n",
|
||
" <td>male</td>\n",
|
||
" <td>32.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>370376</td>\n",
|
||
" <td>7.7500</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Q</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>891 rows × 11 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" Survived Pclass \\\n",
|
||
"PassengerId \n",
|
||
"1 0 3 \n",
|
||
"2 1 1 \n",
|
||
"3 1 3 \n",
|
||
"4 1 1 \n",
|
||
"5 0 3 \n",
|
||
"... ... ... \n",
|
||
"887 0 2 \n",
|
||
"888 1 1 \n",
|
||
"889 0 3 \n",
|
||
"890 1 1 \n",
|
||
"891 0 3 \n",
|
||
"\n",
|
||
" Name Sex Age \\\n",
|
||
"PassengerId \n",
|
||
"1 Braund, Mr. Owen Harris male 22.0 \n",
|
||
"2 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 \n",
|
||
"3 Heikkinen, Miss. Laina female 26.0 \n",
|
||
"4 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 \n",
|
||
"5 Allen, Mr. William Henry male 35.0 \n",
|
||
"... ... ... ... \n",
|
||
"887 Montvila, Rev. Juozas male 27.0 \n",
|
||
"888 Graham, Miss. Margaret Edith female 19.0 \n",
|
||
"889 Johnston, Miss. Catherine Helen \"Carrie\" female NaN \n",
|
||
"890 Behr, Mr. Karl Howell male 26.0 \n",
|
||
"891 Dooley, Mr. Patrick male 32.0 \n",
|
||
"\n",
|
||
" SibSp Parch Ticket Fare Cabin Embarked \n",
|
||
"PassengerId \n",
|
||
"1 1 0 A/5 21171 7.2500 NaN S \n",
|
||
"2 1 0 PC 17599 71.2833 C85 C \n",
|
||
"3 0 0 STON/O2. 3101282 7.9250 NaN S \n",
|
||
"4 1 0 113803 53.1000 C123 S \n",
|
||
"5 0 0 373450 8.0500 NaN S \n",
|
||
"... ... ... ... ... ... ... \n",
|
||
"887 0 0 211536 13.0000 NaN S \n",
|
||
"888 0 0 112053 30.0000 B42 S \n",
|
||
"889 1 2 W./C. 6607 23.4500 NaN S \n",
|
||
"890 0 0 111369 30.0000 C148 C \n",
|
||
"891 0 0 370376 7.7500 NaN Q \n",
|
||
"\n",
|
||
"[891 rows x 11 columns]"
|
||
]
|
||
},
|
||
"execution_count": 1,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"import pandas as pd\n",
|
||
"\n",
|
||
"from sklearn import set_config\n",
|
||
"\n",
|
||
"set_config(transform_output=\"pandas\")\n",
|
||
"\n",
|
||
"random_state=9\n",
|
||
"\n",
|
||
"df = pd.read_csv(\"data/titanic.csv\", index_col=\"PassengerId\")\n",
|
||
"\n",
|
||
"df"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"#### Разделение набора данных на обучающую и тестовые выборки (80/20) для задачи классификации\n",
|
||
"\n",
|
||
"Целевой признак -- Survived"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 2,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"'X_train'"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"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>Survived</th>\n",
|
||
" <th>Pclass</th>\n",
|
||
" <th>Name</th>\n",
|
||
" <th>Sex</th>\n",
|
||
" <th>Age</th>\n",
|
||
" <th>SibSp</th>\n",
|
||
" <th>Parch</th>\n",
|
||
" <th>Ticket</th>\n",
|
||
" <th>Fare</th>\n",
|
||
" <th>Cabin</th>\n",
|
||
" <th>Embarked</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>PassengerId</th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>145</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>Andrew, Mr. Edgardo Samuel</td>\n",
|
||
" <td>male</td>\n",
|
||
" <td>18.00</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>231945</td>\n",
|
||
" <td>11.5000</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>S</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>206</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>Strom, Miss. Telma Matilda</td>\n",
|
||
" <td>female</td>\n",
|
||
" <td>2.00</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>347054</td>\n",
|
||
" <td>10.4625</td>\n",
|
||
" <td>G6</td>\n",
|
||
" <td>S</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>349</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>Coutts, Master. William Loch \"William\"</td>\n",
|
||
" <td>male</td>\n",
|
||
" <td>3.00</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>C.A. 37671</td>\n",
|
||
" <td>15.9000</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>S</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>329</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>Goldsmith, Mrs. Frank John (Emily Alice Brown)</td>\n",
|
||
" <td>female</td>\n",
|
||
" <td>31.00</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>363291</td>\n",
|
||
" <td>20.5250</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>S</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>289</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>Hosono, Mr. Masabumi</td>\n",
|
||
" <td>male</td>\n",
|
||
" <td>42.00</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>237798</td>\n",
|
||
" <td>13.0000</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>S</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",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>756</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>Hamalainen, Master. Viljo</td>\n",
|
||
" <td>male</td>\n",
|
||
" <td>0.67</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>250649</td>\n",
|
||
" <td>14.5000</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>S</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>816</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>Fry, Mr. Richard</td>\n",
|
||
" <td>male</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>112058</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>B102</td>\n",
|
||
" <td>S</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>890</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>Behr, Mr. Karl Howell</td>\n",
|
||
" <td>male</td>\n",
|
||
" <td>26.00</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>111369</td>\n",
|
||
" <td>30.0000</td>\n",
|
||
" <td>C148</td>\n",
|
||
" <td>C</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>738</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>Lesurer, Mr. Gustave J</td>\n",
|
||
" <td>male</td>\n",
|
||
" <td>35.00</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>PC 17755</td>\n",
|
||
" <td>512.3292</td>\n",
|
||
" <td>B101</td>\n",
|
||
" <td>C</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>61</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>Sirayanian, Mr. Orsen</td>\n",
|
||
" <td>male</td>\n",
|
||
" <td>22.00</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>2669</td>\n",
|
||
" <td>7.2292</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>C</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>712 rows × 11 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" Survived Pclass Name \\\n",
|
||
"PassengerId \n",
|
||
"145 0 2 Andrew, Mr. Edgardo Samuel \n",
|
||
"206 0 3 Strom, Miss. Telma Matilda \n",
|
||
"349 1 3 Coutts, Master. William Loch \"William\" \n",
|
||
"329 1 3 Goldsmith, Mrs. Frank John (Emily Alice Brown) \n",
|
||
"289 1 2 Hosono, Mr. Masabumi \n",
|
||
"... ... ... ... \n",
|
||
"756 1 2 Hamalainen, Master. Viljo \n",
|
||
"816 0 1 Fry, Mr. Richard \n",
|
||
"890 1 1 Behr, Mr. Karl Howell \n",
|
||
"738 1 1 Lesurer, Mr. Gustave J \n",
|
||
"61 0 3 Sirayanian, Mr. Orsen \n",
|
||
"\n",
|
||
" Sex Age SibSp Parch Ticket Fare Cabin Embarked \n",
|
||
"PassengerId \n",
|
||
"145 male 18.00 0 0 231945 11.5000 NaN S \n",
|
||
"206 female 2.00 0 1 347054 10.4625 G6 S \n",
|
||
"349 male 3.00 1 1 C.A. 37671 15.9000 NaN S \n",
|
||
"329 female 31.00 1 1 363291 20.5250 NaN S \n",
|
||
"289 male 42.00 0 0 237798 13.0000 NaN S \n",
|
||
"... ... ... ... ... ... ... ... ... \n",
|
||
"756 male 0.67 1 1 250649 14.5000 NaN S \n",
|
||
"816 male NaN 0 0 112058 0.0000 B102 S \n",
|
||
"890 male 26.00 0 0 111369 30.0000 C148 C \n",
|
||
"738 male 35.00 0 0 PC 17755 512.3292 B101 C \n",
|
||
"61 male 22.00 0 0 2669 7.2292 NaN C \n",
|
||
"\n",
|
||
"[712 rows x 11 columns]"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"'y_train'"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"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>Survived</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>PassengerId</th>\n",
|
||
" <th></th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>145</th>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>206</th>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>349</th>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>329</th>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>289</th>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>...</th>\n",
|
||
" <td>...</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>756</th>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>816</th>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>890</th>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>738</th>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>61</th>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>712 rows × 1 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" Survived\n",
|
||
"PassengerId \n",
|
||
"145 0\n",
|
||
"206 0\n",
|
||
"349 1\n",
|
||
"329 1\n",
|
||
"289 1\n",
|
||
"... ...\n",
|
||
"756 1\n",
|
||
"816 0\n",
|
||
"890 1\n",
|
||
"738 1\n",
|
||
"61 0\n",
|
||
"\n",
|
||
"[712 rows x 1 columns]"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"'X_test'"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"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>Survived</th>\n",
|
||
" <th>Pclass</th>\n",
|
||
" <th>Name</th>\n",
|
||
" <th>Sex</th>\n",
|
||
" <th>Age</th>\n",
|
||
" <th>SibSp</th>\n",
|
||
" <th>Parch</th>\n",
|
||
" <th>Ticket</th>\n",
|
||
" <th>Fare</th>\n",
|
||
" <th>Cabin</th>\n",
|
||
" <th>Embarked</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>PassengerId</th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>843</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>Serepeca, Miss. Augusta</td>\n",
|
||
" <td>female</td>\n",
|
||
" <td>30.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>113798</td>\n",
|
||
" <td>31.0000</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>C</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>791</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>Keane, Mr. Andrew \"Andy\"</td>\n",
|
||
" <td>male</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>12460</td>\n",
|
||
" <td>7.7500</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Q</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>509</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>Olsen, Mr. Henry Margido</td>\n",
|
||
" <td>male</td>\n",
|
||
" <td>28.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>C 4001</td>\n",
|
||
" <td>22.5250</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>S</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>828</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>Mallet, Master. Andre</td>\n",
|
||
" <td>male</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>S.C./PARIS 2079</td>\n",
|
||
" <td>37.0042</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>C</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>414</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>Cunningham, Mr. Alfred Fleming</td>\n",
|
||
" <td>male</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>239853</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>S</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",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>824</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>Moor, Mrs. (Beila)</td>\n",
|
||
" <td>female</td>\n",
|
||
" <td>27.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>392096</td>\n",
|
||
" <td>12.4750</td>\n",
|
||
" <td>E121</td>\n",
|
||
" <td>S</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>353</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>Elias, Mr. Tannous</td>\n",
|
||
" <td>male</td>\n",
|
||
" <td>15.0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>2695</td>\n",
|
||
" <td>7.2292</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>C</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>674</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>Wilhelms, Mr. Charles</td>\n",
|
||
" <td>male</td>\n",
|
||
" <td>31.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>244270</td>\n",
|
||
" <td>13.0000</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>S</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>100</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>Kantor, Mr. Sinai</td>\n",
|
||
" <td>male</td>\n",
|
||
" <td>34.0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>244367</td>\n",
|
||
" <td>26.0000</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>S</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>542</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>Andersson, Miss. Ingeborg Constanzia</td>\n",
|
||
" <td>female</td>\n",
|
||
" <td>9.0</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>347082</td>\n",
|
||
" <td>31.2750</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>S</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>179 rows × 11 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" Survived Pclass Name Sex \\\n",
|
||
"PassengerId \n",
|
||
"843 1 1 Serepeca, Miss. Augusta female \n",
|
||
"791 0 3 Keane, Mr. Andrew \"Andy\" male \n",
|
||
"509 0 3 Olsen, Mr. Henry Margido male \n",
|
||
"828 1 2 Mallet, Master. Andre male \n",
|
||
"414 0 2 Cunningham, Mr. Alfred Fleming male \n",
|
||
"... ... ... ... ... \n",
|
||
"824 1 3 Moor, Mrs. (Beila) female \n",
|
||
"353 0 3 Elias, Mr. Tannous male \n",
|
||
"674 1 2 Wilhelms, Mr. Charles male \n",
|
||
"100 0 2 Kantor, Mr. Sinai male \n",
|
||
"542 0 3 Andersson, Miss. Ingeborg Constanzia female \n",
|
||
"\n",
|
||
" Age SibSp Parch Ticket Fare Cabin Embarked \n",
|
||
"PassengerId \n",
|
||
"843 30.0 0 0 113798 31.0000 NaN C \n",
|
||
"791 NaN 0 0 12460 7.7500 NaN Q \n",
|
||
"509 28.0 0 0 C 4001 22.5250 NaN S \n",
|
||
"828 1.0 0 2 S.C./PARIS 2079 37.0042 NaN C \n",
|
||
"414 NaN 0 0 239853 0.0000 NaN S \n",
|
||
"... ... ... ... ... ... ... ... \n",
|
||
"824 27.0 0 1 392096 12.4750 E121 S \n",
|
||
"353 15.0 1 1 2695 7.2292 NaN C \n",
|
||
"674 31.0 0 0 244270 13.0000 NaN S \n",
|
||
"100 34.0 1 0 244367 26.0000 NaN S \n",
|
||
"542 9.0 4 2 347082 31.2750 NaN S \n",
|
||
"\n",
|
||
"[179 rows x 11 columns]"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"'y_test'"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"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>Survived</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>PassengerId</th>\n",
|
||
" <th></th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>843</th>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>791</th>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>509</th>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>828</th>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>414</th>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>...</th>\n",
|
||
" <td>...</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>824</th>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>353</th>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>674</th>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>100</th>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>542</th>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>179 rows × 1 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" Survived\n",
|
||
"PassengerId \n",
|
||
"843 1\n",
|
||
"791 0\n",
|
||
"509 0\n",
|
||
"828 1\n",
|
||
"414 0\n",
|
||
"... ...\n",
|
||
"824 1\n",
|
||
"353 0\n",
|
||
"674 1\n",
|
||
"100 0\n",
|
||
"542 0\n",
|
||
"\n",
|
||
"[179 rows x 1 columns]"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"from src.utils import split_stratified_into_train_val_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=\"Survived\", 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",
|
||
"\n",
|
||
"preprocessing_num -- конвейер для обработки числовых данных: заполнение пропущенных значений и стандартизация\n",
|
||
"\n",
|
||
"preprocessing_cat -- конвейер для обработки категориальных данных: заполнение пропущенных данных и унитарное кодирование\n",
|
||
"\n",
|
||
"features_preprocessing -- трансформер для предобработки признаков\n",
|
||
"\n",
|
||
"features_engineering -- трансформер для конструирования признаков\n",
|
||
"\n",
|
||
"drop_columns -- трансформер для удаления колонок\n",
|
||
"\n",
|
||
"features_postprocessing -- трансформер для унитарного кодирования новых признаков\n",
|
||
"\n",
|
||
"pipeline_end -- основной конвейер предобработки данных и конструирования признаков\n",
|
||
"\n",
|
||
"Конвейер выполняется последовательно.\n",
|
||
"\n",
|
||
"Трансформер выполняет параллельно для указанного набора колонок.\n",
|
||
"\n",
|
||
"Документация: \n",
|
||
"\n",
|
||
"https://scikit-learn.org/1.5/api/sklearn.pipeline.html\n",
|
||
"\n",
|
||
"https://scikit-learn.org/1.5/modules/generated/sklearn.compose.ColumnTransformer.html#sklearn.compose.ColumnTransformer"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 3,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"from sklearn.compose import ColumnTransformer\n",
|
||
"from sklearn.discriminant_analysis import StandardScaler\n",
|
||
"from sklearn.impute import SimpleImputer\n",
|
||
"from sklearn.pipeline import Pipeline\n",
|
||
"from sklearn.preprocessing import OneHotEncoder\n",
|
||
"\n",
|
||
"from src.transformers import TitanicFeatures\n",
|
||
"\n",
|
||
"\n",
|
||
"columns_to_drop = [\"Survived\", \"Name\", \"Cabin\", \"Ticket\", \"Embarked\", \"Parch\", \"Fare\"]\n",
|
||
"num_columns = [\n",
|
||
" column\n",
|
||
" for column in df.columns\n",
|
||
" if column not in columns_to_drop and df[column].dtype != \"object\"\n",
|
||
"]\n",
|
||
"cat_columns = [\n",
|
||
" column\n",
|
||
" for column in df.columns\n",
|
||
" if column not in columns_to_drop and df[column].dtype == \"object\"\n",
|
||
"]\n",
|
||
"\n",
|
||
"num_imputer = SimpleImputer(strategy=\"median\")\n",
|
||
"num_scaler = StandardScaler()\n",
|
||
"preprocessing_num = Pipeline(\n",
|
||
" [\n",
|
||
" (\"imputer\", num_imputer),\n",
|
||
" (\"scaler\", num_scaler),\n",
|
||
" ]\n",
|
||
")\n",
|
||
"\n",
|
||
"cat_imputer = SimpleImputer(strategy=\"constant\", fill_value=\"unknown\")\n",
|
||
"cat_encoder = OneHotEncoder(handle_unknown=\"ignore\", sparse_output=False, drop=\"first\")\n",
|
||
"preprocessing_cat = Pipeline(\n",
|
||
" [\n",
|
||
" (\"imputer\", cat_imputer),\n",
|
||
" (\"encoder\", cat_encoder),\n",
|
||
" ]\n",
|
||
")\n",
|
||
"\n",
|
||
"features_preprocessing = ColumnTransformer(\n",
|
||
" verbose_feature_names_out=False,\n",
|
||
" transformers=[\n",
|
||
" (\"prepocessing_num\", preprocessing_num, num_columns),\n",
|
||
" (\"prepocessing_cat\", preprocessing_cat, cat_columns),\n",
|
||
" (\"prepocessing_features\", cat_imputer, [\"Name\", \"Cabin\"]),\n",
|
||
" ],\n",
|
||
" remainder=\"passthrough\"\n",
|
||
")\n",
|
||
"\n",
|
||
"features_engineering = ColumnTransformer(\n",
|
||
" verbose_feature_names_out=False,\n",
|
||
" transformers=[\n",
|
||
" (\"add_features\", TitanicFeatures(), [\"Name\", \"Cabin\"]),\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",
|
||
" (\"prepocessing_cat\", preprocessing_cat, [\"Cabin_type\"]),\n",
|
||
" ],\n",
|
||
" remainder=\"passthrough\",\n",
|
||
")\n",
|
||
"\n",
|
||
"pipeline_end = Pipeline(\n",
|
||
" [\n",
|
||
" (\"features_preprocessing\", features_preprocessing),\n",
|
||
" (\"features_engineering\", features_engineering),\n",
|
||
" (\"drop_columns\", drop_columns),\n",
|
||
" (\"features_postprocessing\", features_postprocessing),\n",
|
||
" ]\n",
|
||
")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"#### Демонстрация работы конвейера для предобработки данных при классификации"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 4,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>Cabin_type_B</th>\n",
|
||
" <th>Cabin_type_C</th>\n",
|
||
" <th>Cabin_type_D</th>\n",
|
||
" <th>Cabin_type_E</th>\n",
|
||
" <th>Cabin_type_F</th>\n",
|
||
" <th>Cabin_type_G</th>\n",
|
||
" <th>Cabin_type_T</th>\n",
|
||
" <th>Cabin_type_u</th>\n",
|
||
" <th>Is_married</th>\n",
|
||
" <th>Pclass</th>\n",
|
||
" <th>Age</th>\n",
|
||
" <th>SibSp</th>\n",
|
||
" <th>Sex_male</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>PassengerId</th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>145</th>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>-0.379423</td>\n",
|
||
" <td>-0.869506</td>\n",
|
||
" <td>-0.473465</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>206</th>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0.821241</td>\n",
|
||
" <td>-2.102186</td>\n",
|
||
" <td>-0.473465</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>349</th>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0.821241</td>\n",
|
||
" <td>-2.025143</td>\n",
|
||
" <td>0.437635</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>329</th>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0.821241</td>\n",
|
||
" <td>0.132047</td>\n",
|
||
" <td>0.437635</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>289</th>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>-0.379423</td>\n",
|
||
" <td>0.979514</td>\n",
|
||
" <td>-0.473465</td>\n",
|
||
" <td>1.0</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",
|
||
" <td>...</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>756</th>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>-0.379423</td>\n",
|
||
" <td>-2.204652</td>\n",
|
||
" <td>0.437635</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>816</th>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>-1.580088</td>\n",
|
||
" <td>-0.099081</td>\n",
|
||
" <td>-0.473465</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>890</th>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>-1.580088</td>\n",
|
||
" <td>-0.253166</td>\n",
|
||
" <td>-0.473465</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>738</th>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>-1.580088</td>\n",
|
||
" <td>0.440217</td>\n",
|
||
" <td>-0.473465</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>61</th>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0.821241</td>\n",
|
||
" <td>-0.561336</td>\n",
|
||
" <td>-0.473465</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>712 rows × 13 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" Cabin_type_B Cabin_type_C Cabin_type_D Cabin_type_E \\\n",
|
||
"PassengerId \n",
|
||
"145 0.0 0.0 0.0 0.0 \n",
|
||
"206 0.0 0.0 0.0 0.0 \n",
|
||
"349 0.0 0.0 0.0 0.0 \n",
|
||
"329 0.0 0.0 0.0 0.0 \n",
|
||
"289 0.0 0.0 0.0 0.0 \n",
|
||
"... ... ... ... ... \n",
|
||
"756 0.0 0.0 0.0 0.0 \n",
|
||
"816 1.0 0.0 0.0 0.0 \n",
|
||
"890 0.0 1.0 0.0 0.0 \n",
|
||
"738 1.0 0.0 0.0 0.0 \n",
|
||
"61 0.0 0.0 0.0 0.0 \n",
|
||
"\n",
|
||
" Cabin_type_F Cabin_type_G Cabin_type_T Cabin_type_u \\\n",
|
||
"PassengerId \n",
|
||
"145 0.0 0.0 0.0 1.0 \n",
|
||
"206 0.0 1.0 0.0 0.0 \n",
|
||
"349 0.0 0.0 0.0 1.0 \n",
|
||
"329 0.0 0.0 0.0 1.0 \n",
|
||
"289 0.0 0.0 0.0 1.0 \n",
|
||
"... ... ... ... ... \n",
|
||
"756 0.0 0.0 0.0 1.0 \n",
|
||
"816 0.0 0.0 0.0 0.0 \n",
|
||
"890 0.0 0.0 0.0 0.0 \n",
|
||
"738 0.0 0.0 0.0 0.0 \n",
|
||
"61 0.0 0.0 0.0 1.0 \n",
|
||
"\n",
|
||
" Is_married Pclass Age SibSp Sex_male \n",
|
||
"PassengerId \n",
|
||
"145 0 -0.379423 -0.869506 -0.473465 1.0 \n",
|
||
"206 0 0.821241 -2.102186 -0.473465 0.0 \n",
|
||
"349 0 0.821241 -2.025143 0.437635 1.0 \n",
|
||
"329 1 0.821241 0.132047 0.437635 0.0 \n",
|
||
"289 0 -0.379423 0.979514 -0.473465 1.0 \n",
|
||
"... ... ... ... ... ... \n",
|
||
"756 0 -0.379423 -2.204652 0.437635 1.0 \n",
|
||
"816 0 -1.580088 -0.099081 -0.473465 1.0 \n",
|
||
"890 0 -1.580088 -0.253166 -0.473465 1.0 \n",
|
||
"738 0 -1.580088 0.440217 -0.473465 1.0 \n",
|
||
"61 0 0.821241 -0.561336 -0.473465 1.0 \n",
|
||
"\n",
|
||
"[712 rows x 13 columns]"
|
||
]
|
||
},
|
||
"execution_count": 4,
|
||
"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",
|
||
"\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 -- многослойный персептрон (нейронная сеть)\n",
|
||
"\n",
|
||
"Документация: https://scikit-learn.org/1.5/supervised_learning.html"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 5,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"from sklearn import ensemble, linear_model, naive_bayes, neighbors, neural_network, tree\n",
|
||
"\n",
|
||
"class_models = {\n",
|
||
" \"logistic\": {\"model\": linear_model.LogisticRegression()},\n",
|
||
" # \"ridge\": {\"model\": linear_model.RidgeClassifierCV(cv=5, class_weight=\"balanced\")},\n",
|
||
" \"ridge\": {\"model\": linear_model.LogisticRegression(penalty=\"l2\", class_weight=\"balanced\")},\n",
|
||
" \"decision_tree\": {\n",
|
||
" \"model\": tree.DecisionTreeClassifier(max_depth=7, random_state=random_state)\n",
|
||
" },\n",
|
||
" \"knn\": {\"model\": neighbors.KNeighborsClassifier(n_neighbors=7)},\n",
|
||
" \"naive_bayes\": {\"model\": naive_bayes.GaussianNB()},\n",
|
||
" \"gradient_boosting\": {\n",
|
||
" \"model\": ensemble.GradientBoostingClassifier(n_estimators=210)\n",
|
||
" },\n",
|
||
" \"random_forest\": {\n",
|
||
" \"model\": ensemble.RandomForestClassifier(\n",
|
||
" max_depth=11, class_weight=\"balanced\", random_state=random_state\n",
|
||
" )\n",
|
||
" },\n",
|
||
" \"mlp\": {\n",
|
||
" \"model\": neural_network.MLPClassifier(\n",
|
||
" hidden_layer_sizes=(7,),\n",
|
||
" max_iter=500,\n",
|
||
" early_stopping=True,\n",
|
||
" random_state=random_state,\n",
|
||
" )\n",
|
||
" },\n",
|
||
"}"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"#### Обучение моделей на обучающем наборе данных и оценка на тестовом"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 6,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Model: logistic\n",
|
||
"Model: ridge\n",
|
||
"Model: decision_tree\n",
|
||
"Model: knn\n",
|
||
"Model: naive_bayes\n",
|
||
"Model: gradient_boosting\n",
|
||
"Model: random_forest\n",
|
||
"Model: mlp\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"from src.utils import run_classification\n",
|
||
"\n",
|
||
"for model_name in class_models.keys():\n",
|
||
" print(f\"Model: {model_name}\")\n",
|
||
" model = class_models[model_name][\"model\"]\n",
|
||
"\n",
|
||
" pipeline = Pipeline([(\"pipeline\", pipeline_end), (\"model\", model)]).fit(\n",
|
||
" X_train, y_train.values.ravel()\n",
|
||
" )\n",
|
||
"\n",
|
||
" class_models[model_name] = run_classification(\n",
|
||
" pipeline, X_train, X_test, y_train, y_test\n",
|
||
" )"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"#### Сводная таблица оценок качества для использованных моделей классификации\n",
|
||
"\n",
|
||
"Документация: https://scikit-learn.org/1.5/modules/model_evaluation.html"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"Матрица неточностей"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 7,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "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cHBwEI6OjmL8+PFi4MCBWh98FUKIJ0+eiHHjxglPT08hlUqFn5+fWLFihbp+5syZwsPDQ0gkEhERESGEyH9Yd+HChaJevXrC2tpauLq6iuDgYHHgwAH1flu3bhV+fn5CJpOJtm3bihUrVuj94OuHH34oXFxchJ2dnejTp49YsGCBUCgU6vpp06aJJk2aiCVLlggvLy8hl8vFm2++KR48eKBx3NWrV4umTZsKqVQqnJycRLt27cTGjRuFEHzwlYiI8jE3F425mcqDRAgtTxUSERERERGRThzyR0REREREVErsUBEREREREZUSO1RERERERESlxA4VERERERFRKbFDRUREREREVErsUBEREREREZUSO1RERERERESlxA4VERERERFRKbFDRUREREREVErsUBEREREREZUSO1RERERERESlxA4VERERERFRKbFDRUREREREVErsUBEREREREZUSO1RkdB06dECHDh2MHkOjRo2MGgMREVF5kEgkmD59uvr1ypUrIZFIcO3aNaPFpMv+/fshkUiwYcMGY4eil2vXrkEikWDlypXGDoXKGDtURERERFSmHj9+jOnTp2P//v3GDsXgYmJisHDhQmOHQUZkZewAiH799Vdjh0BERFRpvfXWW+jbty9kMlmZvcfjx48xY8YMADD6qBRDi4mJwfnz5zF27FiNch8fHzx58gTW1tbGCYzKDTtUZHRSqdTYIRAREVVoKpUKOTk5kMvlBj+2paUlLC0tDX7cyk4ikZTJz4sqHg75I71Nnz4dEokEV65cQWRkJBwdHaFQKDBo0CA8fvxY3S46OhqBgYFwc3ODTCZDgwYNEBUVVeh4Tz9DlZKSAisrK/VVrKfFx8dDIpHg66+/VpelpqZi7Nix8Pb2hkwmg5+fH+bOnQuVSlWqc4uLi0OrVq1gY2MDX19fLF26VKM+JycHU6dORfPmzaFQKGBra4u2bdti37596jZCCNSsWRMhISGFjp+VlQWFQoF3331XXZadnY1p06bBz88PMpkM3t7emDBhArKzszX23b17N9q0aQNHR0fY2dmhXr16mDx5cqnOk4iIjGf//v1o0aIF5HI5ateujWXLlqlzawGJRIKRI0di9erVaNiwIWQyGWJjYwEA//vf/9CqVSu4uLjAxsYGzZs3L/L5ouzsbIwbNw6urq6wt7dHjx49cOvWrULttD1DtXPnTrRt2xa2trawt7dHt27dcOHCBY02kZGRsLOzw+3btxEaGgo7Ozu4urrigw8+gFKpBJD/LJGrqysAYMaMGZBIJIWe4yoJpVKJyZMnw8PDA7a2tujRowdu3rxZqN369evRvHlz2NjYoGrVqhgwYABu375dqN3evXvV5+fo6IiQkBBcvHhRo82jR48wduxY1KxZEzKZDG5ubujcuTNOnToFIP9vmO3bt+P69evq86pZs6b6vJ99hqokn1eB+/fv46233oKDgwMcHR0RERGBs2fP8rmsCoh3qKjUevfuDV9fX8yePRunTp3Cd999Bzc3N8ydOxcAEBUVhYYNG6JHjx6wsrLC1q1bMXz4cKhUKowYMaLIY7q7u6N9+/ZYt24dpk2bplG3du1aWFpaolevXgDyhw+0b98et2/fxrvvvosaNWrg6NGjmDRpEpKSkvQez/zw4UO89tpr6N27N/r164d169Zh2LBhkEqlePvttwEA6enp+O6779CvXz8MHToUjx49wvLlyxEcHIzff/8dTZs2hUQiwYABAzBv3jw8ePAAzs7O6vfYunUr0tPTMWDAAAD5Vxx79OiBw4cP45133oG/vz/OnTuHBQsW4NKlS9i8eTMA4MKFC+jevTsaN26MmTNnQiaT4cqVKzhy5Ihe50hERMZ1+vRpdOnSBZ6enpgxYwaUSiVmzpyp7nA8be/evVi3bh1GjhyJqlWrqv9Q//LLL9GjRw+Eh4cjJycHa9asQa9evbBt2zZ069ZNvf+QIUPw448/on///mjVqhX27t2rUa/LDz/8gIiICAQHB2Pu3Ll4/PgxoqKi0KZNG5w+fVodC5Df0QkODkbLli3xv//9D7/99hvmz5+P2rVrY9iwYXB1dUVUVBSGDRuGN954Az179gQANG7cWK/P7rPPPoNEIsFHH32Eu3fvYuHChQgKCsKZM2dgY2MDIL9zOGjQILz00kuYPXs2UlJS8OWXX+LIkSM4ffo0HB0dAQC//fYbunbtilq1amH69Ol48uQJvvrqK7Ru3RqnTp1Sn997772HDRs2YOTIkWjQoAHu37+Pw4cP4+LFi2jWrBk+/vhjpKWl4datW1iwYAEAwM7OTud5FPd5Afl/H7z++uv4/fffMWzYMNSvXx+//PILIiIi9PrMqJwIIj1NmzZNABBvv/22Rvkbb7whXFxc1K8fP35caN/g4GBRq1YtjbL27duL9u3bq18vW7ZMABDnzp3TaNegQQMRGBiofv3JJ58IW1tbcenSJY12EydOFJaWluLGjRslPqf27dsLAGL+/PnqsuzsbNG0aVPh5uYmcnJyhBBC5OXliezsbI19Hz58KNzd3TU+j/j4eAFAREVFabTt0aOHqFmzplCpVEIIIX744QdhYWEhDh06pNFu6dKlAoA4cuSIEEKIBQsWCADi3r17JT4nIiKqeF5//XVRpUoVcfv2bXXZ5cuXhZWVlXj6zzIAwsLCQly4cKHQMZ7Nrzk5OaJRo0YaOfLMmTMCgBg+fLhG2/79+wsAYtq0aeqy6OhoAUAkJiYKIYR49OiRcHR0FEOHDtXYNzk5WSgUCo3yiIgIAUDMnDlTo+2LL74omjdvrn597969Qu9bUvv27RMARLVq1UR6erq6fN26dQKA+PLLL9Wfg5ubm2jUqJF48uSJut22bdsEADF16lR1WUF+v3//vrrs7NmzwsLCQgwcOFBdplAoxIgRI3TG161bN+Hj41OoPDExUQAQ0dHR6rKSfl4///yzACAWLlyoLlMqlSIwMLDQMcn4OOSPSu29997TeN22bVvcv38f6enpAKC+WgQAaWlp+Oeff9C+fXtcvXoVaWlpWo/bs2dPWFlZYe3ateqy8+fP46+//kKfPn3UZevXr0fbtm3h5OSEf/75R70FBQVBqVTi4MGDep2PlZWVxlA8qVSKd999F3fv3kVcXByA/HHmBc98qVQqPHjwAHl5eWjRooX69j8A1K1bFy1btsTq1avVZQ8ePMDOnTsRHh6uHtaxfv16+Pv7o379+hrnEBgYCADqoYQFV9R++eWXUg9nJCIi41Iqlfjtt98QGhoKLy8vdbmfnx+6du1aqH379u3RoEGDQuVP59eHDx8iLS0Nbdu21chDO3bsAACMHj1aY99nJ04oyu7du5Gamop+/fpp5CZLS0u0bNlSY5h7gaL+Jrh69Wqx76WPgQMHwt7eXv36zTffhKenp/pcT548ibt372L48OEazy5169YN9evXx/bt2wEASUlJOHPmDCIjIzVGkTRu3BidO3dWHw/Iz78nTpzAnTt3DHouxX1esbGxsLa2xtChQ9VlFhYWWkf4kHGxQ0WlVqNGDY3XTk5OAPK/3AHgyJEjCAoKUo9NdnV1VT/zo6tDVbVqVXTq1Anr1q1Tl61duxZWVlbqYQIAcPnyZcTGxsLV1VVjCwoKAgDcvXtXr/Px8vKCra2tRlndunUBQGNc+ffff4/GjRtDLpfDxcUFrq6u2L59e6FzGjhwII4cOYLr168DyO885ebm4q233tI4hwsXLhQ6h4L3LTiHPn36oHXr1hgyZAjc3d3Rt29frFu3jp0rIiITcvfuXTx58gR+fn6F6ooq8/X1LfI427ZtwyuvvAK5XA5nZ2f1kLqn89D169dhYWGB2rVra+xbr169YuO8fPkyACAwMLBQfvr1118L5Ve5XF5oyKKTk5P67wFDqVOnjsZriUQCPz8/dY4uyLdFnWP9+vXV9bra+fv7459//kFmZiYAYN68eTh//jy8vb3x8ssvY/r06c/dUSzJ53X9+nV4enqiSpUqGu2K+n9CxsdnqKjUtM0IJIRAQkICOnXqhPr16+OLL76At7c3pFIpduzYgQULFhTbEejbty8GDRqEM2fOoGnTpli3bh06deqEqlWrqtuoVCp07twZEyZMKPIYBZ0SQ/rxxx8RGRmJ0NBQfPjhh3Bzc4OlpSVmz56NhISEQucwbtw4rF69GpMnT8aPP/6IFi1aaHyBq1QqvPDCC/jiiy+KfD9vb28A+VcjDx48iH379mH79u2IjY3F2rVrERgYiF9//ZWzMxERmaGn70QVOHToEHr06IF27dphyZIl8PT0hLW1NaKjoxETE2OQ9y3I0T/88AM8PDwK1VtZaf75aM45qHfv3mjbti02bdqEX3/9FZ9//jnmzp2LjRs3FnlXsSTM+fOqrNihojKxdetWZGdnY8uWLRp3sooaJlCU0NBQvPvuu+phf5cuXcKkSZM02tSuXRsZGRnqO1LP686dO8jMzNS4S3Xp0iUAUD+cumHDBtSqVQsbN27UmI3p2Qk0AMDZ2RndunXD6tWrER4ejiNHjhSaKKN27do4e/YsOnXqpHG8olhYWKBTp07o1KkTvvjiC8yaNQsff/wx9u3bZ7DPgIiIyo6bmxvkcjmuXLlSqK6osqL8/PPPkMvl2LVrl8a6UdHR0RrtfHx8oFKpkJCQoHEhLz4+vtj3KLir5ebmZrD8UlyOK4mCO2cFhBC4cuWKenILHx8fAPnnWDB0vkB8fLy6/ul2z/r7779RtWpVjb8FPD09MXz4cAwfPhx3795Fs2bN8Nlnn6k7VIY4t2f5+Phg3759ePz4scZdqpL+P6HyxSF/VCYKrr4IIdRlaWlphb7wtXF0dERwcDDWrVuHNWvWQCqVIjQ0VKNN7969cezYMezatavQ/qmpqcjLy9Mr5ry8PCxbtkz9OicnB8uWLYOrqyuaN2+u9bxOnDiBY8eOFXnMt956C3/99Rc+/PBDWFpaom/fvoXO4fbt2/j2228L7fvkyRP1kIMHDx4Uqm/atCkAFJpenYiIKiZLS0sEBQVh8+bNGs/kXLlyBTt37izxMSQSicYU29euXVPPClug4I/9RYsWaZSXZAbc4OBgODg4YNasWcjNzS1Uf+/evRLF+rSCTkFqaqre+xZYtWoVHj16pH69YcMGJCUlqc+1RYsWcHNzw9KlSzVy486dO3Hx4kX1DIeenp5o2rQpvv/+e414zp8/j19//RWvvfYagPxn3p4dzu/m5gYvLy+N49va2up8lKE0goODkZubq/H3gUqlwuLFiw36PmQYvENFZeLVV1+FVCrF66+/jnfffRcZGRn49ttv4ebmhqSkpBIdo0+fPhgwYACWLFmC4OBg9cQMBT788ENs2bIF3bt3R2RkJJo3b47MzEycO3cOGzZswLVr1zSGCBbHy8sLc+fOxbVr11C3bl2sXbsWZ86cwTfffKNe5bx79+7YuHEj3njjDXTr1g2JiYlYunQpGjRogIyMjELH7NatG1xcXLB+/Xp07doVbm5uGvVvvfUW1q1bh/feew/79u1D69atoVQq8ffff2PdunXYtWsXWrRogZkzZ+LgwYPo1q0bfHx8cPfuXSxZsgTVq1dHmzZtSnyORERkXNOnT8evv/6K1q1bY9iwYVAqlfj666/RqFEjnDlzptj9u3Xrhi+++AJdunRB//79cffuXSxevBh+fn74888/1e2aNm2Kfv36YcmSJUhLS0OrVq2wZ8+eEt3hcHBwQFRUFN566y00a9YMffv2haurK27cuIHt27ejdevWGmtCloSNjQ0aNGiAtWvXom7dunB2dkajRo3QqFGjEh/D2dkZbdq0waBBg5CSkoKFCxfCz89PPXGDtbU15s6di0GDBqF9+/bo16+fetr0mjVrYty4cepjff755+jatSsCAgIwePBg9bTpCoVCvT7Wo0ePUL16dbz55pto0qQJ7Ozs8Ntvv+GPP/7A/Pnz1cdq3rw51q5di/Hjx+Oll16CnZ0dXn/9db0+n2eFhobi5Zdfxvvvv48rV66gfv362LJli/oCa1ncFaPnYNxJBskUFUyb/uwU3s9Ou7plyxbRuHFjIZfLRc2aNcXcuXPFihUrNNoIUXja9ALp6enCxsZGABA//vhjkbE8evRITJo0Sfj5+QmpVCqqVq0qWrVqJf73v/+ppzovifbt24uGDRuKkydPioCAACGXy4WPj4/4+uuvNdqpVCoxa9Ys4ePjI2QymXjxxRfFtm3bRERERJFTpgohxPDhwwUAERMTU2R9Tk6OmDt3rmjYsKGQyWTCyclJNG/eXMyYMUOkpaUJIYTYs2ePCAkJEV5eXkIqlQovLy/Rr1+/QlPGExFRxbdnzx7x4osvCqlUKmrXri2+++478f777wu5XK5uA0DrdN3Lly8XderUETKZTNSvX19ER0erc/PTnjx5IkaPHi1cXFyEra2teP3118XNmzeLnTa9wL59+0RwcLBQKBRCLpeL2rVri8jISHHy5El1m4iICGFra1soxqLiOXr0qGjevLmQSqV6TaFeMG36Tz/9JCZNmiTc3NyEjY2N6Natm7h+/Xqh9mvXrhUvvviikMlkwtnZWYSHh4tbt24Vavfbb7+J1q1bCxsbG+Hg4CBef/118ddff6nrs7OzxYcffiiaNGki7O3tha2trWjSpIlYsmSJxnEyMjJE//79haOjowCg/ntA27TpJf287t27J/r37y/s7e2FQqEQkZGR4siRIwKAWLNmTYk+OyofEiGeGrtERAY3btw4LF++HMnJyYVm6yEiIgLy70hcuHCh0HNCRE/bvHkz3njjDRw+fBitW7c2djj0Lz5DRVSGsrKy8OOPPyIsLIydKSIiApD/jOzTLl++jB07dqBDhw7GCYgqpGf/nyiVSnz11VdwcHBAs2bNjBQVFYXPUJFZe/DgAXJycrTWW1paFloLwhDu3r2L3377DRs2bMD9+/cxZswYg78HERGZplq1aiEyMhK1atXC9evXERUVBalUqnUZEHOVk5NT5KRLT1MoFEVOH18ZjBo1Ck+ePEFAQACys7OxceNGHD16FLNmzaq0n0lFxQ4VmbWePXviwIEDWut9fHw0Fu01lL/++gvh4eFwc3PDokWL1DPyERERdenSBT/99BOSk5Mhk8kQEBCAWbNmFVq41twdPXoUHTt21NkmOjoakZGR5RNQBRMYGIj58+dj27ZtyMrKgp+fH7766iuMHDnS2KHRM/gMFZm1uLg4nSu129jYcAwyERGRETx8+BBxcXE62zRs2BCenp7lFBFR6bBDRUREREREVEoc8mckKpUKd+7cgb29PdcSoEpJCIFHjx7By8sLFhaGnR8nKytL57NzACCVSiGXyw36vkRk+pifqTIzdm4GTDM/s0NlJHfu3IG3t7exwyAyups3b6J69eoGO15WVhZ8feyQfFeps52HhwcSExNN7kubiMoW8zOR8XIzYJr5mR0qI7G3twcAXD9VEw52nL3eGNqe7mnsECo15eNsXBz0lfp3wVBycnKQfFeJxDgfONgX/buV/kgF3+bXkZOTY1Jf2ERU9pifje+Nui8YO4RKKw+5OIwdRsnNgOnmZ3aojKRgGIGDnYXO/1hUdiyryIwdAgFlNqTGxk7Axq7oR0Rz+egoEWnB/Gx8VhJrY4dQef2bHo2RmwHTzc/sUBGRWVJBBZWOOiIiIipfunJzQb0pYoeKiMySUggotVzp0lZOREREZUdXbi6oN0XsUBGRWcqDCrk66oiIiKh86crNBfWmiB0qIjJLKgioUPSVLm3lREREVHZ05eaCelPEDhURmSUO+SMiIqpYOOSPiMiE5EIgV8uVLm3lREREVHZ05eaCelPEDhURmSWlyN+01REREVH50pWbC+pNETtURGSWVP9u2uqIiIiofOnKzSimriJjh4qIzFKekCBXFL0wYZ6WciIiIio7unJzQb0pYoeKiMySEhIoUfQXs7ZyIiIiKju6cnNBvSmyMHYARERloeBLW9umr9u3b2PAgAFwcXGBjY0NXnjhBZw8eVJdL4TA1KlT4enpCRsbGwQFBeHy5cuGPCUiIiKTVlxuZoeKiKgCyRUWOjd9PHz4EK1bt4a1tTV27tyJv/76C/Pnz4eTk5O6zbx587Bo0SIsXboUJ06cgK2tLYKDg5GVlWXoUyMiIjJJxeVmffNzRcEhf0RklpSwgFLLNSOlnseaO3cuvL29ER0drS7z9fVV/1sIgYULF+L//u//EBISAgBYtWoV3N3dsXnzZvTt21fv+ImIiMyNrtycX2+aTLMbSERUDCEkUGnZxL8Pvaanp2ts2dnZRR5ry5YtaNGiBXr16gU3Nze8+OKL+Pbbb9X1iYmJSE5ORlBQkLpMoVCgZcuWOHbsWNmeKBERkYnQlZufzs+mhh0qIjJLOcJS5wYA3t7eUCgU6m327NlFHuvq1auIiopCnTp1sGvXLgwbNgyjR4/G999/DwBITk4GALi7u2vs5+7urq4jIiKq7IrLzQX52dRwyB8RmSUVJFBpuWak+ncl9ps3b8LBwUFdLpPJim6vUqFFixaYNWsWAODFF1/E+fPnsXTpUkRERBg4ciIiIvOkKzfn15vmyr68Q0VEZqkkswg5ODhobNo6VJ6enmjQoIFGmb+/P27cuAEA8PDwAACkpKRotElJSVHXERERVXac5Y+IyITkCkudmz5at26N+Ph4jbJLly7Bx8cHQP4EFR4eHtizZ4+6Pj09HSdOnEBAQMDznwwREZEZKC4365ufKwoO+SMis6TSMZOQvkMKxo0bh1atWmHWrFno3bs3fv/9d3zzzTf45ptvAAASiQRjx47Fp59+ijp16sDX1xdTpkyBl5cXQkNDn/dUiIiIzIKu3Jxfb5pD/tihIiKzpBQWUGpZz0Ip9PvCfumll7Bp0yZMmjQJM2fOhK+vLxYuXIjw8HB1mwkTJiAzMxPvvPMOUlNT0aZNG8TGxkIulz/XeRAREZkLXbk5v54dKiKiCkPX0IHcUnxfd+/eHd27d9daL5FIMHPmTMycOVP/gxMREVUCxQ3rK01+rgjYoSIis6R7YV8T/cYmIiIyYcUv7Gua+ZkdKiIySyphAZWWYQUqEx1SQEREZMp05eb8etPMz+xQEZFZyoWF1gUCc030ChgREZEp05Wb8+tNMz+zQ0VEZkkFCx0L+3LFCCIiovKmKzcX1JsidqiIyCzpnuXPNL+wiYiITFnxs/yZZn5mh4qIzFKusISV1ln+THNIARERkSnTlZvz600zP7NDRURmSfcsf6Z5BYyIiMiUFT/Ln2nmZ3aoiMgsqYQEKiHRWkdERETlS1duLqg3RexQEZFZyhNWyBVFf8XlmeaIAiIiIpOmKzfn15djMAbEDhURmSUlJFCi6Ctd2sqJiIio7OjKzQX1pogdKiIyS7oX9jXNMdpERESmrPiFfU0zP5tm1ERExcgVFsgVllo2fvURERGVN925Wb/8rFQqMWXKFPj6+sLGxga1a9fGJ598AvHUTIFCCEydOhWenp6wsbFBUFAQLl++bPDz4l8VRGSWCta60LYRERFR+SouN+uTn+fOnYuoqCh8/fXXuHjxIubOnYt58+bhq6++UreZN28eFi1ahKVLl+LEiROwtbVFcHAwsrKyDHpeHPJHRGZJQAKVlrHYwkTHaBMREZkyXbm5oL6kjh49ipCQEHTr1g0AULNmTfz000/4/fff848lBBYuXIj/+7//Q0hICABg1apVcHd3x+bNm9G3b9/nOBNNvExLRGYpV2WpcyMiIqLyVVxuLsjP6enpGlt2dnahY7Vq1Qp79uzBpUuXAABnz57F4cOH0bVrVwBAYmIikpOTERQUpN5HoVCgZcuWOHbsmEHPi3eoiMgscWFfIiKiiqWkC/t6e3trlE+bNg3Tp0/XKJs4cSLS09NRv359WFpaQqlU4rPPPkN4eDgAIDk5GQDg7u6usZ+7u7u6zlDYoSIis8SFfYmIiCqWki7se/PmTTg4OKjLZTJZobbr1q3D6tWrERMTg4YNG+LMmTMYO3YsvLy8EBERYfjgdWCHiojMUq6whIUoemhfrlCVczRERESkKzfn1+fnZwcHB40OVVE+/PBDTJw4Uf0s1AsvvIDr169j9uzZiIiIgIeHBwAgJSUFnp6e6v1SUlLQtGnT5zwTTRz3QkRmqeAqmLaNiIiIyldxuVmf/Pz48WNYWGh2ZSwtLaFS5XfKfH194eHhgT179qjr09PTceLECQQEBBjmhP7FO1QAJBIJNm3ahNDQ0FIfIzIyEqmpqdi8ebPB4qoo/kmyxvLPPPHHPgdkP7GAV81svL/gBuo2eQIA+N/YGti9zlljn+Yd0jEr5qoxwjVrNhvuw27VP3j8uhMyh7oBABSTb0B6/olGuyddFMgY7mGMECsMoWPxQMFp04kqPOZm3R5nWOD7eZ44ulOB1PtWqN3wCYZ9cgv1mubng2CvpkXuN+T/bqPX8HvlGKl5atQyA72G30OdFx7DxSMP09+uiWOxCnX9gPeT0SEkFa5eucjNkeDKORtEz/FA/GlbI0ZtfLpyc0F9Sb3++uv47LPPUKNGDTRs2BCnT5/GF198gbfffhtA/nfI2LFj8emnn6JOnTrw9fXFlClT4OXl9VzfK0Ux6w5VZGQkvv/+ewCAlZUVnJ2d0bhxY/Tr1w+RkZHqXm1SUhKcnJyMGWqF9SjVEuND6qBxq0f49MercHTJw+2rMtgplBrtWnRMx/sLbqhfW0vFs4ei52R1+QlsYtOQV7PwOOInryqQGV71vwIZ78AoIYFSy/Sr2sqJqOwxNxvGgve9cS1ejglfXYezey72/uyMiX388O3+v1HVMxc/nTmv0f6PvQ5Y8L432nRLM1LE5kVeRYWrF+TY9ZMzpq24Vqj+9lUZFn9cDUnXpZDJBd545x5m/3QVg1r5I+2BWf/5rZOu3FxQX1JfffUVpkyZguHDh+Pu3bvw8vLCu+++i6lTp6rbTJgwAZmZmXjnnXeQmpqKNm3aIDY2FnK5/LnO41lm/xPt0qULoqOjoVQqkZKSgtjYWIwZMwYbNmzAli1bYGVlpR5jSYWtW+yGql45+GDhTXWZR42cQu2spQLObnnlGVrl8kQF+/lJeDTSHVXW3S9ULWQWEE5m/+uslzyVBSy0TI+ep1IWWU5E5YO5+flkP5Hg8A5HTI9OxAuvZAIA3vogGcd3O2DbKhdEfpRcKCcf26VAk9YZ8PQpnMNJfyf3OeDkPu3P+OzbpHkx4JvpXuja/wF8GzzBmcP2ZR1ehaUrN+fXlzw/29vbY+HChVi4cKHWNhKJBDNnzsTMmTP1CVNvZj/uRSaTwcPDA9WqVUOzZs0wefJk/PLLL9i5cydWrlwJIP/Dfno4wM2bN9G7d284OjrC2dkZISEhuHbtmrpeqVRi/PjxcHR0hIuLCyZMmAAhzPOOzPFfFajb5DE+facmer/QEMM718WO1c6F2v15zA69X2iIwW3qY9HE6kh/wHV+DMl+aQpyWtght2nRQwXkB9LhEn4FTiMTYfv9PSCbky6o/l08UNtGRMbD3Px8lEoJVEoJpDLN73qZXIULv9sVav/wnhV+3+OA4L6FL8hR2bOyVuG1AfeRkWaBq3/ZGDscoyouN5tqfjb7DlVRAgMD0aRJE2zcuLFQXW5uLoKDg2Fvb49Dhw7hyJEjsLOzQ5cuXZCTk39VZ/78+Vi5ciVWrFiBw4cP48GDB9i0aZPO98zOzi60SJkpSLohxbZVVeHlm41ZMVfRPeI+oqZUx+51/115adEhHR9+eR1z1yVg8MdJOHfMDh8PqAUlbwIYhOxgOqyuZiFzYNUi67PbOSB9vCdSP/PG4zddINufDof5SeUcZcWjFBKdmz6mT58OiUSisdWvX19dn5WVhREjRsDFxQV2dnYICwtDSkqKoU+JyKwZIzcDppmfq9ip4N88EzELPXA/2QpKJbDnZydcjLPFg5TCoxV2r3OGjZ0SbV7jcL/y1DIoHZsvn8PWxHN4Y+g9TOpbG+mVeLgfUHxu1jc/VxSV9qdav359/Pnnn4XK165dC5VKhe+++w4SSf4PNTo6Go6Ojti/fz9effVVLFy4EJMmTULPnj0BAEuXLsWuXbt0vt/s2bMxY8YMw59IGRMqoE7jJ3h7Uv4f6H4vPMG1v+XY/kNVdO79EADQITRV3d7XPwu+DZ4gMqAB/jxqhxfbZhgjbLNhcS8Xdt/eRerM6oC06OsfWV0c1f9W1pRB5WQJxym3YJGUA5WntJwirXjyhKX2IX86pmzVpmHDhvjtt9/Ur62s/vv6HDduHLZv347169dDoVBg5MiR6NmzJ44cOaJ/4ESVWHnnZsB08/OEr67ji/E10L9ZI1hYCvi98BgdQh/i8p9VCrXdtcYZgW88hFRunnfsKqozR2wxvHNdODjnoWv4A3y87DpGd/ND2n1rY4dmNLpyc0G9Kaq0HSohhPpL+Wlnz57FlStXYG+vOb41KysLCQkJSEtLQ1JSElq2bKmus7KyQosWLXQOLZg0aRLGjx+vfp2enl5oFeiKyNktDz51szTKvOtk4fAOhZY9AE+fHCic83DnmowdqudklZAFizQlnMZdV5dJVID1hSew2f4Q//xcF7DU/H+cWy9/OIFlUm6l7lAJHUMHRCmGFGh7piMtLQ3Lly9HTEwMAgMDAeT/oefv74/jx4/jlVde0fu9iCqr8s7NgOnmZ6+aOfjfxivIemyBzEcWcHHPw2fv+sDTJ1uj3bkTtriVIMfkpdeME2gllv3EEneuWeLONRn+PmWLFYcvoku/B1j7tbuxQzMaXbm5oN4UVdoO1cWLF+Hr61uoPCMjA82bN8fq1asL1bm6upb6/WQyWZGrPFd0DV7KxM0EzbhvX5XBrVqu1n3u3bFG+kNLOLtpb0Mlk9vYFg++qqlRZv9lMpTVpXgc5lyoMwUAVlfzO8AqJ9O8ymMoutazKCh/dmiPrt/Ty5cvw8vLC3K5HAEBAZg9ezZq1KiBuLg45ObmIigoSN22fv36qFGjBo4dO8YOFZEeyjs3A6abnwvIq6ggr6LCo1RLxB1wwJD/u6NRv+snF9Rp/Bi1G2ZpOQKVF4kFYC2r3HcJi1trylTXiayUz1Dt3bsX586dQ1hYWKG6Zs2a4fLly3Bzc4Ofn5/GplAooFAo4OnpiRMnTqj3ycvLQ1xcXHmeQrnp+c5d/H3KFj8tcsPtRCn2bnTEjh9d0GPQPwCAJ5kW+HamFy7GVUHyTSlOH7LD9EG+8PLNRvMOj4wcvekTVSyg9JFpbEIugcreEkofGSySclBlzT+wupIFi5RcSE9kwGFhMnIa2kDpa9gpQU1NnspS5wYA3t7e6t9rhUKB2bNnF3msli1bYuXKlYiNjUVUVBQSExPRtm1bPHr0CMnJyZBKpXB0dNTYx93dHcnJyWV9mkRmg7lZPyf32+OPffZIviFF3AE7THjTD95+WXi1z38TT2Q+ssDBrQp06c/JKAxNXkWJWg2foFbD/HW/PLxzUKvhE7hWy4HMRolBE5NQv1km3KrlwO+Fxxj/xQ1U9cjFoa2Oxg3cyIrLzXk6hgNWZGZ/hyo7OxvJyckaU7POnj0b3bt3x8CBAwu1Dw8Px+eff46QkBDMnDkT1atXx/Xr17Fx40ZMmDAB1atXx5gxYzBnzhzUqVMH9evXxxdffIHU1NTyP7lyUK/pE0xdnojo2Z5YvcADHt45eG/mbQT2zH9+ysJCIPGiHLvX+yIz3RIu7nlo1j4dEROSIa3kV2HKhZUE1mcfw2brQ0iyBJRVrZAdYIfHfVyMHZnR6ZotqKD85s2bcHD4b9pbbVepu3btqv5348aN0bJlS/j4+GDdunWwsancMzYRlQZz8/PLTLdE9GxP/JNkDXtHJVq/lopBE5Ng9dTjOQd+cQKEBB1DHxovUDNVt8kTfP5zgvr1ezPy7wz+utYJiyZWR3W/bEzpdQ0Ozko8emiJS2er4P03/HD9UuW+2FncTH6mOsuf2XeoYmNj4enpCSsrKzg5OaFJkyZYtGgRIiIi1IsHPq1KlSo4ePAgPvroI/Ts2ROPHj1CtWrV0KlTJ/UfXu+//z6SkpLUx3j77bfxxhtvIC3NPGfPeaVzOl7pXPSsRzIbgVk/XS3niCq3tFk11P9WuVojbXYNHa0rr5IM+XNwcNDoUJWUo6Mj6tatiytXrqBz587IyclBamqqxl2qlJQUrqNDpAVz8/Nr3yMV7Xuk6mzz2oD7eG0A706VhT+P2SHYq4nW+k+G1Cy/YEyIuQ75M+sO1cqVK9XrWejy7AOrHh4e6lXci2JlZVXsQmJEZFx5KgtIVEWPas7TUl5SGRkZSEhIwFtvvYXmzZvD2toae/bsUQ9Vio+Px40bNxAQEPBc70NkjpibiSovXbm5oN4UmXWHiogqr5LcoSqpDz74AK+//jp8fHxw584dTJs2DZaWlujXrx8UCgUGDx6M8ePHw9nZGQ4ODhg1ahQCAgI4IQUREdFTeIeKiMiECGgfi63v0323bt1Cv379cP/+fbi6uqJNmzY4fvy4enaxBQsWwMLCAmFhYcjOzkZwcDCWLFnyfCdARERkZnTl5oJ6U8QOFRGZpTyVBWCgIX9r1qzRWS+Xy7F48WIsXrxYr+MSERFVJrpys7reBLFDRURmyZBD/oiIiOj5ccgfEZEJYYeKiIioYmGHiojIhCiFBSSi6KEDSi3lREREVHZ05eaCelPEDhURmSXeoSIiIqpYeIeKiMiECCGB0PLFrK2ciIiIyo6u3FxQb4rYoSIis6TUsXig0kRnESIiIjJlunJzQb0pYoeKiMyS0DGswFSvgBEREZkyXbm5oN4UlahDtWXLlhIfsEePHqUOhojIUAQAoWWFQFNdOJDoaczNRGRqdOXmgnpTVKIOVWhoaIkOJpFIoFQqnyceIiKDUAoLgLP8kRljbiYiU6MrN6vrTVCJOlQqlaqs4yAiMiiVkEDCWf7IjDE3E5Gp0ZWbC+pN0XN1A7OysgwVBxGRQQmheyMyV8zNRFRRFZebTTU/692hUiqV+OSTT1CtWjXY2dnh6tWrAIApU6Zg+fLlBg+QiKg0VCoLnRuROWFuJiJTUFxuNtX8rHfUn332GVauXIl58+ZBKpWqyxs1aoTvvvvOoMEREZVWweKB2jYic8LcTESmoLjcbKr5We8O1apVq/DNN98gPDwclpaW6vImTZrg77//NmhwRESlZY5DCoi0YW4mIlNgrkP+9F6H6vbt2/Dz8ytUrlKpkJuba5CgiIiel0ol0bp4oEplmlfAiLRhbiYiU6ArNxfUmyK971A1aNAAhw4dKlS+YcMGvPjiiwYJiojoeYliNiJzwtxMRKaguNxsqvlZ7ztUU6dORUREBG7fvg2VSoWNGzciPj4eq1atwrZt28oiRiIivQkh0briuqmuxE6kDXMzEZkCXbm5oN4U6X2HKiQkBFu3bsVvv/0GW1tbTJ06FRcvXsTWrVvRuXPnsoiRiEh/KgmElg0mOqSASBvmZiIyCTpysynnZ73vUAFA27ZtsXv3bkPHQkRkMLoebjXVh16JdGFuJqKKrriJJ0w1P5eqQwUAJ0+exMWLFwHkj91u3ry5wYIiInpeHPJHlRFzMxFVZOY65E/vDtWtW7fQr18/HDlyBI6OjgCA1NRUtGrVCmvWrEH16tUNHSMRkd7Uwwe01BGZE+ZmIjIFunJzQb0p0vsZqiFDhiA3NxcXL17EgwcP8ODBA1y8eBEqlQpDhgwpixiJiPRnjtMIEWnB3ExEJsFMp/nT+w7VgQMHcPToUdSrV09dVq9ePXz11Vdo27atQYMjIiotDvmjyoS5mYhMgbkO+dP7DpW3t3eRiwQqlUp4eXkZJCgiouclhI6ZhJ7zC3vOnDmQSCQYO3asuiwrKwsjRoyAi4sL7OzsEBYWhpSUlOc8C6KSYW4mIlOgMzeXIj/fvn0bAwYMgIuLC2xsbPDCCy/g5MmTT72fwNSpU+Hp6QkbGxsEBQXh8uXLhj4t/TtUn3/+OUaNGqUR7MmTJzFmzBj873//M2hwRESlVkZDCv744w8sW7YMjRs31igfN24ctm7divXr1+PAgQO4c+cOevbsWfo3ItIDczMRmQQDDvl7+PAhWrduDWtra+zcuRN//fUX5s+fDycnJ3WbefPmYdGiRVi6dClOnDgBW1tbBAcHIysry4AnVcIhf05OTpBI/usxZmZmomXLlrCyyt89Ly8PVlZWePvttxEaGmrQAImISkfy76atTn8ZGRkIDw/Ht99+i08//VRdnpaWhuXLlyMmJgaBgYEAgOjoaPj7++P48eN45ZVXSvV+RLowNxOR6dGVm1FMnaa5c+fC29sb0dHR6jJfX1/1v4UQWLhwIf7v//4PISEhAIBVq1bB3d0dmzdvRt++ffUNXqsSdagWLlxosDckIioXqn83bXUA0tPTNYplMhlkMpnWQ44YMQLdunVDUFCQRocqLi4Oubm5CAoKUpfVr18fNWrUwLFjx9ihojLB3ExEJkdXbgb0ys9btmxBcHAwevXqhQMHDqBatWoYPnw4hg4dCgBITExEcnKyRm5WKBRo2bIljh07Vv4dqoiICIO9IRFRuRCS/E1bHfKfO3natGnTMH369CJ3WbNmDU6dOoU//vijUF1ycjKkUql6uuoC7u7uSE5O1jt0opJgbiYik6MrNxfUo2T5+erVq4iKisL48eMxefJk/PHHHxg9ejSkUikiIiLU+dfd3V1jv7LIzaVe2BfIfwg7JydHo8zBweG5AiIiMgRdq7EXlN+8eVPjO0vb3ambN29izJgx2L17N+RyuaFDJTIo5mYiqqh05eaCeqBk+VmlUqFFixaYNWsWAODFF1/E+fPnsXTp0nK/4KT3pBSZmZkYOXIk3NzcYGtrCycnJ42NiKhCUEl0b8j/I/PpTVuHKi4uDnfv3kWzZs1gZWUFKysrHDhwAIsWLYKVlRXc3d2Rk5OD1NRUjf1SUlLg4eFR1mdKxNxMRKahuNysR3729PREgwYNNMr8/f1x48YNAFDn32dn3C2L3Kx3h2rChAnYu3cvoqKiIJPJ8N1332HGjBnw8vLCqlWrDBocEVFpSYTuTR+dOnXCuXPncObMGfXWokULhIeHq/9tbW2NPXv2qPeJj4/HjRs3EBAQYOAzIyqMuZmITEFxuVmf/Ny6dWvEx8drlF26dAk+Pj4A8ieo8PDw0MjN6enpOHHihMFzs95D/rZu3YpVq1ahQ4cOGDRoENq2bQs/Pz/4+Phg9erVCA8PN2iARESlomv6VT07VPb29mjUqJFGma2tLVxcXNTlgwcPxvjx4+Hs7AwHBweMGjUKAQEBnJCCygVzMxGZhOKmRtcjP48bNw6tWrXCrFmz0Lt3b/z+++/45ptv8M033wCAer3ITz/9FHXq1IGvry+mTJkCLy8vg898qneH6sGDB6hVqxaA/NtxDx48AAC0adMGw4YNM2hwRESl9tTQgSLrDGzBggWwsLBAWFgYsrOzERwcjCVLlhj8fYiKwtxMRCZBV24uqC+hl156CZs2bcKkSZMwc+ZM+Pr6YuHChRoXkCZMmIDMzEy88847SE1NRZs2bRAbG2vw56H17lDVqlULiYmJqFGjBurXr49169bh5ZdfxtatWwvNcEVEZDQGvENVlP3792u8lsvlWLx4MRYvXvz8ByfSE3MzEZkEA96hAoDu3buje/fuWuslEglmzpyJmTNn6ndgPen9DNWgQYNw9uxZAMDEiROxePFiyOVyjBs3Dh9++KHBAyQiKhUDrcROZAqYm4nIJBSXm000P+t9h2rcuHHqfwcFBeHvv/9GXFwc/Pz80LhxY4MGR0RUWhKVBBItQwe0lROZKuZmIjIFunJzQb0peq51qADAx8dHPZsGEVGFUcZD/ogqMuZmIqqQDDzkr6IoUYdq0aJFJT7g6NGjSx1MZfRG3RdgJbE2dhiV0g/XVho7hEot45EKrYwdBJEJY24uW2+2bAsridTYYVRKibPqGzuESkuVlQXM+MXYYZicEnWoFixYUKKDSSQSfmkTUYUgETqG/AnTHFJA9DTmZiIyNbpyc0G9KSpRhyoxMbGs4yAiMiwO+SMzx9xMRCanMg/5IyIyOexQERERVSzsUBERmQ6JKn/TVkdERETlS1duLqg3RexQEZF54h0qIiKiioV3qIiITIdE5G/a6oiIiKh86crNBfWmiB0qIjJPKkn+pq2OiIiIypeu3FxQb4IsSrPToUOHMGDAAAQEBOD27dsAgB9++AGHDx82aHBERKVVcBVM20ZkbpibiaiiKy43m2p+1rtD9fPPPyM4OBg2NjY4ffo0srOzAQBpaWmYNWuWwQMkIioVUcxGZEaYm4nIJBSXm000P+vdofr000+xdOlSfPvtt7C2tlaXt27dGqdOnTJocEREpab6bzahZzeY6CxCRNowNxORSdCRm005P+v9DFV8fDzatWtXqFyhUCA1NdUQMRERPT/O8keVCHMzEZkEM53lT+87VB4eHrhy5Uqh8sOHD6NWrVoGCYqI6HmZ4xhtIm2Ym4nIFPAZqn8NHToUY8aMwYkTJyCRSHDnzh2sXr0aH3zwAYYNG1YWMRIR6c8Mx2gTacPcTEQmwUyfodJ7yN/EiROhUqnQqVMnPH78GO3atYNMJsMHH3yAUaNGlUWMRER64zpUVJkwNxORKeA6VP+SSCT4+OOP8eGHH+LKlSvIyMhAgwYNYGdnVxbxERGVnol+MRPpi7mZiEyGGebmUi/sK5VK0aBBA0PGQkRkMOoZg7TUEZkj5mYiqsh05eaCelOkd4eqY8eOkEi0r2K8d+/e5wqIiMggOMsfVSLMzURkEsx0lj+9O1RNmzbVeJ2bm4szZ87g/PnziIiIMFRcRETPhc9QUWXC3ExEpoDPUP1rwYIFRZZPnz4dGRkZzx0QEZFB6FogUM8hBVFRUYiKisK1a9cAAA0bNsTUqVPRtWtXAEBWVhbef/99rFmzBtnZ2QgODsaSJUvg7u5e6vCJ9MHcTEQmobjFe010yJ/e06ZrM2DAAKxYscJQhyMiei6GXOeievXqmDNnDuLi4nDy5EkEBgYiJCQEFy5cAACMGzcOW7duxfr163HgwAHcuXMHPXv2LIOzItIPczMRVSTmug5VqSeleNaxY8cgl8sNdTgioudjwGeoXn/9dY3Xn332GaKionD8+HFUr14dy5cvR0xMDAIDAwEA0dHR8Pf3x/Hjx/HKK6/oHzuRgTA3E1GFwmeo8j171VUIgaSkJJw8eRJTpkwxWGBERM+jJLP8paena5TLZDLIZDKdx1UqlVi/fj0yMzMREBCAuLg45ObmIigoSN2mfv36qFGjBo4dO8YOFZUL5mYiMgWc5e9fCoVC47WFhQXq1auHmTNn4tVXXzVYYEREz6UEd6i8vb01iqdNm4bp06cXucu5c+cQEBCArKws2NnZYdOmTWjQoAHOnDkDqVQKR0dHjfbu7u5ITk5+rlMgKinmZiIyCbxDlX9ldtCgQXjhhRfg5ORUVjERET23kszyd/PmTTg4OKjLdd2dqlevHs6cOYO0tDRs2LABEREROHDggCFDJioV5mYiMhXmOsufXpNSWFpa4tVXX0VqamoZhUNEZCCqYjYADg4OGpuuDpVUKoWfnx+aN2+O2bNno0mTJvjyyy/h4eGBnJycQt+LKSkp8PDwKIszI9LA3ExEJqO43GyiQ/70nuWvUaNGuHr1alnEQkRkMJJituelUqmQnZ2N5s2bw9raGnv27FHXxcfH48aNGwgICDDAOxEVj7mZiExBcbnZEPnZGPR+hurTTz/FBx98gE8++QTNmzeHra2tRv3Tw2eIiIzGgLP8TZo0CV27dkWNGjXw6NEjxMTEYP/+/di1axcUCgUGDx6M8ePHw9nZGQ4ODhg1ahQCAgI4IQWVG+ZmIjIJlf0ZqpkzZ+L999/Ha6+9BgDo0aMHJJL/+pFCCEgkEiiVSsNHSUSkp5LM8ldSd+/excCBA5GUlASFQoHGjRtj165d6Ny5M4D8RVUtLCwQFhamsbAvUVljbiYiU1LpZ/mbMWMG3nvvPezbt68s4yEiMhwDXelavny5znq5XI7Fixdj8eLFhnlDohJibiYik2Oid6F0KXGHSoj8s2/fvn2ZBUNEZCglmeWPyNQxNxORKTHXWf70eobq6WEEREQVmSGH/BFVZMzNRGQqzHXIn16z/NWtWxfOzs46NyKiCkEUsxGZCeZmIjIZxeXm58jPc+bMgUQiwdixY9VlWVlZGDFiBFxcXGBnZ4ewsDCkpKSU/k200OsO1YwZMwqtxk5EVBFxyB9VFszNRGQqymrI3x9//IFly5ahcePGGuXjxo3D9u3bsX79eigUCowcORI9e/bEkSNHSvdGWujVoerbty/c3NwMGgARUZnQtUCgiQ4pICoKczMRmYziFu8tRX7OyMhAeHg4vv32W3z66afq8rS0NCxfvhwxMTEIDAwEAERHR8Pf3x/Hjx836NImJR7yxzHaRGRKCq6CaduIzAFzMxGZkuJyc0F+Tk9P19iys7O1HnPEiBHo1q0bgoKCNMrj4uKQm5urUV6/fn3UqFEDx44dM+h5lbhDVTCTEBGRSeAzVFQJMDcTkUkp4TNU3t7eUCgU6m327NlFHm7NmjU4depUkfXJycmQSqVwdHTUKHd3d0dycrKhzgiAHkP+VCqOkSEi0yFRCUhURf+xqa2cyNQwNxORKdGVmwvqAeDmzZtwcHBQl8tkskJtb968iTFjxmD37t2Qy+WGD1YPes3yR0RkKjjkj4iIqGIp6ZA/BwcHja2oDlVcXBzu3r2LZs2awcrKClZWVjhw4AAWLVoEKysruLu7IycnB6mpqRr7paSkwMPDw6DnpdekFEREJkPX0D52qIiIiMpfccPu9cjPnTp1wrlz5zTKBg0ahPr16+Ojjz6Ct7c3rK2tsWfPHoSFhQEA4uPjcePGDQQEBOgfuw7sUBGRWeLCvkRERBWLIRf2tbe3R6NGjTTKbG1t4eLioi4fPHgwxo8fD2dnZzg4OGDUqFEICAgw6Ax/ADtURGSmuA4VERFRxVJW61Bps2DBAlhYWCAsLAzZ2dkIDg7GkiVLDPsmYIeKiMwVh/wRERFVLAYc8leU/fv3a7yWy+VYvHgxFi9e/HwHLgY7VERknoSOmYQ41TQREVH505Wb/603RexQkV4sLAQGvJ+MTmGpcHLNxf0Ua+xe54yYhW4AuMBkWUhNlmLbnBr4e78jcp5YomrNLPT7/Aq8G2cCAP6MdcbR1e64dc4Wj1Ot8f72s6jW8LGRozY+DvkjInPVqHkqwt6+Cb8Gj+DiloNPRjXEsb2u6vodF/YXud/y/9XCz9E1yilK8zWq6R8Y1TROo+xqmiO6bOoLhTQLo188idZeN+Flm4EHWTb47UZNLDz9EjJyC89UV9mU95C/8lKhO1QSiQSbNm1CaGhoqY9x7do1+Pr64vTp02jatKnBYnvW9OnTsXnzZpw5c6bM3qMi6D3iLrpH3Mf/xtTA9Xg56jR5jPcX3ETmIwv8sty1+AOQXh6nWeKrsIbwC0jH0JV/w84lF/8kymGjyFO3yXlsAd8Wj9C0232sm1jbiNFWMBzyR1RmmJ+NS26jRGK8LX7d6IEpiy4Uqg9vrzmDWYs2DzDmk3gc2c08bSiXHjoh8tfX1a+VqvyLym5VHsPNJhNz/wjAlTQnVLPNwIyAg3Cr8hij979qrHArjjIe8mcsRu1Q3bt3D1OnTsX27duRkpICJycnNGnSBFOnTkXr1q2RlJQEJyen53oPb29vJCUloWrVqgaKunJr0CITx3Yp8Pue/MXWUm5J0TE0FfWa8o5IWdgbVQ2OXjno978EdZmLd7ZGmxY9/wEAPLjJK19PkygBiZaV9iTK8o2FyNQwP1dsJw+74ORhF631D//RzAevBP6DP393RPItm7IOrdJQCgv886RKofLLqc4YtT9Y/frmIwUWnHoZ/2u3B5YSFZSici8Bqys3F9SbIqN2qMLCwpCTk4Pvv/8etWrVQkpKCvbs2YP79+8DQLGLbuXm5sLa2lpnG0tLS4Mv3lWZ/XXSFl0H3Ee1Wtm4fVWGWg2eoOHLmVg23cvYoZmlC785oV67VHw/vC4STjhA4Z6DVm8lI6DfXWOHVuFxyB9R6TE/mw9Hlxy81O4Bvvi4vrFDMSs+9mk41HsVcpSWOH3XHfNPtURSpn2Rbe2lOcjIlVb6zhRgvkP+jPaTTU1NxaFDhzB37lx07NgRPj4+ePnllzFp0iT06NEDQP6Qgs2bNwPIHxogkUiwdu1atG/fHnK5HFFRUbCxscHOnTs1jr1p0ybY29vj8ePH6v3OnDkDlUqF6tWrIyoqSqP96dOnYWFhgevXr6tjGzJkCFxdXeHg4IDAwECcPXtWY585c+bA3d0d9vb2GDx4MLKysnSeb3Z2NtLT0zU2U7T2azcc+MUR3x38G9uvn8XiXy9h07dVsW/T812ppKLdvyHH0R89ULXmE7zz/V9oNSAZm6b74o8NHLZRLCF0b0RUJOZn08zP2gSFJOPJY0sc2c07gYZy9p47Jh7uiCG7u2HasXaobv8IMV1/ga1VTqG2TrInGN4kDmvj/Y0QaQVUXG420fxstA6VnZ0d7OzssHnzZmRnZxe/w78mTpyIMWPG4OLFi+jVqxe6d++OmJgYjTarV69GaGgoqlTRvBVrYWGBfv36Fdm+devW8PHxAQD06tULd+/exc6dOxEXF4dmzZqhU6dOePDgAQBg3bp1mD59OmbNmoWTJ0/C09Oz2DntZ8+eDYVCod68vb1LfM4VSbseqQjsmYo5I2pgRHBd/G+MN9587x6Cej0wdmhmSQigeqNMdJtwE9UbPUZA/7t4pV8Kjq52N3ZoFV7B4oHaNiIqGvOzaeZnbTq/kYR929yRm2Np7FDMxsHbNRB7vTbiH7rg8B1vDP3tNThIc9DVN0Gjna11Dr4J2omEVCd8daaFkaKtWIrLzaaan43WobKyssLKlSvx/fffw9HREa1bt8bkyZPx559/6txv7Nix6NmzJ3x9feHp6Ynw8HBs3rwZjx/nP8OTnp6O7du3Izw8vMj9w8PDceTIEdy4cQMAoFKpsGbNGnX7w4cP4/fff8f69evRokUL1KlTB//73//g6OiIDRs2AAAWLlyIwYMHY/DgwahXrx4+/fRTNGjQQGfckyZNQlpamnq7efOmXp9XRTF0StK/d6mccO1vG+z52Rkbv3VF31EcglYWHNxy4V5H8/k099pP8PAOn5cqTsGwAm0bERWN+dk083NRGjZLhXetJ9j1s6exQzFrj3JkuJaugI/9f3c3ba1ysLzzdmTmWmP4vmDkCXZogeJzs6nmZ6MO5gwLC8OdO3ewZcsWdOnSBfv370ezZs2wcuVKrfu0aKHZw3/ttddgbW2NLVu2AAB+/vlnODg4ICgoqMj9mzZtCn9/f/VVsAMHDuDu3bvo1asXAODs2bPIyMiAi4uL+iqdnZ0dEhMTkZCQf+Xh4sWLaNmypcZxAwI0Z9R5lkwmg4ODg8ZmimRyFcQzVw9USkBiqr8BFVzN5o9w96rmQ8T3EuVwrlbyq8aVlhkOKSAqL8zP5uHVsCRcPm+HxHg7Y4di1qpY5cLbPh13/52kwtY6Byte3Y5clQXe29MFOcoKPal2+eKQv7Ihl8vRuXNnTJkyBUePHkVkZCSmTZumtb2tra3Ga6lUijfffFP9BRwTE4M+ffrAykr7f97w8HCN9l26dIGLS/5sORkZGfD09MSZM2c0tvj4eHz44YfPe7om7/huB/QdfRcvd0qHe/UctOqShp7v3sPRWIWxQzNL7QffwfXTdvhtcTXcuyZH3C9Vcfwnd7QemKxuk5lqhdsXqiD5Sn7H6+5VG9y+UAXpd3U/EG7uzHFIAVF5Yn6uuORV8lCr/iPUqv8IAOBePQu16j+Cq+d/z4vZ2Oah7av3eHeqDHzU4hhecr+DanbpeNE1GYsDY6ESEmy76gdb6xxEv7oNNla5mHykA+ykuahq8xhVbR7DgsmHQ/7KS4MGDZCZmanXPuHh4YiNjcWFCxewd+9ercMJCvTv3x/nz59HXFwcNmzYoNG+WbNmSE5OhpWVFfz8/DS2gqld/f39ceLECY1jHj9+XK+YTdWS/6uGw9sVGDn7Fr498DeGTr2DHT+44Pt5nKmpLNRokolBy+JxaktVfP5qE+xeVA0hU6+heeg/6jYXdjthfrcm+G5Q/gOvP4yqi/ndmlT656wMOaRg9uzZeOmll2Bvbw83NzeEhoYiPj5eo01WVhZGjBihvnoeFhaGlJQUA54RkXExP1ccdRo+wtc/x+Hrn/MXl33nowR8/XMcBoxMVLdp/9pdQALs31G5c0FZ8LDNwBftf8OuN9bgyw67kZotR6/tb+Bhtg0autxDU9e7qO/8AHvCfsLRPqvUm6dthrFDNzpzHfJntHuQ9+/fR69evfD222+jcePGsLe3x8mTJzFv3jyEhITodax27drBw8MD4eHh8PX1LXS7/1k1a9ZEq1atMHjwYCiVSvWsRQAQFBSEgIAAhIaGYt68eahbty7u3LmD7du344033kCLFi0wZswYREZGokWLFmjdujVWr16NCxcuoFatWqX6LEzJk0xLLJ1WDUunVTN2KJVGw06paNgpVWv9y73u4eVe98ovIFOhEvmbtjo9HDhwACNGjMBLL72EvLw8TJ48Ga+++ir++usv9VX5cePGYfv27Vi/fj0UCgVGjhyJnj174siRI897JkTlivm54jv3hxNea9hBZ5vY9V6IXc8lTcrCuAOdtdb9nlwNdVe+V47RmBhdubmg3gQZrUNlZ2eHli1bYsGCBUhISEBubi68vb0xdOhQTJ48Wa9jSSQS9OvXD/PmzcPUqVNLtE94eDiGDx+OgQMHwsbmv2dUJBIJduzYgY8//hiDBg3CvXv34OHhgXbt2sHdPf8qT58+fZCQkIAJEyYgKysLYWFhGDZsGHbt2qVX3ERUdiRC+9ABfa+AxcbGarxeuXIl3NzcEBcXh3bt2iEtLQ3Lly9HTEwMAgMDAQDR0dHw9/fH8ePH8corr5TmFIiMgvmZiMqKrtxcUG+KJEKY6NNfJi49PR0KhQIdEAIrSeV+1sVYvrh2zNghVGoZj1Ro1SgJaWlpBn0IvOB3q3Wn6bCykhfZJi8vC0f2TMfNmzc13lsmk0EmK34GxStXrqBOnTo4d+4cGjVqhL1796JTp054+PAhHB0d1e18fHwwduxYjBs37rnPi4jKR8F3SCenCFhJpMYOp1K68iEXITYWVVYWEmd8bJTcDPyXnw39/mWtwj1DRURkCCUZo+3t7a2x/szs2bOLPa5KpcLYsWPRunVrNGrUCACQnJwMqVSq0ZkCAHd3dyQnJxdxFCIiosqHz1AREZkQiUpAomUsdkF5UXeoijNixAicP38ehw8fNkygRERElYSu3FxQb4rYoSIi86T6d9NWB+i95szIkSOxbds2HDx4ENWrV1eXe3h4ICcnB6mpqRp3qVJSUuDhwRkwiYiIAOjOzSimrgLjkD8iMksSIXRu+hBCYOTIkdi0aRP27t0LX19fjfrmzZvD2toae/bsUZfFx8fjxo0bxS4qSkREVFkUl5v1zc8VBe9QEZF5MuC06SNGjEBMTAx++eUX2Nvbq5+LUigUsLGxgUKhwODBgzF+/Hg4OzvDwcEBo0aNQkBAAGf4IyIiKsBp04mITIeuh1v1feg1KioKANChQweN8ujoaERGRgIAFixYAAsLC4SFhSE7OxvBwcFYsmSJnlETERGZr+ImnuCkFEREFYkQ+Zu2Or0OVXx7uVyOxYsXY/HixXodm4iIqNLQlZsL6k0QO1REZJYkSgGJlktdEqVpfmETERGZMl25uaDeFLFDRUTmSfy7aasjIiKi8qUrN6OYugqMHSoiMku6Zgsy1VmEiIiITFlxM/mZan5mh4qIzJNKANqGDpjoLEJEREQmTVduLqg3QexQEZFZ4h0qIiKiioV3qIiITImAjln+yjUSIiIiAnTn5oJ6E8QOFRGZJ6WOJ19NdBYhIiIik6YrN6vrTQ87VERkljjkj4iIqGLhkD8iIlNiwIV9iYiIyAC4sC8RkQlRqQCJSnsdERERlS9dubmg3gSxQ0VE5kkFQKKjjoiIiMqXrtxcUG+C2KEiIrPEZ6iIiIgqFj5DRURkSpQqaL3UpTTRS2BERESmTFduVtebHnaoiMg8cVIKIiKiisVMJ6WwMHYARERlQ/z3xf3sZqorBxIREZk0HblZz/w8e/ZsvPTSS7C3t4ebmxtCQ0MRHx+v0SYrKwsjRoyAi4sL7OzsEBYWhpSUFAOfEztURGSulCrdGxEREZWv4nKzHvn5wIEDGDFiBI4fP47du3cjNzcXr776KjIzM9Vtxo0bh61bt2L9+vU4cOAA7ty5g549exr8tDjkj4jMk1Dlb9rqiIiIqHzpys0F9QDS09M1imUyGWQymUZZbGysxuuVK1fCzc0NcXFxaNeuHdLS0rB8+XLExMQgMDAQABAdHQ1/f38cP34cr7zyigFOKB/vUBGRedI1pMBEx2gTERGZtOJy87/52dvbGwqFQr3Nnj272EOnpaUBAJydnQEAcXFxyM3NRVBQkLpN/fr1UaNGDRw7dsygp8U7VERknpQ6roKZ6MKBREREJk1XbgbU+fnmzZtwcHBQFz97d6rwbiqMHTsWrVu3RqNGjQAAycnJkEqlcHR01Gjr7u6O5OTk0sWvBTtURGSeBHTM8leukRARERGgOzcX1ANwcHDQ6FAVZ8SIETh//jwOHz78fPGVEof8EZF54pA/IiKiiqWEQ/70MXLkSGzbtg379u1D9erV1eUeHh7IyclBamqqRvuUlBR4eHg875loYIeKiMyTUql7IyIiovJVXG7WIz8LITBy5Ehs2rQJe/fuha+vr0Z98+bNYW1tjT179qjL4uPjcePGDQQEBBjslAAO+SMic8WFfYmIiCoWAy7sO2LECMTExOCXX36Bvb29+rkohUIBGxsbKBQKDB48GOPHj4ezszMcHBwwatQoBAQEGHSGP4B3qIjIXKmE7k1PBw8exOuvvw4vLy9IJBJs3rxZo14IgalTp8LT0xM2NjYICgrC5cuXDXQyREREZqC43KxHfo6KikJaWho6dOgAT09P9bZ27Vp1mwULFqB79+4ICwtDu3bt4OHhgY0bNxr8tNihIiKzJFRKCKWWTaX/kL/MzEw0adIEixcvLrJ+3rx5WLRoEZYuXYoTJ07A1tYWwcHByMrKet5TISIiMgs6c7Oe+VkIUeQWGRmpbiOXy7F48WI8ePAAmZmZ2Lhxo8GfnwI45I+IzJUQ0DqdXymG/HXt2hVdu3bVcjiBhQsX4v/+7/8QEhICAFi1ahXc3d2xefNm9O3bV+/3IyIiMju6crO63vTwDhURmSeVSveG/JXYn96ys7NL9VaJiYlITk7WWDxQoVCgZcuWBl88kIiIyGQVl5tNdJ1IdqiIyCzpHFLw7yxCpVmJvSgFD8K6u7trlJfF4oFERESmqrjcLPSY5a8i4ZA/IjJPJRjyp+9K7ERERPQcOOSPiMiElGAWoYKV2Au20naoCh5wTUlJ0Sgvi8UDiYiITJYBZ/mrSNihIiKzJJQqHUMKDDtG29fXFx4eHhqLB6anp+PEiRMGXzyQiIjIVOnOzYbPz+WFQ/6IyDwJFQAtX8xC/y/sjIwMXLlyRf06MTERZ86cgbOzM2rUqIGxY8fi008/RZ06deDr64spU6bAy8sLoaGhpYufiIjI3OjKzep608MOlZGIf8eI5iFX51BSKjsZj0zzl9ZcZGbkf/6ijMZL56pyILT8cuUhV+/jnTx5Eh07dlS/Hj9+PAAgIiICK1euxIQJE5CZmYl33nkHqampaNOmDWJjYyGXy0t3AkRkFOr8LHKMHEnlpeL6fUajys7/7I2Rm4HS5eeKQCLK6hMjnW7dugVvb29jh0FkdDdv3kT16tUNdrysrCz4+voWO7ueh4cHEhMT2eEhIg3Mz0TGy82AaeZndqiMRKVS4c6dO7C3t4dEIjF2OHpLT0+Ht7d3oVnSqPyY+s9ACIFHjx7By8sLFhaGfZwzKysLOTm6ry5LpVKT+rImovLB/EzPw9Q/f2PnZsA08zM7VFQq6enpUCgUSEtLM8kvDHPAnwERET2LucG4+PlXTpzlj4iIiIiIqJTYoSIiIiIiIioldqioVGQyGaZNm1bqhVDp+fFnQEREz2JuMC5+/pUTn6EiIiIiIiIqJd6hIiIiIiIiKiV2qIiIiIiIiEqJHSoiIiIiIqJSYoeKiIiIiIiolNihohKTSCTYvHnzcx0jMjISoaGhBonHVBnic7x27RokEgnOnDljkJi0mT59Opo2bVqm70FERKXH3Gw4zM9UWuxQESIjIyGRSCCRSGBtbQ13d3d07twZK1asgEqlUrdLSkpC165djRipabh37x6GDRuGGjVqQCaTwcPDA8HBwThy5AgAw3yO3t7eSEpKQqNGjQwRMhERVTDMzYbH/ExlxcrYAVDF0KVLF0RHR0OpVCIlJQWxsbEYM2YMNmzYgC1btsDKygoeHh7GDtMkhIWFIScnB99//z1q1aqFlJQU7NmzB/fv3weAYj/H3NxcWFtb62xjaWnJnwcRkZljbjYs5mcqK7xDRQCgvlJTrVo1NGvWDJMnT8Yvv/yCnTt3YuXKlQAK3wq/efMmevfuDUdHRzg7OyMkJATXrl1T1yuVSowfPx6Ojo5wcXHBhAkTYO7LnqWmpuLQoUOYO3cuOnbsCB8fH7z88suYNGkSevToAUDzcywYGrB27Vq0b98ecrkcUVFRsLGxwc6dOzWOvWnTJtjb2+Px48caQwpUKhWqV6+OqKgojfanT5+GhYUFrl+/ro5tyJAhcHV1hYODAwIDA3H27FmNfebMmQN3d3fY29tj8ODByMrKKqNPioiIisPcbDjMz1SW2KEirQIDA9GkSRNs3LixUF1ubi6Cg4Nhb2+PQ4cO4ciRI7Czs0OXLl2Qk5MDAJg/fz5WrlyJFStW4PDhw3jw4AE2bdpU3qdRruzs7GBnZ4fNmzcjOzu7xPtNnDgRY8aMwcWLF9GrVy90794dMTExGm1Wr16N0NBQVKlSRaPcwsIC/fr1K7J969at4ePjAwDo1asX7t69i507dyIuLg7NmjVDp06d8ODBAwDAunXrMH36dMyaNQsnT56Ep6cnlixZUpqPgYiIyghzc+kwP1OZElTpRUREiJCQkCLr+vTpI/z9/YUQQgAQmzZtEkII8cMPP4h69eoJlUqlbpudnS1sbGzErl27hBBCeHp6innz5qnrc3NzRfXq1bW+l7nYsGGDcHJyEnK5XLRq1UpMmjRJnD17Vl3/9OeYmJgoAIiFCxdqHGPTpk3Czs5OZGZmCiGESEtLE3K5XOzcuVNjv9OnTwshhDh9+rSQSCTi+vXrQgghlEqlqFatmoiKihJCCHHo0CHh4OAgsrKyNN6ndu3aYtmyZUIIIQICAsTw4cM16lu2bCmaNGny/B8KERHphbnZ8JifqazwDhXpJISARCIpVH727FlcuXIF9vb26qs+zs7OyMrKQkJCAtLS0pCUlISWLVuq97GyskKLFi3KM3yjCAsLw507d7BlyxZ06dIF+/fvR7NmzdTDM4ry7Ofy2muvwdraGlu2bAEA/Pzzz3BwcEBQUFCR+zdt2hT+/v7qq2AHDhzA3bt30atXLwD5P6+MjAy4uLiof152dnZITExEQkICAODixYsaPy8ACAgIKNVnQEREZYe5uXSYn6mscFIK0unixYvw9fUtVJ6RkYHmzZtj9erVhepcXV3LI7QKTS6Xo3PnzujcuTOmTJmCIUOGYNq0aYiMjCyyva2trcZrqVSKN998EzExMejbty9iYmLQp08fWFlp/5UNDw9HTEwMJk6ciJiYGHTp0gUuLi4A8n9enp6e2L9/f6H9HB0dS3uaRERkBMzNpcf8TGWBd6hIq7179+LcuXMICwsrVNesWTNcvnwZbm5u8PPz09gUCgUUCgU8PT1x4sQJ9T55eXmIi4srz1OoMBo0aIDMzEy99gkPD0dsbCwuXLiAvXv3Ijw8XGf7/v374/z584iLi8OGDRs02jdr1gzJycmwsrIq9POqWrUqAMDf31/j5wUAx48f1ytmIiIqW8zNhsX8TIbADhUBALKzs5GcnIzbt2/j1KlTmDVrFkJCQtC9e3cMHDiwUPvw8HBUrVoVISEhOHToEBITE7F//36MHj0at27dAgCMGTMGc+bMwebNm/H3339j+PDhSE1NLeczK1/3799HYGAgfvzxR/z5559ITEzE+vXrMW/ePISEhOh1rHbt2sHDwwPh4eHw9fUtdLv/WTVr1kSrVq0wePBgKJVK9axFABAUFISAgACEhobi119/xbVr13D06FF8/PHHOHnyJID8n9eKFSsQHR2NS5cuYdq0abhw4YL+HwIRERkEc7PhMD9TWeKQPwIAxMbGwtPTE1ZWVnByckKTJk2waNEiREREwMKicL+7SpUqOHjwID766CP07NkTjx49QrVq1dCpUyc4ODgAAN5//30kJSWpj/H222/jjTfeQFpaWnmfXrmxs7NDy5YtsWDBAiQkJCA3Nxfe3t4YOnQoJk+erNexJBIJ+vXrh3nz5mHq1Kkl2ic8PBzDhw/HwIEDYWNjo3GsHTt24OOPP8agQYNw7949eHh4oF27dnB3dwcA9OnTBwkJCZgwYQKysrIQFhaGYcOGYdeuXXrFTUREhsHcbDjMz1SWJEJUgsUHiIiIiIiIygCH/BEREREREZUSO1RERERERESlxA4VERERERFRKbFDRUREREREVErsUBEREREREZUSO1RERERERESlxA4VERERERFRKbFDRRVaZGQkQkND1a87dOiAsWPHlnsc+/fvh0Qi0bmavEQiwebNm0t8zOnTp6Np06bPFde1a9cgkUhw5syZ5zoOERFRSTE368bcXPmwQ0V6i4yMhEQigUQigVQqhZ+fH2bOnIm8vLwyf++NGzfik08+KVHbknzREhERmQPmZiLjsTJ2AGSaunTpgujoaGRnZ2PHjh0YMWIErK2tMWnSpEJtc3JyIJVKDfK+zs7OBjkOERGRuWFuJjIO3qGiUpHJZPDw8ICPjw+GDRuGoKAgbNmyBcB/QwE+++wzeHl5oV69egCAmzdvonfv3nB0dISzszNCQkJw7do12TRHKgAAXKpJREFU9TGVSiXGjx8PR0dHuLi4YMKECRBCaLzvs8MKsrOz8dFHH8Hb2xsymQx+fn5Yvnw5rl27ho4dOwIAnJycIJFIEBkZCQBQqVSYPXs2fH19YWNjgyZNmmDDhg0a77Njxw7UrVsXNjY26Nixo0acJfXRRx+hbt26qFKlCmrVqoUpU6YgNze3ULtly5bB29sbVapUQe/evZGWlqZR/91338Hf3x9yuRz169fHkiVL9I6FiIjMH3Nz8ZibqSywQ0UGYWNjg5ycHPXrPXv2ID4+Hrt378a2bduQm5uL4OBg2Nvb49ChQzhy5Ajs7OzQpUsX9X7z58/HypUrsWLFChw+fBgPHjzApk2bdL7vwIED8dNPP2HRokW4ePEili1bBjs7O3h7e+Pnn38GAMTHxyMpKQlffvklAGD27NlYtWoVli5digsXLmDcuHEYMGAADhw4ACA/ufTs2ROvv/46zpw5gyFDhmDixIl6fyb29vZYuXIl/vrrL3z55Zf49ttvsWDBAo02V65cwbp167B161bExsbi9OnTGD58uLp+9erVmDp1Kj777DNcvHgRs2bNwpQpU/D999/rHQ8REVUuzM2FMTdTmRBEeoqIiBAhISFCCCFUKpXYvXu3kMlk4oMPPlDXu7u7i+zsbPU+P/zwg6hXr55QqVTqsuzsbGFjYyN27dolhBDC09NTzJs3T12fm5srqlevrn4vIYRo3769GDNmjBBCiPj4eAFA7N69u8g49+3bJwCIhw8fqsuysrJElSpVxNGjRzXaDh48WPTr108IIcSkSZNEgwYNNOo/+uijQsd6FgCxadMmrfWff/65aN68ufr1tGnThKWlpbh165a6bOfOncLCwkIkJSUJIYSoXbu2iImJ0TjOJ598IgICAoQQQiQmJgoA4vTp01rfl4iIzB9zc9GYm6k88BkqKpVt27bBzs4Oubm5UKlU6N+/P6ZPn66uf+GFFzTGZp89exZXrlyBvb29xnGysrKQkJCAtLQ0JCUloWXLluo6KysrtGjRotDQggJnzpyBpaUl2rdvX+K4r1y5gsePH6Nz584a5Tk5OXjxxRcBABcvXtSIAwACAgJK/B4F1q5di0WLFiEhIQEZGRnIy8uDg4ODRpsaNWqgWrVqGu+jUqkQHx8Pe3t7JCQkYPDgwRg6dKi6TV5eHhQKhd7xEBGReWNuLh5zM5UFdqioVDp27IioqChIpVJ4eXnBykrzv5Ktra3G64yMDDRv3hyrV68udCxXV9dSxWBjY6P3PhkZGQCA7du3a3xZAvljzw3l2LFjCA8Px4wZMxAcHAyFQoE1a9Zg/vz5esf67bffFkoilpaWBouViIjMA3OzbszNVFbYoaJSsbW1hZ+fX4nbN2vWDGvXroWbm1uhK0EFPD09ceLECbRr1w5A/tWeuLg4NGvWrMj2L7zwAlQqFQ4cOICgoKBC9QVX4ZRKpbqsQYMGkMlkuHHjhtarZ/7+/uqHeAscP368+JN8ytGjR+Hj44OPP/5YXXb9+vVC7W7cuIE7d+7Ay8tL/T4WFhaoV68e3N3d4eXlhatXryI8PFyv9yciosqHuVk35mYqK5yUgspFeHg4qlatipCQEBw6dAiJiYnYv38/Ro8ejVu3bgEAxowZgzlz5mDz5s34+++/MXz4cJ3rVNSsWRMRERF4++23sXnzZvUx161bBwDw8fGBRCLBtm3bcO/ePWRkZMDe3h4ffPABxo0bh++//x4JCQk4deoUvvrqK/XDpO+99x4uX76MDz/8EPHx8YiJicHKlSv1Ot86dergxo0bWLNmDRISErBo0aIiH+KVy+WIiIjA2bNncejQIYwePRq9e/eGh4cHAGDGjBmYPXs2Fi1ahEuXLuHcuXOIjo7GF198oVc8REREz2JuZm4mAzH2Q1xkep5+8FWf+qSkJDFw4EBRtWpVIZPJRK1atcTQoUNFWlqaECL/QdcxY8YIBwcH4ejoKMaPHy8GDhyo9cFXIYR48uSJGDdunPD09BRSqVT4+fmJFStWqOtnzpwpPDw8hEQiEREREUKI/Id1Fy5cKOrVqyesra2Fq6urCA4OFgcOHFDvt3XrVuHn5ydkMplo27atWLFihd4Pvn744YfCxcVF2NnZiT59+ogFCxYIhUKhrp82bZpo0qSJWLJkifDy8hJyuVy8+eab4sGDBxrHXb16tWjatKmQSqXCyclJtGvXTmzcuFEIwQdfiYgoH3Nz0ZibqTxIhNDyVCERERERERHpxCF/REREREREpcQOFRERERERUSmxQ0VERERERFRK7FARERERERGVEjtUREREREREpcQOFRERERERUSmxQ0VERERERFRK7FARERERERGVEjtUREREREREpcQOFRERERERUSmxQ0VERERERFRK7FARERERERGVEjtUREREREREpcQOFRERERERUSmxQ0UV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81meZSARUTUqFg80tJlCo9EgJiYG/v7+cHV1xT333INFixZB/OuDXwiBefPmwcfHB66urggJCcH58+fNfVlERESyVV02m5rP1kKevSYiqoYGgAaSgc00y5cvx7p16/Duu+8iLS0Ny5cvx4oVK/DOO+/ojlmxYgVWr16N9evXIzk5GY0bN0ZoaCiKi4vNel1ERERyZTybTc9na8Ehf0Rkk9RaB9hrq/6IU2tNG1Jw9OhRhIWF4fHHHwcAtGnTBp988gl++OEHAOV3p1atWoW5c+ciLCwMALB582Z4e3sjISEBI0aMuIsrISIisg3Gsrm8nUP+iIishvh7rYuqNvH3OhcFBQV6W0lJSZXn6t27NxITE3Hu3DkAQGpqKg4fPoxHH30UAJCeno7s7GyEhIToXuPu7o6goCAcO3asjq+UiIhIHoxl87/zWW54h4qIbJKx1dgr9vv5+entnz9/PhYsWFDp+NmzZ6OgoACdOnWCvb09NBoNlixZgsjISABAdnY2AMDb21vvdd7e3ro2IiKihs5YNle0yxELKiKySWphDzuDs/xpAQAZGRlQKpW6/c7OzlUev23bNmzZsgXx8fHo0qULTp8+jWnTpsHX1xdRUVHm7zwREZENMpbN5e3aeuyN+bCgIiKbVJOFfZVKpV5BZcgrr7yC2bNn656F6tatGy5fvozY2FhERUVBpVIBAHJycuDj46N7XU5ODnr06HGXV0JERGQbbHVhX3neVyMiqoYWdkY3U9y+fRt2dvqvsbe3h1Zb/k2av78/VCoVEhMTde0FBQVITk5GcHDw3V8MERGRDagum7mwLxGRFVFr7WCnrfqDWW1gvyFPPPEElixZglatWqFLly44deoU3n77bYwZMwYAIEkSpk2bhsWLF6N9+/bw9/dHTEwMfH19ER4efreXQkREZBOMZXNFuxyxoCKjbhfaYdMKHxzd4468mw64p8tfmLjoKjr2+Et3zJXzzvhosS9+Ou4GTRnQukMJYj5IR/OWagv23DZ0DSrEsEk30L7bbXipyrBgTBsc2+te5bFTl13F46NuYv08X+z4sFk999T6CCMLBAoTH3p95513EBMTg0mTJuH69evw9fXF//3f/2HevHm6Y2bOnImioiJMmDABeXl5ePDBB7F37164uLjc1XUQEZ053hifrW2O82caITfHEfM/SkfvR/N17UIAm99Q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",
|
||
"text/plain": [
|
||
"<Figure size 1200x1000 with 16 Axes>"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"from sklearn.metrics import ConfusionMatrixDisplay\n",
|
||
"import matplotlib.pyplot as plt\n",
|
||
"\n",
|
||
"_, ax = plt.subplots(int(len(class_models) / 2), 2, figsize=(12, 10), sharex=False, sharey=False)\n",
|
||
"for index, key in enumerate(class_models.keys()):\n",
|
||
" c_matrix = class_models[key][\"Confusion_matrix\"]\n",
|
||
" disp = ConfusionMatrixDisplay(\n",
|
||
" confusion_matrix=c_matrix, display_labels=[\"Died\", \"Sirvived\"]\n",
|
||
" ).plot(ax=ax.flat[index])\n",
|
||
" disp.ax_.set_title(key)\n",
|
||
"\n",
|
||
"plt.subplots_adjust(top=1, bottom=0, hspace=0.4, wspace=0.1)\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"Точность, полнота, верность (аккуратность), F-мера"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 8,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<style type=\"text/css\">\n",
|
||
"#T_4d92f_row0_col0, #T_4d92f_row7_col1 {\n",
|
||
" background-color: #a2da37;\n",
|
||
" color: #000000;\n",
|
||
"}\n",
|
||
"#T_4d92f_row0_col1, #T_4d92f_row3_col2, #T_4d92f_row5_col3 {\n",
|
||
" background-color: #77d153;\n",
|
||
" color: #000000;\n",
|
||
"}\n",
|
||
"#T_4d92f_row0_col2 {\n",
|
||
" background-color: #a5db36;\n",
|
||
" color: #000000;\n",
|
||
"}\n",
|
||
"#T_4d92f_row0_col3 {\n",
|
||
" background-color: #7cd250;\n",
|
||
" color: #000000;\n",
|
||
"}\n",
|
||
"#T_4d92f_row0_col4, #T_4d92f_row0_col5, #T_4d92f_row0_col6, #T_4d92f_row0_col7 {\n",
|
||
" background-color: #da5a6a;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_4d92f_row1_col0 {\n",
|
||
" background-color: #a0da39;\n",
|
||
" color: #000000;\n",
|
||
"}\n",
|
||
"#T_4d92f_row1_col1 {\n",
|
||
" background-color: #7fd34e;\n",
|
||
" color: #000000;\n",
|
||
"}\n",
|
||
"#T_4d92f_row1_col2 {\n",
|
||
" background-color: #93d741;\n",
|
||
" color: #000000;\n",
|
||
"}\n",
|
||
"#T_4d92f_row1_col3 {\n",
|
||
" background-color: #70cf57;\n",
|
||
" color: #000000;\n",
|
||
"}\n",
|
||
"#T_4d92f_row1_col4 {\n",
|
||
" background-color: #d45270;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_4d92f_row1_col5, #T_4d92f_row1_col6 {\n",
|
||
" background-color: #d6556d;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_4d92f_row1_col7 {\n",
|
||
" background-color: #d7566c;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_4d92f_row2_col0 {\n",
|
||
" background-color: #3bbb75;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_4d92f_row2_col1 {\n",
|
||
" background-color: #84d44b;\n",
|
||
" color: #000000;\n",
|
||
"}\n",
|
||
"#T_4d92f_row2_col2, #T_4d92f_row4_col0 {\n",
|
||
" background-color: #6ece58;\n",
|
||
" color: #000000;\n",
|
||
"}\n",
|
||
"#T_4d92f_row2_col3 {\n",
|
||
" background-color: #65cb5e;\n",
|
||
" color: #000000;\n",
|
||
"}\n",
|
||
"#T_4d92f_row2_col4, #T_4d92f_row5_col4 {\n",
|
||
" background-color: #a62098;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_4d92f_row2_col5, #T_4d92f_row3_col5, #T_4d92f_row4_col5, #T_4d92f_row4_col7 {\n",
|
||
" background-color: #d35171;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_4d92f_row2_col6 {\n",
|
||
" background-color: #c03a83;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_4d92f_row2_col7 {\n",
|
||
" background-color: #d5536f;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_4d92f_row3_col0 {\n",
|
||
" background-color: #81d34d;\n",
|
||
" color: #000000;\n",
|
||
"}\n",
|
||
"#T_4d92f_row3_col1, #T_4d92f_row6_col2, #T_4d92f_row6_col3, #T_4d92f_row7_col0 {\n",
|
||
" background-color: #a8db34;\n",
|
||
" color: #000000;\n",
|
||
"}\n",
|
||
"#T_4d92f_row3_col3 {\n",
|
||
" background-color: #56c667;\n",
|
||
" color: #000000;\n",
|
||
"}\n",
|
||
"#T_4d92f_row3_col4 {\n",
|
||
" background-color: #c33d80;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_4d92f_row3_col6, #T_4d92f_row5_col7 {\n",
|
||
" background-color: #cc4977;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_4d92f_row3_col7 {\n",
|
||
" background-color: #d24f71;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_4d92f_row4_col1 {\n",
|
||
" background-color: #9bd93c;\n",
|
||
" color: #000000;\n",
|
||
"}\n",
|
||
"#T_4d92f_row4_col2 {\n",
|
||
" background-color: #6ccd5a;\n",
|
||
" color: #000000;\n",
|
||
"}\n",
|
||
"#T_4d92f_row4_col3 {\n",
|
||
" background-color: #5cc863;\n",
|
||
" color: #000000;\n",
|
||
"}\n",
|
||
"#T_4d92f_row4_col4 {\n",
|
||
" background-color: #b83289;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_4d92f_row4_col6 {\n",
|
||
" background-color: #c7427c;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_4d92f_row5_col0 {\n",
|
||
" background-color: #2db27d;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_4d92f_row5_col1 {\n",
|
||
" background-color: #26ad81;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_4d92f_row5_col2 {\n",
|
||
" background-color: #89d548;\n",
|
||
" color: #000000;\n",
|
||
"}\n",
|
||
"#T_4d92f_row5_col5 {\n",
|
||
" background-color: #ae2892;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_4d92f_row5_col6 {\n",
|
||
" background-color: #c43e7f;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_4d92f_row6_col0, #T_4d92f_row6_col1, #T_4d92f_row7_col2, #T_4d92f_row7_col3 {\n",
|
||
" background-color: #26818e;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_4d92f_row6_col4, #T_4d92f_row7_col5, #T_4d92f_row7_col6, #T_4d92f_row7_col7 {\n",
|
||
" background-color: #4e02a2;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_4d92f_row6_col5 {\n",
|
||
" background-color: #6700a8;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_4d92f_row6_col6 {\n",
|
||
" background-color: #b32c8e;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_4d92f_row6_col7 {\n",
|
||
" background-color: #c5407e;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_4d92f_row7_col4 {\n",
|
||
" background-color: #5002a2;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"</style>\n",
|
||
"<table id=\"T_4d92f\">\n",
|
||
" <thead>\n",
|
||
" <tr>\n",
|
||
" <th class=\"blank level0\" > </th>\n",
|
||
" <th id=\"T_4d92f_level0_col0\" class=\"col_heading level0 col0\" >Precision_train</th>\n",
|
||
" <th id=\"T_4d92f_level0_col1\" class=\"col_heading level0 col1\" >Precision_test</th>\n",
|
||
" <th id=\"T_4d92f_level0_col2\" class=\"col_heading level0 col2\" >Recall_train</th>\n",
|
||
" <th id=\"T_4d92f_level0_col3\" class=\"col_heading level0 col3\" >Recall_test</th>\n",
|
||
" <th id=\"T_4d92f_level0_col4\" class=\"col_heading level0 col4\" >Accuracy_train</th>\n",
|
||
" <th id=\"T_4d92f_level0_col5\" class=\"col_heading level0 col5\" >Accuracy_test</th>\n",
|
||
" <th id=\"T_4d92f_level0_col6\" class=\"col_heading level0 col6\" >F1_train</th>\n",
|
||
" <th id=\"T_4d92f_level0_col7\" class=\"col_heading level0 col7\" >F1_test</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_4d92f_level0_row0\" class=\"row_heading level0 row0\" >random_forest</th>\n",
|
||
" <td id=\"T_4d92f_row0_col0\" class=\"data row0 col0\" >0.894340</td>\n",
|
||
" <td id=\"T_4d92f_row0_col1\" class=\"data row0 col1\" >0.794118</td>\n",
|
||
" <td id=\"T_4d92f_row0_col2\" class=\"data row0 col2\" >0.868132</td>\n",
|
||
" <td id=\"T_4d92f_row0_col3\" class=\"data row0 col3\" >0.782609</td>\n",
|
||
" <td id=\"T_4d92f_row0_col4\" class=\"data row0 col4\" >0.910112</td>\n",
|
||
" <td id=\"T_4d92f_row0_col5\" class=\"data row0 col5\" >0.837989</td>\n",
|
||
" <td id=\"T_4d92f_row0_col6\" class=\"data row0 col6\" >0.881041</td>\n",
|
||
" <td id=\"T_4d92f_row0_col7\" class=\"data row0 col7\" >0.788321</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_4d92f_level0_row1\" class=\"row_heading level0 row1\" >gradient_boosting</th>\n",
|
||
" <td id=\"T_4d92f_row1_col0\" class=\"data row1 col0\" >0.889764</td>\n",
|
||
" <td id=\"T_4d92f_row1_col1\" class=\"data row1 col1\" >0.800000</td>\n",
|
||
" <td id=\"T_4d92f_row1_col2\" class=\"data row1 col2\" >0.827839</td>\n",
|
||
" <td id=\"T_4d92f_row1_col3\" class=\"data row1 col3\" >0.753623</td>\n",
|
||
" <td id=\"T_4d92f_row1_col4\" class=\"data row1 col4\" >0.894663</td>\n",
|
||
" <td id=\"T_4d92f_row1_col5\" class=\"data row1 col5\" >0.832402</td>\n",
|
||
" <td id=\"T_4d92f_row1_col6\" class=\"data row1 col6\" >0.857685</td>\n",
|
||
" <td id=\"T_4d92f_row1_col7\" class=\"data row1 col7\" >0.776119</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_4d92f_level0_row2\" class=\"row_heading level0 row2\" >logistic</th>\n",
|
||
" <td id=\"T_4d92f_row2_col0\" class=\"data row2 col0\" >0.751880</td>\n",
|
||
" <td id=\"T_4d92f_row2_col1\" class=\"data row2 col1\" >0.806452</td>\n",
|
||
" <td id=\"T_4d92f_row2_col2\" class=\"data row2 col2\" >0.732601</td>\n",
|
||
" <td id=\"T_4d92f_row2_col3\" class=\"data row2 col3\" >0.724638</td>\n",
|
||
" <td id=\"T_4d92f_row2_col4\" class=\"data row2 col4\" >0.804775</td>\n",
|
||
" <td id=\"T_4d92f_row2_col5\" class=\"data row2 col5\" >0.826816</td>\n",
|
||
" <td id=\"T_4d92f_row2_col6\" class=\"data row2 col6\" >0.742115</td>\n",
|
||
" <td id=\"T_4d92f_row2_col7\" class=\"data row2 col7\" >0.763359</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_4d92f_level0_row3\" class=\"row_heading level0 row3\" >decision_tree</th>\n",
|
||
" <td id=\"T_4d92f_row3_col0\" class=\"data row3 col0\" >0.852459</td>\n",
|
||
" <td id=\"T_4d92f_row3_col1\" class=\"data row3 col1\" >0.839286</td>\n",
|
||
" <td id=\"T_4d92f_row3_col2\" class=\"data row3 col2\" >0.761905</td>\n",
|
||
" <td id=\"T_4d92f_row3_col3\" class=\"data row3 col3\" >0.681159</td>\n",
|
||
" <td id=\"T_4d92f_row3_col4\" class=\"data row3 col4\" >0.858146</td>\n",
|
||
" <td id=\"T_4d92f_row3_col5\" class=\"data row3 col5\" >0.826816</td>\n",
|
||
" <td id=\"T_4d92f_row3_col6\" class=\"data row3 col6\" >0.804642</td>\n",
|
||
" <td id=\"T_4d92f_row3_col7\" class=\"data row3 col7\" >0.752000</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_4d92f_level0_row4\" class=\"row_heading level0 row4\" >knn</th>\n",
|
||
" <td id=\"T_4d92f_row4_col0\" class=\"data row4 col0\" >0.829167</td>\n",
|
||
" <td id=\"T_4d92f_row4_col1\" class=\"data row4 col1\" >0.827586</td>\n",
|
||
" <td id=\"T_4d92f_row4_col2\" class=\"data row4 col2\" >0.728938</td>\n",
|
||
" <td id=\"T_4d92f_row4_col3\" class=\"data row4 col3\" >0.695652</td>\n",
|
||
" <td id=\"T_4d92f_row4_col4\" class=\"data row4 col4\" >0.838483</td>\n",
|
||
" <td id=\"T_4d92f_row4_col5\" class=\"data row4 col5\" >0.826816</td>\n",
|
||
" <td id=\"T_4d92f_row4_col6\" class=\"data row4 col6\" >0.775828</td>\n",
|
||
" <td id=\"T_4d92f_row4_col7\" class=\"data row4 col7\" >0.755906</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_4d92f_level0_row5\" class=\"row_heading level0 row5\" >ridge</th>\n",
|
||
" <td id=\"T_4d92f_row5_col0\" class=\"data row5 col0\" >0.720395</td>\n",
|
||
" <td id=\"T_4d92f_row5_col1\" class=\"data row5 col1\" >0.688312</td>\n",
|
||
" <td id=\"T_4d92f_row5_col2\" class=\"data row5 col2\" >0.802198</td>\n",
|
||
" <td id=\"T_4d92f_row5_col3\" class=\"data row5 col3\" >0.768116</td>\n",
|
||
" <td id=\"T_4d92f_row5_col4\" class=\"data row5 col4\" >0.804775</td>\n",
|
||
" <td id=\"T_4d92f_row5_col5\" class=\"data row5 col5\" >0.776536</td>\n",
|
||
" <td id=\"T_4d92f_row5_col6\" class=\"data row5 col6\" >0.759099</td>\n",
|
||
" <td id=\"T_4d92f_row5_col7\" class=\"data row5 col7\" >0.726027</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_4d92f_level0_row6\" class=\"row_heading level0 row6\" >naive_bayes</th>\n",
|
||
" <td id=\"T_4d92f_row6_col0\" class=\"data row6 col0\" >0.554524</td>\n",
|
||
" <td id=\"T_4d92f_row6_col1\" class=\"data row6 col1\" >0.575472</td>\n",
|
||
" <td id=\"T_4d92f_row6_col2\" class=\"data row6 col2\" >0.875458</td>\n",
|
||
" <td id=\"T_4d92f_row6_col3\" class=\"data row6 col3\" >0.884058</td>\n",
|
||
" <td id=\"T_4d92f_row6_col4\" class=\"data row6 col4\" >0.682584</td>\n",
|
||
" <td id=\"T_4d92f_row6_col5\" class=\"data row6 col5\" >0.703911</td>\n",
|
||
" <td id=\"T_4d92f_row6_col6\" class=\"data row6 col6\" >0.678977</td>\n",
|
||
" <td id=\"T_4d92f_row6_col7\" class=\"data row6 col7\" >0.697143</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_4d92f_level0_row7\" class=\"row_heading level0 row7\" >mlp</th>\n",
|
||
" <td id=\"T_4d92f_row7_col0\" class=\"data row7 col0\" >0.900000</td>\n",
|
||
" <td id=\"T_4d92f_row7_col1\" class=\"data row7 col1\" >0.833333</td>\n",
|
||
" <td id=\"T_4d92f_row7_col2\" class=\"data row7 col2\" >0.197802</td>\n",
|
||
" <td id=\"T_4d92f_row7_col3\" class=\"data row7 col3\" >0.217391</td>\n",
|
||
" <td id=\"T_4d92f_row7_col4\" class=\"data row7 col4\" >0.683989</td>\n",
|
||
" <td id=\"T_4d92f_row7_col5\" class=\"data row7 col5\" >0.681564</td>\n",
|
||
" <td id=\"T_4d92f_row7_col6\" class=\"data row7 col6\" >0.324324</td>\n",
|
||
" <td id=\"T_4d92f_row7_col7\" class=\"data row7 col7\" >0.344828</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n"
|
||
],
|
||
"text/plain": [
|
||
"<pandas.io.formats.style.Styler at 0x2827fc5e2d0>"
|
||
]
|
||
},
|
||
"execution_count": 8,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"class_metrics = pd.DataFrame.from_dict(class_models, \"index\")[\n",
|
||
" [\n",
|
||
" \"Precision_train\",\n",
|
||
" \"Precision_test\",\n",
|
||
" \"Recall_train\",\n",
|
||
" \"Recall_test\",\n",
|
||
" \"Accuracy_train\",\n",
|
||
" \"Accuracy_test\",\n",
|
||
" \"F1_train\",\n",
|
||
" \"F1_test\",\n",
|
||
" ]\n",
|
||
"]\n",
|
||
"class_metrics.sort_values(\n",
|
||
" by=\"Accuracy_test\", ascending=False\n",
|
||
").style.background_gradient(\n",
|
||
" cmap=\"plasma\",\n",
|
||
" low=0.3,\n",
|
||
" high=1,\n",
|
||
" subset=[\"Accuracy_train\", \"Accuracy_test\", \"F1_train\", \"F1_test\"],\n",
|
||
").background_gradient(\n",
|
||
" cmap=\"viridis\",\n",
|
||
" low=1,\n",
|
||
" high=0.3,\n",
|
||
" subset=[\n",
|
||
" \"Precision_train\",\n",
|
||
" \"Precision_test\",\n",
|
||
" \"Recall_train\",\n",
|
||
" \"Recall_test\",\n",
|
||
" ],\n",
|
||
")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"ROC-кривая, каппа Коэна, коэффициент корреляции Мэтьюса"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 9,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<style type=\"text/css\">\n",
|
||
"#T_71e02_row0_col0, #T_71e02_row0_col1 {\n",
|
||
" background-color: #a8db34;\n",
|
||
" color: #000000;\n",
|
||
"}\n",
|
||
"#T_71e02_row0_col2, #T_71e02_row0_col3, #T_71e02_row0_col4 {\n",
|
||
" background-color: #da5a6a;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_71e02_row1_col0, #T_71e02_row4_col0, #T_71e02_row4_col1, #T_71e02_row5_col0 {\n",
|
||
" background-color: #93d741;\n",
|
||
" color: #000000;\n",
|
||
"}\n",
|
||
"#T_71e02_row1_col1 {\n",
|
||
" background-color: #98d83e;\n",
|
||
" color: #000000;\n",
|
||
"}\n",
|
||
"#T_71e02_row1_col2 {\n",
|
||
" background-color: #d7566c;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_71e02_row1_col3 {\n",
|
||
" background-color: #d45270;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_71e02_row1_col4, #T_71e02_row4_col4, #T_71e02_row5_col3, #T_71e02_row5_col4 {\n",
|
||
" background-color: #d24f71;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_71e02_row2_col0 {\n",
|
||
" background-color: #42be71;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_71e02_row2_col1 {\n",
|
||
" background-color: #7fd34e;\n",
|
||
" color: #000000;\n",
|
||
"}\n",
|
||
"#T_71e02_row2_col2, #T_71e02_row3_col2 {\n",
|
||
" background-color: #d5536f;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_71e02_row2_col3 {\n",
|
||
" background-color: #be3885;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_71e02_row2_col4 {\n",
|
||
" background-color: #b6308b;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_71e02_row3_col0 {\n",
|
||
" background-color: #9dd93b;\n",
|
||
" color: #000000;\n",
|
||
"}\n",
|
||
"#T_71e02_row3_col1 {\n",
|
||
" background-color: #a0da39;\n",
|
||
" color: #000000;\n",
|
||
"}\n",
|
||
"#T_71e02_row3_col3, #T_71e02_row3_col4 {\n",
|
||
" background-color: #d6556d;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_71e02_row4_col2 {\n",
|
||
" background-color: #cc4977;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_71e02_row4_col3 {\n",
|
||
" background-color: #d35171;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_71e02_row5_col1 {\n",
|
||
" background-color: #90d743;\n",
|
||
" color: #000000;\n",
|
||
"}\n",
|
||
"#T_71e02_row5_col2 {\n",
|
||
" background-color: #a82296;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_71e02_row6_col0 {\n",
|
||
" background-color: #21908d;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_71e02_row6_col1 {\n",
|
||
" background-color: #6ece58;\n",
|
||
" color: #000000;\n",
|
||
"}\n",
|
||
"#T_71e02_row6_col2 {\n",
|
||
" background-color: #a11b9b;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_71e02_row6_col3 {\n",
|
||
" background-color: #9e199d;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_71e02_row6_col4 {\n",
|
||
" background-color: #9c179e;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_71e02_row7_col0, #T_71e02_row7_col1 {\n",
|
||
" background-color: #26818e;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_71e02_row7_col2, #T_71e02_row7_col3, #T_71e02_row7_col4 {\n",
|
||
" background-color: #4e02a2;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"</style>\n",
|
||
"<table id=\"T_71e02\">\n",
|
||
" <thead>\n",
|
||
" <tr>\n",
|
||
" <th class=\"blank level0\" > </th>\n",
|
||
" <th id=\"T_71e02_level0_col0\" class=\"col_heading level0 col0\" >Accuracy_test</th>\n",
|
||
" <th id=\"T_71e02_level0_col1\" class=\"col_heading level0 col1\" >F1_test</th>\n",
|
||
" <th id=\"T_71e02_level0_col2\" class=\"col_heading level0 col2\" >ROC_AUC_test</th>\n",
|
||
" <th id=\"T_71e02_level0_col3\" class=\"col_heading level0 col3\" >Cohen_kappa_test</th>\n",
|
||
" <th id=\"T_71e02_level0_col4\" class=\"col_heading level0 col4\" >MCC_test</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_71e02_level0_row0\" class=\"row_heading level0 row0\" >random_forest</th>\n",
|
||
" <td id=\"T_71e02_row0_col0\" class=\"data row0 col0\" >0.837989</td>\n",
|
||
" <td id=\"T_71e02_row0_col1\" class=\"data row0 col1\" >0.788321</td>\n",
|
||
" <td id=\"T_71e02_row0_col2\" class=\"data row0 col2\" >0.858893</td>\n",
|
||
" <td id=\"T_71e02_row0_col3\" class=\"data row0 col3\" >0.657111</td>\n",
|
||
" <td id=\"T_71e02_row0_col4\" class=\"data row0 col4\" >0.657157</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_71e02_level0_row1\" class=\"row_heading level0 row1\" >logistic</th>\n",
|
||
" <td id=\"T_71e02_row1_col0\" class=\"data row1 col0\" >0.826816</td>\n",
|
||
" <td id=\"T_71e02_row1_col1\" class=\"data row1 col1\" >0.763359</td>\n",
|
||
" <td id=\"T_71e02_row1_col2\" class=\"data row1 col2\" >0.854084</td>\n",
|
||
" <td id=\"T_71e02_row1_col3\" class=\"data row1 col3\" >0.627409</td>\n",
|
||
" <td id=\"T_71e02_row1_col4\" class=\"data row1 col4\" >0.629641</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_71e02_level0_row2\" class=\"row_heading level0 row2\" >ridge</th>\n",
|
||
" <td id=\"T_71e02_row2_col0\" class=\"data row2 col0\" >0.776536</td>\n",
|
||
" <td id=\"T_71e02_row2_col1\" class=\"data row2 col1\" >0.726027</td>\n",
|
||
" <td id=\"T_71e02_row2_col2\" class=\"data row2 col2\" >0.851054</td>\n",
|
||
" <td id=\"T_71e02_row2_col3\" class=\"data row2 col3\" >0.538303</td>\n",
|
||
" <td id=\"T_71e02_row2_col4\" class=\"data row2 col4\" >0.540613</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_71e02_level0_row3\" class=\"row_heading level0 row3\" >gradient_boosting</th>\n",
|
||
" <td id=\"T_71e02_row3_col0\" class=\"data row3 col0\" >0.832402</td>\n",
|
||
" <td id=\"T_71e02_row3_col1\" class=\"data row3 col1\" >0.776119</td>\n",
|
||
" <td id=\"T_71e02_row3_col2\" class=\"data row3 col2\" >0.850922</td>\n",
|
||
" <td id=\"T_71e02_row3_col3\" class=\"data row3 col3\" >0.642381</td>\n",
|
||
" <td id=\"T_71e02_row3_col4\" class=\"data row3 col4\" >0.643113</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_71e02_level0_row4\" class=\"row_heading level0 row4\" >knn</th>\n",
|
||
" <td id=\"T_71e02_row4_col0\" class=\"data row4 col0\" >0.826816</td>\n",
|
||
" <td id=\"T_71e02_row4_col1\" class=\"data row4 col1\" >0.755906</td>\n",
|
||
" <td id=\"T_71e02_row4_col2\" class=\"data row4 col2\" >0.838735</td>\n",
|
||
" <td id=\"T_71e02_row4_col3\" class=\"data row4 col3\" >0.623260</td>\n",
|
||
" <td id=\"T_71e02_row4_col4\" class=\"data row4 col4\" >0.628905</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_71e02_level0_row5\" class=\"row_heading level0 row5\" >decision_tree</th>\n",
|
||
" <td id=\"T_71e02_row5_col0\" class=\"data row5 col0\" >0.826816</td>\n",
|
||
" <td id=\"T_71e02_row5_col1\" class=\"data row5 col1\" >0.752000</td>\n",
|
||
" <td id=\"T_71e02_row5_col2\" class=\"data row5 col2\" >0.794137</td>\n",
|
||
" <td id=\"T_71e02_row5_col3\" class=\"data row5 col3\" >0.621151</td>\n",
|
||
" <td id=\"T_71e02_row5_col4\" class=\"data row5 col4\" >0.629142</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_71e02_level0_row6\" class=\"row_heading level0 row6\" >naive_bayes</th>\n",
|
||
" <td id=\"T_71e02_row6_col0\" class=\"data row6 col0\" >0.703911</td>\n",
|
||
" <td id=\"T_71e02_row6_col1\" class=\"data row6 col1\" >0.697143</td>\n",
|
||
" <td id=\"T_71e02_row6_col2\" class=\"data row6 col2\" >0.785903</td>\n",
|
||
" <td id=\"T_71e02_row6_col3\" class=\"data row6 col3\" >0.431814</td>\n",
|
||
" <td id=\"T_71e02_row6_col4\" class=\"data row6 col4\" >0.470403</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_71e02_level0_row7\" class=\"row_heading level0 row7\" >mlp</th>\n",
|
||
" <td id=\"T_71e02_row7_col0\" class=\"data row7 col0\" >0.681564</td>\n",
|
||
" <td id=\"T_71e02_row7_col1\" class=\"data row7 col1\" >0.344828</td>\n",
|
||
" <td id=\"T_71e02_row7_col2\" class=\"data row7 col2\" >0.712714</td>\n",
|
||
" <td id=\"T_71e02_row7_col3\" class=\"data row7 col3\" >0.220490</td>\n",
|
||
" <td id=\"T_71e02_row7_col4\" class=\"data row7 col4\" >0.307678</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n"
|
||
],
|
||
"text/plain": [
|
||
"<pandas.io.formats.style.Styler at 0x2827fc885f0>"
|
||
]
|
||
},
|
||
"execution_count": 9,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"class_metrics = pd.DataFrame.from_dict(class_models, \"index\")[\n",
|
||
" [\n",
|
||
" \"Accuracy_test\",\n",
|
||
" \"F1_test\",\n",
|
||
" \"ROC_AUC_test\",\n",
|
||
" \"Cohen_kappa_test\",\n",
|
||
" \"MCC_test\",\n",
|
||
" ]\n",
|
||
"]\n",
|
||
"class_metrics.sort_values(by=\"ROC_AUC_test\", ascending=False).style.background_gradient(\n",
|
||
" cmap=\"plasma\",\n",
|
||
" low=0.3,\n",
|
||
" high=1,\n",
|
||
" subset=[\n",
|
||
" \"ROC_AUC_test\",\n",
|
||
" \"MCC_test\",\n",
|
||
" \"Cohen_kappa_test\",\n",
|
||
" ],\n",
|
||
").background_gradient(\n",
|
||
" cmap=\"viridis\",\n",
|
||
" low=1,\n",
|
||
" high=0.3,\n",
|
||
" subset=[\n",
|
||
" \"Accuracy_test\",\n",
|
||
" \"F1_test\",\n",
|
||
" ],\n",
|
||
")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 10,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"'random_forest'"
|
||
]
|
||
},
|
||
"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": 11,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"'Error items count: 29'"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"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>Survived</th>\n",
|
||
" <th>Predicted</th>\n",
|
||
" <th>Pclass</th>\n",
|
||
" <th>Name</th>\n",
|
||
" <th>Sex</th>\n",
|
||
" <th>Age</th>\n",
|
||
" <th>SibSp</th>\n",
|
||
" <th>Parch</th>\n",
|
||
" <th>Ticket</th>\n",
|
||
" <th>Fare</th>\n",
|
||
" <th>Cabin</th>\n",
|
||
" <th>Embarked</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>PassengerId</th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>26</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>Asplund, Mrs. Carl Oscar (Selma Augusta Emilia...</td>\n",
|
||
" <td>female</td>\n",
|
||
" <td>38.0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>5</td>\n",
|
||
" <td>347077</td>\n",
|
||
" <td>31.3875</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>S</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>72</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>Goodwin, Miss. Lillian Amy</td>\n",
|
||
" <td>female</td>\n",
|
||
" <td>16.0</td>\n",
|
||
" <td>5</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>CA 2144</td>\n",
|
||
" <td>46.9000</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>S</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>103</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>White, Mr. Richard Frasar</td>\n",
|
||
" <td>male</td>\n",
|
||
" <td>21.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>35281</td>\n",
|
||
" <td>77.2875</td>\n",
|
||
" <td>D26</td>\n",
|
||
" <td>S</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>108</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>Moss, Mr. Albert Johan</td>\n",
|
||
" <td>male</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>312991</td>\n",
|
||
" <td>7.7750</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>S</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>128</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>Madsen, Mr. Fridtjof Arne</td>\n",
|
||
" <td>male</td>\n",
|
||
" <td>24.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>C 17369</td>\n",
|
||
" <td>7.1417</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>S</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>193</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>Andersen-Jensen, Miss. Carla Christine Nielsine</td>\n",
|
||
" <td>female</td>\n",
|
||
" <td>19.0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>350046</td>\n",
|
||
" <td>7.8542</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>S</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>241</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>Zabour, Miss. Thamine</td>\n",
|
||
" <td>female</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>2665</td>\n",
|
||
" <td>14.4542</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>C</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>272</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>Tornquist, Mr. William Henry</td>\n",
|
||
" <td>male</td>\n",
|
||
" <td>25.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>LINE</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>S</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>293</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>Levy, Mr. Rene Jacques</td>\n",
|
||
" <td>male</td>\n",
|
||
" <td>36.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>SC/Paris 2163</td>\n",
|
||
" <td>12.8750</td>\n",
|
||
" <td>D</td>\n",
|
||
" <td>C</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>352</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>Williams-Lambert, Mr. Fletcher Fellows</td>\n",
|
||
" <td>male</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>113510</td>\n",
|
||
" <td>35.0000</td>\n",
|
||
" <td>C128</td>\n",
|
||
" <td>S</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>358</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>Funk, Miss. Annie Clemmer</td>\n",
|
||
" <td>female</td>\n",
|
||
" <td>38.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>237671</td>\n",
|
||
" <td>13.0000</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>S</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>378</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>Widener, Mr. Harry Elkins</td>\n",
|
||
" <td>male</td>\n",
|
||
" <td>27.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>113503</td>\n",
|
||
" <td>211.5000</td>\n",
|
||
" <td>C82</td>\n",
|
||
" <td>C</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>445</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>Johannesen-Bratthammer, Mr. Bernt</td>\n",
|
||
" <td>male</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>65306</td>\n",
|
||
" <td>8.1125</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>S</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>450</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>Peuchen, Major. Arthur Godfrey</td>\n",
|
||
" <td>male</td>\n",
|
||
" <td>52.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>113786</td>\n",
|
||
" <td>30.5000</td>\n",
|
||
" <td>C104</td>\n",
|
||
" <td>S</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>508</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>Bradley, Mr. George (\"George Arthur Brayton\")</td>\n",
|
||
" <td>male</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>111427</td>\n",
|
||
" <td>26.5500</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>S</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>511</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>Daly, Mr. Eugene Patrick</td>\n",
|
||
" <td>male</td>\n",
|
||
" <td>29.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>382651</td>\n",
|
||
" <td>7.7500</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Q</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>570</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>Jonsson, Mr. Carl</td>\n",
|
||
" <td>male</td>\n",
|
||
" <td>32.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>350417</td>\n",
|
||
" <td>7.8542</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>S</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>579</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>Caram, Mrs. Joseph (Maria Elias)</td>\n",
|
||
" <td>female</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>2689</td>\n",
|
||
" <td>14.4583</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>C</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>584</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>Ross, Mr. John Hugo</td>\n",
|
||
" <td>male</td>\n",
|
||
" <td>36.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>13049</td>\n",
|
||
" <td>40.1250</td>\n",
|
||
" <td>A10</td>\n",
|
||
" <td>C</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>588</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>Frolicher-Stehli, Mr. Maxmillian</td>\n",
|
||
" <td>male</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>13567</td>\n",
|
||
" <td>79.2000</td>\n",
|
||
" <td>B41</td>\n",
|
||
" <td>C</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>618</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>Lobb, Mrs. William Arthur (Cordelia K Stanlick)</td>\n",
|
||
" <td>female</td>\n",
|
||
" <td>26.0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>A/5. 3336</td>\n",
|
||
" <td>16.1000</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>S</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>658</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>Bourke, Mrs. John (Catherine)</td>\n",
|
||
" <td>female</td>\n",
|
||
" <td>32.0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>364849</td>\n",
|
||
" <td>15.5000</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Q</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>661</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>Frauenthal, Dr. Henry William</td>\n",
|
||
" <td>male</td>\n",
|
||
" <td>50.0</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>PC 17611</td>\n",
|
||
" <td>133.6500</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>S</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>674</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>Wilhelms, Mr. Charles</td>\n",
|
||
" <td>male</td>\n",
|
||
" <td>31.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>244270</td>\n",
|
||
" <td>13.0000</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>S</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>745</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>Stranden, Mr. Juho</td>\n",
|
||
" <td>male</td>\n",
|
||
" <td>31.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>STON/O 2. 3101288</td>\n",
|
||
" <td>7.9250</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>S</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>773</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>Mack, Mrs. (Mary)</td>\n",
|
||
" <td>female</td>\n",
|
||
" <td>57.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>S.O./P.P. 3</td>\n",
|
||
" <td>10.5000</td>\n",
|
||
" <td>E77</td>\n",
|
||
" <td>S</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>807</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>Andrews, Mr. Thomas Jr</td>\n",
|
||
" <td>male</td>\n",
|
||
" <td>39.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>112050</td>\n",
|
||
" <td>0.0000</td>\n",
|
||
" <td>A36</td>\n",
|
||
" <td>S</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>814</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>Andersson, Miss. Ebba Iris Alfrida</td>\n",
|
||
" <td>female</td>\n",
|
||
" <td>6.0</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>347082</td>\n",
|
||
" <td>31.2750</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>S</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>829</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>McCormack, Mr. Thomas Joseph</td>\n",
|
||
" <td>male</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>367228</td>\n",
|
||
" <td>7.7500</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Q</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" Survived Predicted Pclass \\\n",
|
||
"PassengerId \n",
|
||
"26 1 0 3 \n",
|
||
"72 0 1 3 \n",
|
||
"103 0 1 1 \n",
|
||
"108 1 0 3 \n",
|
||
"128 1 0 3 \n",
|
||
"193 1 0 3 \n",
|
||
"241 0 1 3 \n",
|
||
"272 1 0 3 \n",
|
||
"293 0 1 2 \n",
|
||
"352 0 1 1 \n",
|
||
"358 0 1 2 \n",
|
||
"378 0 1 1 \n",
|
||
"445 1 0 3 \n",
|
||
"450 1 0 1 \n",
|
||
"508 1 0 1 \n",
|
||
"511 1 0 3 \n",
|
||
"570 1 0 3 \n",
|
||
"579 0 1 3 \n",
|
||
"584 0 1 1 \n",
|
||
"588 1 0 1 \n",
|
||
"618 0 1 3 \n",
|
||
"658 0 1 3 \n",
|
||
"661 1 0 1 \n",
|
||
"674 1 0 2 \n",
|
||
"745 1 0 3 \n",
|
||
"773 0 1 2 \n",
|
||
"807 0 1 1 \n",
|
||
"814 0 1 3 \n",
|
||
"829 1 0 3 \n",
|
||
"\n",
|
||
" Name Sex Age \\\n",
|
||
"PassengerId \n",
|
||
"26 Asplund, Mrs. Carl Oscar (Selma Augusta Emilia... female 38.0 \n",
|
||
"72 Goodwin, Miss. Lillian Amy female 16.0 \n",
|
||
"103 White, Mr. Richard Frasar male 21.0 \n",
|
||
"108 Moss, Mr. Albert Johan male NaN \n",
|
||
"128 Madsen, Mr. Fridtjof Arne male 24.0 \n",
|
||
"193 Andersen-Jensen, Miss. Carla Christine Nielsine female 19.0 \n",
|
||
"241 Zabour, Miss. Thamine female NaN \n",
|
||
"272 Tornquist, Mr. William Henry male 25.0 \n",
|
||
"293 Levy, Mr. Rene Jacques male 36.0 \n",
|
||
"352 Williams-Lambert, Mr. Fletcher Fellows male NaN \n",
|
||
"358 Funk, Miss. Annie Clemmer female 38.0 \n",
|
||
"378 Widener, Mr. Harry Elkins male 27.0 \n",
|
||
"445 Johannesen-Bratthammer, Mr. Bernt male NaN \n",
|
||
"450 Peuchen, Major. Arthur Godfrey male 52.0 \n",
|
||
"508 Bradley, Mr. George (\"George Arthur Brayton\") male NaN \n",
|
||
"511 Daly, Mr. Eugene Patrick male 29.0 \n",
|
||
"570 Jonsson, Mr. Carl male 32.0 \n",
|
||
"579 Caram, Mrs. Joseph (Maria Elias) female NaN \n",
|
||
"584 Ross, Mr. John Hugo male 36.0 \n",
|
||
"588 Frolicher-Stehli, Mr. Maxmillian male 60.0 \n",
|
||
"618 Lobb, Mrs. William Arthur (Cordelia K Stanlick) female 26.0 \n",
|
||
"658 Bourke, Mrs. John (Catherine) female 32.0 \n",
|
||
"661 Frauenthal, Dr. Henry William male 50.0 \n",
|
||
"674 Wilhelms, Mr. Charles male 31.0 \n",
|
||
"745 Stranden, Mr. Juho male 31.0 \n",
|
||
"773 Mack, Mrs. (Mary) female 57.0 \n",
|
||
"807 Andrews, Mr. Thomas Jr male 39.0 \n",
|
||
"814 Andersson, Miss. Ebba Iris Alfrida female 6.0 \n",
|
||
"829 McCormack, Mr. Thomas Joseph male NaN \n",
|
||
"\n",
|
||
" SibSp Parch Ticket Fare Cabin Embarked \n",
|
||
"PassengerId \n",
|
||
"26 1 5 347077 31.3875 NaN S \n",
|
||
"72 5 2 CA 2144 46.9000 NaN S \n",
|
||
"103 0 1 35281 77.2875 D26 S \n",
|
||
"108 0 0 312991 7.7750 NaN S \n",
|
||
"128 0 0 C 17369 7.1417 NaN S \n",
|
||
"193 1 0 350046 7.8542 NaN S \n",
|
||
"241 1 0 2665 14.4542 NaN C \n",
|
||
"272 0 0 LINE 0.0000 NaN S \n",
|
||
"293 0 0 SC/Paris 2163 12.8750 D C \n",
|
||
"352 0 0 113510 35.0000 C128 S \n",
|
||
"358 0 0 237671 13.0000 NaN S \n",
|
||
"378 0 2 113503 211.5000 C82 C \n",
|
||
"445 0 0 65306 8.1125 NaN S \n",
|
||
"450 0 0 113786 30.5000 C104 S \n",
|
||
"508 0 0 111427 26.5500 NaN S \n",
|
||
"511 0 0 382651 7.7500 NaN Q \n",
|
||
"570 0 0 350417 7.8542 NaN S \n",
|
||
"579 1 0 2689 14.4583 NaN C \n",
|
||
"584 0 0 13049 40.1250 A10 C \n",
|
||
"588 1 1 13567 79.2000 B41 C \n",
|
||
"618 1 0 A/5. 3336 16.1000 NaN S \n",
|
||
"658 1 1 364849 15.5000 NaN Q \n",
|
||
"661 2 0 PC 17611 133.6500 NaN S \n",
|
||
"674 0 0 244270 13.0000 NaN S \n",
|
||
"745 0 0 STON/O 2. 3101288 7.9250 NaN S \n",
|
||
"773 0 0 S.O./P.P. 3 10.5000 E77 S \n",
|
||
"807 0 0 112050 0.0000 A36 S \n",
|
||
"814 4 2 347082 31.2750 NaN S \n",
|
||
"829 0 0 367228 7.7500 NaN Q "
|
||
]
|
||
},
|
||
"execution_count": 11,
|
||
"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[\"Survived\"] != 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": 12,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>Survived</th>\n",
|
||
" <th>Pclass</th>\n",
|
||
" <th>Name</th>\n",
|
||
" <th>Sex</th>\n",
|
||
" <th>Age</th>\n",
|
||
" <th>SibSp</th>\n",
|
||
" <th>Parch</th>\n",
|
||
" <th>Ticket</th>\n",
|
||
" <th>Fare</th>\n",
|
||
" <th>Cabin</th>\n",
|
||
" <th>Embarked</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>450</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>Peuchen, Major. Arthur Godfrey</td>\n",
|
||
" <td>male</td>\n",
|
||
" <td>52.0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>113786</td>\n",
|
||
" <td>30.5</td>\n",
|
||
" <td>C104</td>\n",
|
||
" <td>S</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" Survived Pclass Name Sex Age SibSp Parch \\\n",
|
||
"450 1 1 Peuchen, Major. Arthur Godfrey male 52.0 0 0 \n",
|
||
"\n",
|
||
" Ticket Fare Cabin Embarked \n",
|
||
"450 113786 30.5 C104 S "
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"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>Cabin_type_B</th>\n",
|
||
" <th>Cabin_type_C</th>\n",
|
||
" <th>Cabin_type_D</th>\n",
|
||
" <th>Cabin_type_E</th>\n",
|
||
" <th>Cabin_type_F</th>\n",
|
||
" <th>Cabin_type_G</th>\n",
|
||
" <th>Cabin_type_T</th>\n",
|
||
" <th>Cabin_type_u</th>\n",
|
||
" <th>Is_married</th>\n",
|
||
" <th>Pclass</th>\n",
|
||
" <th>Age</th>\n",
|
||
" <th>SibSp</th>\n",
|
||
" <th>Sex_male</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>450</th>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>-1.580088</td>\n",
|
||
" <td>1.749939</td>\n",
|
||
" <td>-0.473465</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" Cabin_type_B Cabin_type_C Cabin_type_D Cabin_type_E Cabin_type_F \\\n",
|
||
"450 0.0 1.0 0.0 0.0 0.0 \n",
|
||
"\n",
|
||
" Cabin_type_G Cabin_type_T Cabin_type_u Is_married Pclass Age \\\n",
|
||
"450 0.0 0.0 0.0 0.0 -1.580088 1.749939 \n",
|
||
"\n",
|
||
" SibSp Sex_male \n",
|
||
"450 -0.473465 1.0 "
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"'predicted: 0 (proba: [0.91145747 0.08854253])'"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"'real: 1'"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"model = class_models[best_model][\"pipeline\"]\n",
|
||
"\n",
|
||
"example_id = 450\n",
|
||
"test = pd.DataFrame(X_test.loc[example_id, :]).T\n",
|
||
"test_preprocessed = pd.DataFrame(preprocessed_df.loc[example_id, :]).T\n",
|
||
"display(test)\n",
|
||
"display(test_preprocessed)\n",
|
||
"result_proba = model.predict_proba(test)[0]\n",
|
||
"result = model.predict(test)[0]\n",
|
||
"real = int(y_test.loc[example_id].values[0])\n",
|
||
"display(f\"predicted: {result} (proba: {result_proba})\")\n",
|
||
"display(f\"real: {real}\")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"#### Подбор гиперпараметров методом поиска по сетке\n",
|
||
"\n",
|
||
"https://www.kaggle.com/code/sociopath00/random-forest-using-gridsearchcv\n",
|
||
"\n",
|
||
"https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 13,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"c:\\Users\\user\\Projects\\python\\ckmai\\.venv\\Lib\\site-packages\\numpy\\ma\\core.py:2881: RuntimeWarning: invalid value encountered in cast\n",
|
||
" _data = np.array(data, dtype=dtype, copy=copy,\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"{'model__criterion': 'gini',\n",
|
||
" 'model__max_depth': 7,\n",
|
||
" 'model__max_features': 'sqrt',\n",
|
||
" 'model__n_estimators': 30}"
|
||
]
|
||
},
|
||
"execution_count": 13,
|
||
"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, 20, 30, 40, 50, 100, 150, 200, 250, 500],\n",
|
||
" \"model__max_features\": [\"sqrt\", \"log2\", 2],\n",
|
||
" \"model__max_depth\": [2, 3, 4, 5, 6, 7, 8, 9 ,10],\n",
|
||
" \"model__criterion\": [\"gini\", \"entropy\", \"log_loss\"],\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": 14,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"pipeline = gs_optomizer.best_estimator_.fit(X_train, y_train.values.ravel())\n",
|
||
"\n",
|
||
"result = run_classification(pipeline, X_train, X_test, y_train, y_test)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"Формирование данных для оценки старой и новой версии модели"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 15,
|
||
"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": 16,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<style type=\"text/css\">\n",
|
||
"#T_52c7b_row0_col0, #T_52c7b_row0_col1, #T_52c7b_row0_col2, #T_52c7b_row1_col3 {\n",
|
||
" background-color: #a8db34;\n",
|
||
" color: #000000;\n",
|
||
"}\n",
|
||
"#T_52c7b_row0_col3, #T_52c7b_row1_col0, #T_52c7b_row1_col1, #T_52c7b_row1_col2 {\n",
|
||
" background-color: #26818e;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_52c7b_row0_col4, #T_52c7b_row0_col6, #T_52c7b_row1_col7 {\n",
|
||
" background-color: #da5a6a;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_52c7b_row0_col5, #T_52c7b_row1_col5 {\n",
|
||
" background-color: #0d0887;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_52c7b_row0_col7, #T_52c7b_row1_col4, #T_52c7b_row1_col6 {\n",
|
||
" background-color: #4e02a2;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"</style>\n",
|
||
"<table id=\"T_52c7b\">\n",
|
||
" <thead>\n",
|
||
" <tr>\n",
|
||
" <th class=\"blank level0\" > </th>\n",
|
||
" <th id=\"T_52c7b_level0_col0\" class=\"col_heading level0 col0\" >Precision_train</th>\n",
|
||
" <th id=\"T_52c7b_level0_col1\" class=\"col_heading level0 col1\" >Precision_test</th>\n",
|
||
" <th id=\"T_52c7b_level0_col2\" class=\"col_heading level0 col2\" >Recall_train</th>\n",
|
||
" <th id=\"T_52c7b_level0_col3\" class=\"col_heading level0 col3\" >Recall_test</th>\n",
|
||
" <th id=\"T_52c7b_level0_col4\" class=\"col_heading level0 col4\" >Accuracy_train</th>\n",
|
||
" <th id=\"T_52c7b_level0_col5\" class=\"col_heading level0 col5\" >Accuracy_test</th>\n",
|
||
" <th id=\"T_52c7b_level0_col6\" class=\"col_heading level0 col6\" >F1_train</th>\n",
|
||
" <th id=\"T_52c7b_level0_col7\" class=\"col_heading level0 col7\" >F1_test</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th class=\"index_name level0\" >Name</th>\n",
|
||
" <th class=\"blank col0\" > </th>\n",
|
||
" <th class=\"blank col1\" > </th>\n",
|
||
" <th class=\"blank col2\" > </th>\n",
|
||
" <th class=\"blank col3\" > </th>\n",
|
||
" <th class=\"blank col4\" > </th>\n",
|
||
" <th class=\"blank col5\" > </th>\n",
|
||
" <th class=\"blank col6\" > </th>\n",
|
||
" <th class=\"blank col7\" > </th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_52c7b_level0_row0\" class=\"row_heading level0 row0\" >Old</th>\n",
|
||
" <td id=\"T_52c7b_row0_col0\" class=\"data row0 col0\" >0.894340</td>\n",
|
||
" <td id=\"T_52c7b_row0_col1\" class=\"data row0 col1\" >0.794118</td>\n",
|
||
" <td id=\"T_52c7b_row0_col2\" class=\"data row0 col2\" >0.868132</td>\n",
|
||
" <td id=\"T_52c7b_row0_col3\" class=\"data row0 col3\" >0.782609</td>\n",
|
||
" <td id=\"T_52c7b_row0_col4\" class=\"data row0 col4\" >0.910112</td>\n",
|
||
" <td id=\"T_52c7b_row0_col5\" class=\"data row0 col5\" >0.837989</td>\n",
|
||
" <td id=\"T_52c7b_row0_col6\" class=\"data row0 col6\" >0.881041</td>\n",
|
||
" <td id=\"T_52c7b_row0_col7\" class=\"data row0 col7\" >0.788321</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_52c7b_level0_row1\" class=\"row_heading level0 row1\" >New</th>\n",
|
||
" <td id=\"T_52c7b_row1_col0\" class=\"data row1 col0\" >0.800699</td>\n",
|
||
" <td id=\"T_52c7b_row1_col1\" class=\"data row1 col1\" >0.777778</td>\n",
|
||
" <td id=\"T_52c7b_row1_col2\" class=\"data row1 col2\" >0.838828</td>\n",
|
||
" <td id=\"T_52c7b_row1_col3\" class=\"data row1 col3\" >0.811594</td>\n",
|
||
" <td id=\"T_52c7b_row1_col4\" class=\"data row1 col4\" >0.858146</td>\n",
|
||
" <td id=\"T_52c7b_row1_col5\" class=\"data row1 col5\" >0.837989</td>\n",
|
||
" <td id=\"T_52c7b_row1_col6\" class=\"data row1 col6\" >0.819320</td>\n",
|
||
" <td id=\"T_52c7b_row1_col7\" class=\"data row1 col7\" >0.794326</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n"
|
||
],
|
||
"text/plain": [
|
||
"<pandas.io.formats.style.Styler at 0x28221285d30>"
|
||
]
|
||
},
|
||
"execution_count": 16,
|
||
"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": 17,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<style type=\"text/css\">\n",
|
||
"#T_3ee0b_row0_col0, #T_3ee0b_row1_col0 {\n",
|
||
" background-color: #440154;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_3ee0b_row0_col1 {\n",
|
||
" background-color: #26818e;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_3ee0b_row0_col2, #T_3ee0b_row0_col3, #T_3ee0b_row0_col4 {\n",
|
||
" background-color: #4e02a2;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_3ee0b_row1_col1 {\n",
|
||
" background-color: #a8db34;\n",
|
||
" color: #000000;\n",
|
||
"}\n",
|
||
"#T_3ee0b_row1_col2, #T_3ee0b_row1_col3, #T_3ee0b_row1_col4 {\n",
|
||
" background-color: #da5a6a;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"</style>\n",
|
||
"<table id=\"T_3ee0b\">\n",
|
||
" <thead>\n",
|
||
" <tr>\n",
|
||
" <th class=\"blank level0\" > </th>\n",
|
||
" <th id=\"T_3ee0b_level0_col0\" class=\"col_heading level0 col0\" >Accuracy_test</th>\n",
|
||
" <th id=\"T_3ee0b_level0_col1\" class=\"col_heading level0 col1\" >F1_test</th>\n",
|
||
" <th id=\"T_3ee0b_level0_col2\" class=\"col_heading level0 col2\" >ROC_AUC_test</th>\n",
|
||
" <th id=\"T_3ee0b_level0_col3\" class=\"col_heading level0 col3\" >Cohen_kappa_test</th>\n",
|
||
" <th id=\"T_3ee0b_level0_col4\" class=\"col_heading level0 col4\" >MCC_test</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th class=\"index_name level0\" >Name</th>\n",
|
||
" <th class=\"blank col0\" > </th>\n",
|
||
" <th class=\"blank col1\" > </th>\n",
|
||
" <th class=\"blank col2\" > </th>\n",
|
||
" <th class=\"blank col3\" > </th>\n",
|
||
" <th class=\"blank col4\" > </th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_3ee0b_level0_row0\" class=\"row_heading level0 row0\" >Old</th>\n",
|
||
" <td id=\"T_3ee0b_row0_col0\" class=\"data row0 col0\" >0.837989</td>\n",
|
||
" <td id=\"T_3ee0b_row0_col1\" class=\"data row0 col1\" >0.788321</td>\n",
|
||
" <td id=\"T_3ee0b_row0_col2\" class=\"data row0 col2\" >0.858893</td>\n",
|
||
" <td id=\"T_3ee0b_row0_col3\" class=\"data row0 col3\" >0.657111</td>\n",
|
||
" <td id=\"T_3ee0b_row0_col4\" class=\"data row0 col4\" >0.657157</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_3ee0b_level0_row1\" class=\"row_heading level0 row1\" >New</th>\n",
|
||
" <td id=\"T_3ee0b_row1_col0\" class=\"data row1 col0\" >0.837989</td>\n",
|
||
" <td id=\"T_3ee0b_row1_col1\" class=\"data row1 col1\" >0.794326</td>\n",
|
||
" <td id=\"T_3ee0b_row1_col2\" class=\"data row1 col2\" >0.866140</td>\n",
|
||
" <td id=\"T_3ee0b_row1_col3\" class=\"data row1 col3\" >0.660785</td>\n",
|
||
" <td id=\"T_3ee0b_row1_col4\" class=\"data row1 col4\" >0.661193</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n"
|
||
],
|
||
"text/plain": [
|
||
"<pandas.io.formats.style.Styler at 0x28220ffbc20>"
|
||
]
|
||
},
|
||
"execution_count": 17,
|
||
"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": 18,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "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YqcuAADKyuS5xqANACzI7LtsAQCsxey5RnkkfMJms2nZsmVlaqNv377q0aOHIf2B8Yz4b7xnzx7ZbDZt3rzZkD6dzfjx49WqVatyfQ8A5kaumR+5Bl9i0AZD9e3bVzabTTabTUFBQYqOjlbnzp312muvyen8Y745KytLN9xwgw97irL65ZdfdN9996lOnToKCQlRTEyMunbtqs8//1ySMf+N4+PjlZWVpWbNmhnRZZzq5IJtIw7AxMg16yDXLnImzzXKI2G4bt26ac6cOXI4HMrJydGKFSs0ZMgQLV68WO+++64CAwMVExPj626ijFJSUlRcXKx58+apfv36ysnJ0apVq/Tbb79J0nn/G5eUlCgoKOic51SqVImflfJi8l22ACORa9ZArl3kTJ5rzLTBcCevTtWqVUutW7fWo48+qv/85z9avny55s6dK+n0EoOMjAzdfvvtioqKUrVq1dS9e3ft2bPH/bzD4dDw4cMVFRWl6tWra+TIkeIWg76Tm5urtWvX6umnn1bHjh1Vt25dXXnllRo9erRuueUWSZ7/jU+Wg7z11lu67rrrFBoaqpkzZyosLEzLly/3aHvp0qWKiIjQ0aNHPcpInE6nateurZkzZ3qc/8033yggIEB79+51923gwIGqUaOGIiMj1alTJ23ZssXjNU899ZSio6MVERGhAQMGqLCwsJy+UwDMgFwzP3IN/o5BGypEp06d1LJlS73zzjunPVdSUqKuXbsqIiJCa9eu1eeff67w8HB169ZNxcXFkqTnnntOc+fO1WuvvaZ169bp0KFDWrp0aUV/DPxPeHi4wsPDtWzZMhUVFZX6daNGjdKQIUO0bds29erVSzfffLPS0tI8zlmwYIF69OihypUrezweEBCg3r17n/H89u3bq27dupKkXr166eDBg1q+fLnS09PVunVrXX/99Tp06JAk6e2339b48eP15JNPatOmTYqNjdVLL710Id+Gi5vJy0iA8kaumQu5ZgImzzUGbagwTZo08bjKeNJbb70lp9OpV199Vc2bN1diYqLmzJmjffv2afXq1ZKkadOmafTo0erZs6cSExM1a9Ys2e32iv0AcAsMDNTcuXM1b948RUVFqX379nr00Uf17bffnvN1Q4cOVc+ePZWQkKDY2FilpqZq2bJlOnr0qCQpPz9fH3zwgVJTU8/4+tTUVH3++efat2+fJMnpdGrhwoXu89etW6cvv/xSixYtUtu2bdWwYUM9++yzioqK0uLFiyWd+FkaMGCABgwYoMaNG2vy5Mlq2rSpUd8aABZCrpkHuQZ/x6ANFcblcslmO/0GGlu2bNHOnTsVERHhvtJVrVo1FRYWateuXcrLy1NWVpbatWvnfk1gYKDatm1bkd3Hn6SkpCgzM1PvvvuuunXrptWrV6t169buUqEz+fN/sxtvvFFBQUF69913JUlLlixRZGSkkpOTz/j6Vq1aKTEx0X1Vcs2aNTp48KB69eol6cTPUkFBgapXr+7+WQoPD9fu3bu1a9cuSdK2bds8fpYkKSkp6YK+Bxc1p4EHYFHkmrmQaxc5k+caG5Ggwmzbtk0JCQmnPV5QUKA2bdpowYIFpz1Xo0aNiugaLlBoaKg6d+6szp07a+zYsRo4cKDGjRunvn37nvH8KlWqeHwdHBys2267TWlpabrzzjuVlpamO+64Q4GBZ//VlJqaqrS0NI0aNUppaWnq1q2bqlevLunEz1JsbKz7SvapoqKiLvRjmpLZ72cDVARyzXzItYuX2XONmTZUiE8++URbt25VSkrKac+1bt1aO3bsUM2aNdWgQQOPw263y263KzY2Vhs3bnS/5vjx40pPT6/Ij4BSaNq0qY4cOeLVa1JTU7VixQp9//33+uSTT85aQnLS3/72N3333XdKT0/X4sWLPc5v3bq1srOzFRgYeNrP0iWXXCJJSkxM9PhZkqQNGzZ41WcAINesgVyDv2DQBsMVFRUpOztbBw4c0Ndff60nn3xS3bt3180336y77777tPNTU1N1ySWXqHv37lq7dq12796t1atX68EHH9T+/fslSUOGDNFTTz2lZcuW6ccff9T999+v3NzcCv5kOOm3335Tp06d9MYbb+jbb7/V7t27tWjRIk2dOlXdu3f3qq0OHTooJiZGqampSkhIOK3E48/q1aunq6++WgMGDJDD4XDv6iVJycnJSkpKUo8ePfTf//5Xe/bs0RdffKHHHntMmzZtknTiZ+m1117TnDlz9NNPP2ncuHH6/vvvvf8mXOxMvmAbMBK5Zn7kmgmYPNcoj4ThVqxYodjYWAUGBqpq1apq2bKlpk+frj59+igg4PTrBJUrV9Znn32mRx55RD179tThw4dVq1YtXX/99YqMjJQkjRgxQllZWe42+vfvr1tvvVV5eXkV/fGgE7tstWvXTs8//7x27dqlkpISxcfH65577tGjjz7qVVs2m029e/fW1KlT9fjjj5fqNampqbr//vt19913KywszKOtDz/8UI899pj69eunX375RTExMerQoYOio6MlSXfccYd27dqlkSNHqrCwUCkpKbrvvvu0cuVKr/p90XO6JJsBweT0z3ADjESumR+5ZgImzzWbi5uCAIBl5Ofny263K/nSoQqsFFLm9o47ivTxrmnKy8tz/zEKAEBFsUquMdMGAFZkVAkI1/0AAP7A5LnGoA0ALMmoun3/DDcAgNWYO9fYiAQAAAAA/BgzbQBgRSYvIwEAWIzJc42ZNgAAAAC4AFOmTNEVV1yhiIgI1axZUz169ND27ds9ziksLNSgQYNUvXp1hYeHKyUlRTk5OV69D4M2ALAip8u4AwAAX/NRrq1Zs0aDBg3Shg0b9NFHH6mkpERdunTxuCn7sGHD9N5772nRokVas2aNMjMz1bNnT6/eh/JIALAil/PEYUQ7AAD4msG5lp+f7/FwSEiIQkJOv6XAihUrPL6eO3euatasqfT0dHXo0EF5eXmaPXu20tLS1KlTJ0nSnDlzlJiYqA0bNuiqq64qVbeYaQMuQN++fdWjRw/313/5y180dOjQCu/H6tWrZbPZlJube9ZzbDabli1bVuo2x48fr1atWpWpX3v27JHNZtPmzZvL1A4AoGKQa+dGrllPfHy87Ha7+5gyZUqpXpeXlydJqlatmiQpPT1dJSUlSk5Odp/TpEkT1alTR+vXry91fxi0wTT69u0rm80mm82m4OBgNWjQQBMnTtTx48fL/b3feecdTZo0qVTnliaQgHJ3csG2EQeAckGuAV4wONcyMjKUl5fnPkaPHn3eLjidTg0dOlTt27dXs2bNJEnZ2dkKDg5WVFSUx7nR0dHKzs4u9cdj0AZT6datm7KysrRjxw6NGDFC48eP1zPPPHPGc4uLiw1732rVqikiIsKw9oBy56Pa/4pasA2YBbkGlJLBuRYZGelxnKk08s8GDRqk7777TgsXLjT84zFog6mEhIQoJiZGdevW1X333afk5GS9++67kv4o/XjiiScUFxenxo0bSzpxJeX2229XVFSUqlWrpu7du2vPnj3uNh0Oh4YPH66oqChVr15dI0eOlOtPswt/LiMpKirSI488ovj4eIWEhKhBgwaaPXu29uzZo44dO0qSqlatKpvNpr59+0o6cXVmypQpSkhIUFhYmFq2bKnFixd7vM+HH36oRo0aKSwsTB07dvToZ2k98sgjatSokSpXrqz69etr7NixKikpOe28l19+WfHx8apcubJuv/1293T/Sa+++qoSExMVGhqqJk2a6KWXXvK6L7CeilqwDZgFuXZ+5Br8wQMPPKD3339fn376qWrXru1+PCYmRsXFxafNROfk5CgmJqbU7bMRCUwtLCxMv/32m/vrVatWKTIyUh999JEkqaSkRF27dlVSUpLWrl2rwMBATZ48Wd26ddO3336r4OBgPffcc5o7d65ee+01JSYm6rnnntPSpUvdi0nP5O6779b69es1ffp0tWzZUrt379avv/6q+Ph4LVmyRCkpKdq+fbsiIyMVFhYm6cQMxBtvvKFZs2apYcOG+uyzz3TXXXepRo0auu6665SRkaGePXtq0KBBuvfee7Vp0yaNGDHC6+9JRESE5s6dq7i4OG3dulX33HOPIiIiNHLkSPc5O3fu1Ntvv6333ntP+fn5GjBggO6//34tWLBAkrRgwQI9/vjjevHFF3X55Zfrm2++0T333KMqVaqoT58+XvcJPuCj+9lU1IJtwKzItdORa5Dks1xzuVwaPHiwli5dqtWrVyshIcHj+TZt2igoKEirVq1SSkqKJGn79u3at2+fkpKSSv0+DNpgSi6XS6tWrdLKlSs1ePBg9+NVqlTRq6++quDgYEnSG2+8IafTqVdffVU2m03SiT8Qo6KitHr1anXp0kXTpk3T6NGj3Vf6Z82apZUrV571vX/66Se9/fbb+uijj9yLTuvXr+9+/uTC1Jo1a7rrm4uKivTkk0/q448/dv8PXL9+fa1bt04vv/yyrrvuOs2cOVOXXnqpnnvuOUlS48aNtXXrVj399NNefW/GjBnj/vd69erpoYce0sKFCz3CrbCwUPPnz1etWrUkSS+88IJuuukmPffcc4qJidG4ceP03HPPub8nCQkJ+uGHH/Tyyy8TbhcLlwwKtxP/KO0uW3/m7YJtBm2wKnLt7Mg1SDI810pr0KBBSktL03/+8x9FRES416nZ7XaFhYXJbrdrwIABGj58uKpVq6bIyEgNHjxYSUlJXmUagzaYyvvvv6/w8HCVlJTI6XTqb3/7m8aPH+9+vnnz5u5gk6QtW7Zo586dp9XtFxYWateuXcrLy1NWVpbatWvnfi4wMFBt27Y9rZTkpM2bN6tSpUq67rrrSt3vnTt36ujRo+rcubPH48XFxbr88sslSdu2bfPohySvrtCc9NZbb2n69OnatWuXCgoKdPz4cUVGRnqcU6dOHXewnXwfp9Op7du3KyIiQrt27dKAAQN0zz33uM85fvy47Ha71/2BOcTHx3t8PW7cOI//986kPBdsA2ZBrp0fuQZfmjlzpqQTJcWnmjNnjrtU+Pnnn1dAQIBSUlJUVFSkrl27el1+y6ANptKxY0fNnDlTwcHBiouLU2Cg5494lSpVPL4uKChQmzZt3OURp6pRo8YF9eFkWYg3CgoKJEkffPCBR6hIKtVsRWmtX79eqampmjBhgrp27Sq73a6FCxe6r3J609dXXnnltLCtVKmSYX1FOTO4jCQjI8PjjyRvFmyvW7eu7P0ATIpcOzdyDW4+LI88n9DQUM2YMUMzZsy40F4xaIO5VKlSRQ0aNCj1+a1bt9Zbb72lmjVrnnZV7qTY2Fht3LhRHTp0kHTiylt6erpat259xvObN28up9OpNWvWeJR4nXTyiqjD4XA/1rRpU4WEhGjfvn1nvZKZmJjoXnx+0oYNG87/IU/xxRdfqG7dunrsscfcj+3du/e08/bt26fMzEzFxcW53ycgIECNGzdWdHS04uLi9PPPPys1NdWr94cfcTolGXATUueJNk7urlVaJxdsf/bZZ2ddsH3qbJu3C7YBsyDXzo1cg5vBueZv2D0SlpaamqpLLrlE3bt319q1a7V7926tXr1aDz74oPbv3y9JGjJkiJ566iktW7ZMP/74o+6///5z3oumXr166tOnj/r3769ly5a523z77bclSXXr1pXNZtP777+vX375RQUFBYqIiNBDDz2kYcOGad68edq1a5e+/vprvfDCC5o3b54k6Z///Kd27Nihhx9+WNu3b1daWprmzp3r1edt2LCh9u3bp4ULF2rXrl2aPn26li5detp5oaGh6tOnj7Zs2aK1a9fqwQcf1O233+7+o3nChAmaMmWKpk+frp9++klbt27VnDlz9K9//cur/sB6XC6XHnjgAS1dulSffPLJORdsn3QhC7YBqyLXyDWYE4M2WFrlypX12WefqU6dOurZs6cSExM1YMAAFRYWuq9QjhgxQn//+9/Vp08fJSUlKSIiQrfeeus52505c6Zuu+023X///WrSpInuuece95bmtWrV0oQJEzRq1ChFR0frgQcekCRNmjRJY8eO1ZQpU5SYmKhu3brpgw8+cP9RW6dOHS1ZskTLli1Ty5YtNWvWLD355JNefd5bbrlFw4YN0wMPPKBWrVrpiy++0NixY087r0GDBurZs6duvPFGdenSRS1atPCovR44cKBeffVVzZkzR82bN9d1112nuXPnnvYHOPyYj26uPWjQIL3xxhtKS0tzL9jOzs7WsWPHJMljwfann36q9PR09evXz+sF24BVkWvkmmX5KNcqis1VmkJMAIAp5Ofny263K7nGAAUGBJ//Bedx3Fmsj3+Zrby8vFKVR57cze7PTl2wXVhYqBEjRujNN9/0WLBNeSQA4M98nWsVhTVtAGBFJl+wDQCwGB/lWkVh0AYAVuR0yeub0Zy1HQAAfMzkucaaNgAAAADwY8y0AYAFuVxOuVxl39bYiDYAACgrs+cagzYAsCKXy5gSED+t/QcAWIzJc43ySAAAAADwY8y0AYAVuQxasO2nVyQBABZj8lxj0AYAVuR0SjYD6vb9tPYfAGAxJs81yiMBAAAAwI8x0wYAVmTyMhIAgMWYPNeYaQMAAAAAP8ZMGwBYkMvplMuA2n9/vZ8NAMBazJ5rDNoAwIpMXkYCALAYk+ca5ZEAAAAA4MeYaQMAK3K6JJt5r0gCACzG5LnGoA0ArMjlkmTE/Wz8M9wAABZj8lyjPBIAAAAA/BgzbQBgQS6nSy4DykhcfnpFEgBgLWbPNQZtAGBFLqeMKSPxz62RAQAWY/JcozwSAAAAAPwYM20AYEFmLyMBAFiL2XONQRsAWJHJy0gAABZj8lxj0AYAFnRcJZIBFxOPq6TsjQAAUEZmzzUGbQBgIcHBwYqJidG67A8NazMmJkbBwcGGtQcAQGlZJddsLn8t3AQAlIvCwkIVFxcb1l5wcLBCQ0MNaw8AAG9YIdcYtAEAAACAH2PLfwAAAADwYwzaAAAAAMCPMWgDAAAAAD/GoA0AAAAA/BiDNgAAAADwYwzaAAAAAMCPMWgDAAAAAD/2/6EIoY4EFTi5AAAAAElFTkSuQmCC",
|
||
"text/plain": [
|
||
"<Figure size 1000x400 with 4 Axes>"
|
||
]
|
||
},
|
||
"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=[\"Died\", \"Sirvived\"]\n",
|
||
" ).plot(ax=ax.flat[index])\n",
|
||
"\n",
|
||
"plt.subplots_adjust(top=1, bottom=0, hspace=0.4, wspace=0.3)\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"# Регрессия"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"#### Загрузка данных"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 19,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>T</th>\n",
|
||
" <th>Al2O3</th>\n",
|
||
" <th>TiO2</th>\n",
|
||
" <th>Density</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>20</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1.06250</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>25</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1.05979</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>35</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1.05404</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" T Al2O3 TiO2 Density\n",
|
||
"0 20 0.0 0.0 1.06250\n",
|
||
"1 25 0.0 0.0 1.05979\n",
|
||
"2 35 0.0 0.0 1.05404"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"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>T</th>\n",
|
||
" <th>Al2O3</th>\n",
|
||
" <th>TiO2</th>\n",
|
||
" <th>Density</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>30</td>\n",
|
||
" <td>0.00</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1.05696</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>55</td>\n",
|
||
" <td>0.00</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1.04158</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>25</td>\n",
|
||
" <td>0.05</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1.08438</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" T Al2O3 TiO2 Density\n",
|
||
"0 30 0.00 0.0 1.05696\n",
|
||
"1 55 0.00 0.0 1.04158\n",
|
||
"2 25 0.05 0.0 1.08438"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"import pandas as pd\n",
|
||
"\n",
|
||
"density_train = pd.read_csv(\"data/density/density_train.csv\", sep=\";\", decimal=\",\")\n",
|
||
"density_test = pd.read_csv(\"data/density/density_test.csv\", sep=\";\", decimal=\",\")\n",
|
||
"\n",
|
||
"display(density_train.head(3))\n",
|
||
"display(density_test.head(3))"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"#### Формирование выборок"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 20,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>T</th>\n",
|
||
" <th>Al2O3</th>\n",
|
||
" <th>TiO2</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>20</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>25</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>35</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" T Al2O3 TiO2\n",
|
||
"0 20 0.0 0.0\n",
|
||
"1 25 0.0 0.0\n",
|
||
"2 35 0.0 0.0"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"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>Density</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>1.06250</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>1.05979</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>1.05404</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" Density\n",
|
||
"0 1.06250\n",
|
||
"1 1.05979\n",
|
||
"2 1.05404"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"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>T</th>\n",
|
||
" <th>Al2O3</th>\n",
|
||
" <th>TiO2</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>30</td>\n",
|
||
" <td>0.00</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>55</td>\n",
|
||
" <td>0.00</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>25</td>\n",
|
||
" <td>0.05</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" T Al2O3 TiO2\n",
|
||
"0 30 0.00 0.0\n",
|
||
"1 55 0.00 0.0\n",
|
||
"2 25 0.05 0.0"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"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>Density</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>1.05696</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>1.04158</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>1.08438</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" Density\n",
|
||
"0 1.05696\n",
|
||
"1 1.04158\n",
|
||
"2 1.08438"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"density_y_train = pd.DataFrame(density_train[\"Density\"], columns=[\"Density\"])\n",
|
||
"density_train = density_train.drop([\"Density\"], axis=1)\n",
|
||
"\n",
|
||
"display(density_train.head(3))\n",
|
||
"display(density_y_train.head(3))\n",
|
||
"\n",
|
||
"density_y_test = pd.DataFrame(density_test[\"Density\"], columns=[\"Density\"])\n",
|
||
"density_test = density_test.drop([\"Density\"], axis=1)\n",
|
||
"\n",
|
||
"display(density_test.head(3))\n",
|
||
"display(density_y_test.head(3))"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"#### Определение перечня алгоритмов решения задачи аппроксимации (регрессии)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 21,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"from sklearn.pipeline import make_pipeline\n",
|
||
"from sklearn.preprocessing import PolynomialFeatures\n",
|
||
"from sklearn import linear_model, tree, neighbors, ensemble, neural_network\n",
|
||
"\n",
|
||
"random_state = 9\n",
|
||
"\n",
|
||
"models = {\n",
|
||
" \"linear\": {\"model\": linear_model.LinearRegression(n_jobs=-1)},\n",
|
||
" \"linear_poly\": {\n",
|
||
" \"model\": make_pipeline(\n",
|
||
" PolynomialFeatures(degree=2),\n",
|
||
" linear_model.LinearRegression(fit_intercept=False, n_jobs=-1),\n",
|
||
" )\n",
|
||
" },\n",
|
||
" \"linear_interact\": {\n",
|
||
" \"model\": make_pipeline(\n",
|
||
" PolynomialFeatures(interaction_only=True),\n",
|
||
" linear_model.LinearRegression(fit_intercept=False, n_jobs=-1),\n",
|
||
" )\n",
|
||
" },\n",
|
||
" \"ridge\": {\"model\": linear_model.RidgeCV()},\n",
|
||
" \"decision_tree\": {\n",
|
||
" \"model\": tree.DecisionTreeRegressor(max_depth=7, random_state=random_state)\n",
|
||
" },\n",
|
||
" \"knn\": {\"model\": neighbors.KNeighborsRegressor(n_neighbors=7, n_jobs=-1)},\n",
|
||
" \"random_forest\": {\n",
|
||
" \"model\": ensemble.RandomForestRegressor(\n",
|
||
" max_depth=7, random_state=random_state, n_jobs=-1\n",
|
||
" )\n",
|
||
" },\n",
|
||
" \"mlp\": {\n",
|
||
" \"model\": neural_network.MLPRegressor(\n",
|
||
" activation=\"tanh\",\n",
|
||
" hidden_layer_sizes=(3,),\n",
|
||
" max_iter=500,\n",
|
||
" early_stopping=True,\n",
|
||
" random_state=random_state,\n",
|
||
" )\n",
|
||
" },\n",
|
||
"}"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"#### Обучение и оценка моделей с помощью различных алгоритмов"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 22,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Model: linear\n",
|
||
"Model: linear_poly\n",
|
||
"Model: linear_interact\n",
|
||
"Model: ridge\n",
|
||
"Model: decision_tree\n",
|
||
"Model: knn\n",
|
||
"Model: random_forest\n",
|
||
"Model: mlp\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"from src.utils import run_regression\n",
|
||
"\n",
|
||
"for model_name in models.keys():\n",
|
||
" print(f\"Model: {model_name}\")\n",
|
||
" X_train = density_train\n",
|
||
" X_test = density_test\n",
|
||
" y_train = density_y_train\n",
|
||
" y_test = density_y_test\n",
|
||
"\n",
|
||
" model = models[model_name][\"model\"]\n",
|
||
" fitted_model = model.fit(\n",
|
||
" X_train.values, density_y_train.values.ravel()\n",
|
||
" )\n",
|
||
"\n",
|
||
" models[model_name] = run_regression(fitted_model, X_train, X_test, y_train, y_test)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"#### Вывод результатов оценки"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 23,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<style type=\"text/css\">\n",
|
||
"#T_63a66_row0_col0, #T_63a66_row0_col1, #T_63a66_row4_col0 {\n",
|
||
" background-color: #26818e;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_63a66_row0_col2, #T_63a66_row7_col3 {\n",
|
||
" background-color: #4e02a2;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_63a66_row0_col3, #T_63a66_row1_col3, #T_63a66_row2_col3, #T_63a66_row3_col3, #T_63a66_row4_col3, #T_63a66_row7_col2 {\n",
|
||
" background-color: #da5a6a;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_63a66_row1_col0, #T_63a66_row1_col1, #T_63a66_row2_col0 {\n",
|
||
" background-color: #26828e;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_63a66_row1_col2 {\n",
|
||
" background-color: #5901a5;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_63a66_row2_col1, #T_63a66_row3_col0 {\n",
|
||
" background-color: #25838e;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_63a66_row2_col2 {\n",
|
||
" background-color: #6400a7;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_63a66_row3_col1 {\n",
|
||
" background-color: #24868e;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_63a66_row3_col2 {\n",
|
||
" background-color: #7100a8;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_63a66_row4_col1 {\n",
|
||
" background-color: #24878e;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_63a66_row4_col2 {\n",
|
||
" background-color: #7701a8;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_63a66_row5_col0 {\n",
|
||
" background-color: #21908d;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_63a66_row5_col1 {\n",
|
||
" background-color: #21918c;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_63a66_row5_col2 {\n",
|
||
" background-color: #910ea3;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_63a66_row5_col3 {\n",
|
||
" background-color: #d8576b;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_63a66_row6_col0 {\n",
|
||
" background-color: #38b977;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_63a66_row6_col1 {\n",
|
||
" background-color: #3bbb75;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_63a66_row6_col2 {\n",
|
||
" background-color: #c5407e;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_63a66_row6_col3 {\n",
|
||
" background-color: #b7318a;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_63a66_row7_col0, #T_63a66_row7_col1 {\n",
|
||
" background-color: #a8db34;\n",
|
||
" color: #000000;\n",
|
||
"}\n",
|
||
"</style>\n",
|
||
"<table id=\"T_63a66\">\n",
|
||
" <thead>\n",
|
||
" <tr>\n",
|
||
" <th class=\"blank level0\" > </th>\n",
|
||
" <th id=\"T_63a66_level0_col0\" class=\"col_heading level0 col0\" >RMSE_train</th>\n",
|
||
" <th id=\"T_63a66_level0_col1\" class=\"col_heading level0 col1\" >RMSE_test</th>\n",
|
||
" <th id=\"T_63a66_level0_col2\" class=\"col_heading level0 col2\" >RMAE_test</th>\n",
|
||
" <th id=\"T_63a66_level0_col3\" class=\"col_heading level0 col3\" >R2_test</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_63a66_level0_row0\" class=\"row_heading level0 row0\" >linear_poly</th>\n",
|
||
" <td id=\"T_63a66_row0_col0\" class=\"data row0 col0\" >0.000319</td>\n",
|
||
" <td id=\"T_63a66_row0_col1\" class=\"data row0 col1\" >0.000362</td>\n",
|
||
" <td id=\"T_63a66_row0_col2\" class=\"data row0 col2\" >0.016643</td>\n",
|
||
" <td id=\"T_63a66_row0_col3\" class=\"data row0 col3\" >0.999965</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_63a66_level0_row1\" class=\"row_heading level0 row1\" >linear_interact</th>\n",
|
||
" <td id=\"T_63a66_row1_col0\" class=\"data row1 col0\" >0.001131</td>\n",
|
||
" <td id=\"T_63a66_row1_col1\" class=\"data row1 col1\" >0.001491</td>\n",
|
||
" <td id=\"T_63a66_row1_col2\" class=\"data row1 col2\" >0.033198</td>\n",
|
||
" <td id=\"T_63a66_row1_col3\" class=\"data row1 col3\" >0.999413</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_63a66_level0_row2\" class=\"row_heading level0 row2\" >linear</th>\n",
|
||
" <td id=\"T_63a66_row2_col0\" class=\"data row2 col0\" >0.002464</td>\n",
|
||
" <td id=\"T_63a66_row2_col1\" class=\"data row2 col1\" >0.003261</td>\n",
|
||
" <td id=\"T_63a66_row2_col2\" class=\"data row2 col2\" >0.049891</td>\n",
|
||
" <td id=\"T_63a66_row2_col3\" class=\"data row2 col3\" >0.997191</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_63a66_level0_row3\" class=\"row_heading level0 row3\" >random_forest</th>\n",
|
||
" <td id=\"T_63a66_row3_col0\" class=\"data row3 col0\" >0.002716</td>\n",
|
||
" <td id=\"T_63a66_row3_col1\" class=\"data row3 col1\" >0.005575</td>\n",
|
||
" <td id=\"T_63a66_row3_col2\" class=\"data row3 col2\" >0.067298</td>\n",
|
||
" <td id=\"T_63a66_row3_col3\" class=\"data row3 col3\" >0.991788</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_63a66_level0_row4\" class=\"row_heading level0 row4\" >decision_tree</th>\n",
|
||
" <td id=\"T_63a66_row4_col0\" class=\"data row4 col0\" >0.000346</td>\n",
|
||
" <td id=\"T_63a66_row4_col1\" class=\"data row4 col1\" >0.006433</td>\n",
|
||
" <td id=\"T_63a66_row4_col2\" class=\"data row4 col2\" >0.076138</td>\n",
|
||
" <td id=\"T_63a66_row4_col3\" class=\"data row4 col3\" >0.989067</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_63a66_level0_row5\" class=\"row_heading level0 row5\" >ridge</th>\n",
|
||
" <td id=\"T_63a66_row5_col0\" class=\"data row5 col0\" >0.013989</td>\n",
|
||
" <td id=\"T_63a66_row5_col1\" class=\"data row5 col1\" >0.015356</td>\n",
|
||
" <td id=\"T_63a66_row5_col2\" class=\"data row5 col2\" >0.116380</td>\n",
|
||
" <td id=\"T_63a66_row5_col3\" class=\"data row5 col3\" >0.937703</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_63a66_level0_row6\" class=\"row_heading level0 row6\" >knn</th>\n",
|
||
" <td id=\"T_63a66_row6_col0\" class=\"data row6 col0\" >0.053108</td>\n",
|
||
" <td id=\"T_63a66_row6_col1\" class=\"data row6 col1\" >0.056776</td>\n",
|
||
" <td id=\"T_63a66_row6_col2\" class=\"data row6 col2\" >0.217611</td>\n",
|
||
" <td id=\"T_63a66_row6_col3\" class=\"data row6 col3\" >0.148414</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_63a66_level0_row7\" class=\"row_heading level0 row7\" >mlp</th>\n",
|
||
" <td id=\"T_63a66_row7_col0\" class=\"data row7 col0\" >0.095734</td>\n",
|
||
" <td id=\"T_63a66_row7_col1\" class=\"data row7 col1\" >0.099654</td>\n",
|
||
" <td id=\"T_63a66_row7_col2\" class=\"data row7 col2\" >0.270371</td>\n",
|
||
" <td id=\"T_63a66_row7_col3\" class=\"data row7 col3\" >-1.623554</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n"
|
||
],
|
||
"text/plain": [
|
||
"<pandas.io.formats.style.Styler at 0x282215a87a0>"
|
||
]
|
||
},
|
||
"execution_count": 23,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"reg_metrics = pd.DataFrame.from_dict(models, \"index\")[\n",
|
||
" [\"RMSE_train\", \"RMSE_test\", \"RMAE_test\", \"R2_test\"]\n",
|
||
"]\n",
|
||
"reg_metrics.sort_values(by=\"RMSE_test\").style.background_gradient(\n",
|
||
" cmap=\"viridis\", low=1, high=0.3, subset=[\"RMSE_train\", \"RMSE_test\"]\n",
|
||
").background_gradient(cmap=\"plasma\", low=0.3, high=1, subset=[\"RMAE_test\", \"R2_test\"])"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"#### Вывод реального и \"спрогнозированного\" результата для обучающей и тестовой выборок"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"Получение лучшей модели"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 24,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"'linear_poly'"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"best_model = str(reg_metrics.sort_values(by=\"RMSE_test\").iloc[0].name)\n",
|
||
"\n",
|
||
"display(best_model)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"Вывод для обучающей выборки"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 25,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>T</th>\n",
|
||
" <th>Al2O3</th>\n",
|
||
" <th>TiO2</th>\n",
|
||
" <th>Density</th>\n",
|
||
" <th>DensityPred</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>20</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1.06250</td>\n",
|
||
" <td>1.063174</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>25</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1.05979</td>\n",
|
||
" <td>1.060117</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>35</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1.05404</td>\n",
|
||
" <td>1.053941</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>40</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1.05103</td>\n",
|
||
" <td>1.050822</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>45</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1.04794</td>\n",
|
||
" <td>1.047683</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" T Al2O3 TiO2 Density DensityPred\n",
|
||
"0 20 0.0 0.0 1.06250 1.063174\n",
|
||
"1 25 0.0 0.0 1.05979 1.060117\n",
|
||
"2 35 0.0 0.0 1.05404 1.053941\n",
|
||
"3 40 0.0 0.0 1.05103 1.050822\n",
|
||
"4 45 0.0 0.0 1.04794 1.047683"
|
||
]
|
||
},
|
||
"execution_count": 25,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"pd.concat(\n",
|
||
" [\n",
|
||
" density_train,\n",
|
||
" density_y_train,\n",
|
||
" pd.Series(\n",
|
||
" models[best_model][\"train_preds\"],\n",
|
||
" index=density_y_train.index,\n",
|
||
" name=\"DensityPred\",\n",
|
||
" ),\n",
|
||
" ],\n",
|
||
" axis=1,\n",
|
||
").head(5)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"Вывод для тестовой выборки"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 26,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>T</th>\n",
|
||
" <th>Al2O3</th>\n",
|
||
" <th>TiO2</th>\n",
|
||
" <th>Density</th>\n",
|
||
" <th>DensityPred</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>30</td>\n",
|
||
" <td>0.00</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1.05696</td>\n",
|
||
" <td>1.057040</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>55</td>\n",
|
||
" <td>0.00</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1.04158</td>\n",
|
||
" <td>1.041341</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>25</td>\n",
|
||
" <td>0.05</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1.08438</td>\n",
|
||
" <td>1.084063</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>30</td>\n",
|
||
" <td>0.05</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1.08112</td>\n",
|
||
" <td>1.080764</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>35</td>\n",
|
||
" <td>0.05</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1.07781</td>\n",
|
||
" <td>1.077444</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" T Al2O3 TiO2 Density DensityPred\n",
|
||
"0 30 0.00 0.0 1.05696 1.057040\n",
|
||
"1 55 0.00 0.0 1.04158 1.041341\n",
|
||
"2 25 0.05 0.0 1.08438 1.084063\n",
|
||
"3 30 0.05 0.0 1.08112 1.080764\n",
|
||
"4 35 0.05 0.0 1.07781 1.077444"
|
||
]
|
||
},
|
||
"execution_count": 26,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"pd.concat(\n",
|
||
" [\n",
|
||
" density_test,\n",
|
||
" density_y_test,\n",
|
||
" pd.Series(\n",
|
||
" models[best_model][\"preds\"],\n",
|
||
" index=density_y_test.index,\n",
|
||
" name=\"DensityPred\",\n",
|
||
" ),\n",
|
||
" ],\n",
|
||
" axis=1,\n",
|
||
").head(5)"
|
||
]
|
||
}
|
||
],
|
||
"metadata": {
|
||
"kernelspec": {
|
||
"display_name": ".venv",
|
||
"language": "python",
|
||
"name": "python3"
|
||
},
|
||
"language_info": {
|
||
"codemirror_mode": {
|
||
"name": "ipython",
|
||
"version": 3
|
||
},
|
||
"file_extension": ".py",
|
||
"mimetype": "text/x-python",
|
||
"name": "python",
|
||
"nbconvert_exporter": "python",
|
||
"pygments_lexer": "ipython3",
|
||
"version": "3.12.7"
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 2
|
||
}
|