2887 lines
258 KiB
Plaintext
2887 lines
258 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"# Лабораторная работа 4\n",
|
||
"\n",
|
||
"Датасет - **Цены на бриллианты**\thttps://www.kaggle.com/datasets/nancyalaswad90/diamonds-prices\n",
|
||
"\n",
|
||
"1. **carat**: Вес бриллианта в каратах\n",
|
||
"2. **cut**: Качество огранки.\n",
|
||
"3. **color**: Цвет бриллианта\n",
|
||
"4. **clarity**: Чистота бриллианта\n",
|
||
"5. **depth**: Процент глубины бриллианта\n",
|
||
"6. **table**: Процент ширины бриллианта\n",
|
||
"7. **price**: Цена бриллианта в долларах США\n",
|
||
"8. **x**: Длина бриллианта в миллиметрах\n",
|
||
"9. **y**: Ширина бриллианта в миллиметрах\n",
|
||
"10. **z**: Глубина бриллианта в миллиметрах"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"**Бизнес-цели**: \n",
|
||
"1. Прогнозирование цены бриллиантов на основании характеристик.\n",
|
||
"2. Анализ частотности и сочетания характеристик бриллиантов, которые пользуются наибольшим спросом, чтобы лучше планировать запасы. "
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"#### Загрузка набора данных"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 24,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Среднее значение поля 'карат': 0.7979346717831785\n"
|
||
]
|
||
},
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>carat</th>\n",
|
||
" <th>cut</th>\n",
|
||
" <th>color</th>\n",
|
||
" <th>clarity</th>\n",
|
||
" <th>depth</th>\n",
|
||
" <th>table</th>\n",
|
||
" <th>price</th>\n",
|
||
" <th>x</th>\n",
|
||
" <th>y</th>\n",
|
||
" <th>z</th>\n",
|
||
" <th>above_average_carat</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>id</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.23</td>\n",
|
||
" <td>Ideal</td>\n",
|
||
" <td>E</td>\n",
|
||
" <td>SI2</td>\n",
|
||
" <td>61.5</td>\n",
|
||
" <td>55.0</td>\n",
|
||
" <td>326</td>\n",
|
||
" <td>3.95</td>\n",
|
||
" <td>3.98</td>\n",
|
||
" <td>2.43</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>0.21</td>\n",
|
||
" <td>Premium</td>\n",
|
||
" <td>E</td>\n",
|
||
" <td>SI1</td>\n",
|
||
" <td>59.8</td>\n",
|
||
" <td>61.0</td>\n",
|
||
" <td>326</td>\n",
|
||
" <td>3.89</td>\n",
|
||
" <td>3.84</td>\n",
|
||
" <td>2.31</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>0.23</td>\n",
|
||
" <td>Good</td>\n",
|
||
" <td>E</td>\n",
|
||
" <td>VS1</td>\n",
|
||
" <td>56.9</td>\n",
|
||
" <td>65.0</td>\n",
|
||
" <td>327</td>\n",
|
||
" <td>4.05</td>\n",
|
||
" <td>4.07</td>\n",
|
||
" <td>2.31</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>0.29</td>\n",
|
||
" <td>Premium</td>\n",
|
||
" <td>I</td>\n",
|
||
" <td>VS2</td>\n",
|
||
" <td>62.4</td>\n",
|
||
" <td>58.0</td>\n",
|
||
" <td>334</td>\n",
|
||
" <td>4.20</td>\n",
|
||
" <td>4.23</td>\n",
|
||
" <td>2.63</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>5</th>\n",
|
||
" <td>0.31</td>\n",
|
||
" <td>Good</td>\n",
|
||
" <td>J</td>\n",
|
||
" <td>SI2</td>\n",
|
||
" <td>63.3</td>\n",
|
||
" <td>58.0</td>\n",
|
||
" <td>335</td>\n",
|
||
" <td>4.34</td>\n",
|
||
" <td>4.35</td>\n",
|
||
" <td>2.75</td>\n",
|
||
" <td>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",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>53939</th>\n",
|
||
" <td>0.86</td>\n",
|
||
" <td>Premium</td>\n",
|
||
" <td>H</td>\n",
|
||
" <td>SI2</td>\n",
|
||
" <td>61.0</td>\n",
|
||
" <td>58.0</td>\n",
|
||
" <td>2757</td>\n",
|
||
" <td>6.15</td>\n",
|
||
" <td>6.12</td>\n",
|
||
" <td>3.74</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>53940</th>\n",
|
||
" <td>0.75</td>\n",
|
||
" <td>Ideal</td>\n",
|
||
" <td>D</td>\n",
|
||
" <td>SI2</td>\n",
|
||
" <td>62.2</td>\n",
|
||
" <td>55.0</td>\n",
|
||
" <td>2757</td>\n",
|
||
" <td>5.83</td>\n",
|
||
" <td>5.87</td>\n",
|
||
" <td>3.64</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>53941</th>\n",
|
||
" <td>0.71</td>\n",
|
||
" <td>Premium</td>\n",
|
||
" <td>E</td>\n",
|
||
" <td>SI1</td>\n",
|
||
" <td>60.5</td>\n",
|
||
" <td>55.0</td>\n",
|
||
" <td>2756</td>\n",
|
||
" <td>5.79</td>\n",
|
||
" <td>5.74</td>\n",
|
||
" <td>3.49</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>53942</th>\n",
|
||
" <td>0.71</td>\n",
|
||
" <td>Premium</td>\n",
|
||
" <td>F</td>\n",
|
||
" <td>SI1</td>\n",
|
||
" <td>59.8</td>\n",
|
||
" <td>62.0</td>\n",
|
||
" <td>2756</td>\n",
|
||
" <td>5.74</td>\n",
|
||
" <td>5.73</td>\n",
|
||
" <td>3.43</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>53943</th>\n",
|
||
" <td>0.70</td>\n",
|
||
" <td>Very Good</td>\n",
|
||
" <td>E</td>\n",
|
||
" <td>VS2</td>\n",
|
||
" <td>60.5</td>\n",
|
||
" <td>59.0</td>\n",
|
||
" <td>2757</td>\n",
|
||
" <td>5.71</td>\n",
|
||
" <td>5.76</td>\n",
|
||
" <td>3.47</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>53943 rows × 11 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" carat cut color clarity depth table price x y z \\\n",
|
||
"id \n",
|
||
"1 0.23 Ideal E SI2 61.5 55.0 326 3.95 3.98 2.43 \n",
|
||
"2 0.21 Premium E SI1 59.8 61.0 326 3.89 3.84 2.31 \n",
|
||
"3 0.23 Good E VS1 56.9 65.0 327 4.05 4.07 2.31 \n",
|
||
"4 0.29 Premium I VS2 62.4 58.0 334 4.20 4.23 2.63 \n",
|
||
"5 0.31 Good J SI2 63.3 58.0 335 4.34 4.35 2.75 \n",
|
||
"... ... ... ... ... ... ... ... ... ... ... \n",
|
||
"53939 0.86 Premium H SI2 61.0 58.0 2757 6.15 6.12 3.74 \n",
|
||
"53940 0.75 Ideal D SI2 62.2 55.0 2757 5.83 5.87 3.64 \n",
|
||
"53941 0.71 Premium E SI1 60.5 55.0 2756 5.79 5.74 3.49 \n",
|
||
"53942 0.71 Premium F SI1 59.8 62.0 2756 5.74 5.73 3.43 \n",
|
||
"53943 0.70 Very Good E VS2 60.5 59.0 2757 5.71 5.76 3.47 \n",
|
||
"\n",
|
||
" above_average_carat \n",
|
||
"id \n",
|
||
"1 0 \n",
|
||
"2 0 \n",
|
||
"3 0 \n",
|
||
"4 0 \n",
|
||
"5 0 \n",
|
||
"... ... \n",
|
||
"53939 1 \n",
|
||
"53940 0 \n",
|
||
"53941 0 \n",
|
||
"53942 0 \n",
|
||
"53943 0 \n",
|
||
"\n",
|
||
"[53943 rows x 11 columns]"
|
||
]
|
||
},
|
||
"execution_count": 24,
|
||
"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",
|
||
"df = pd.read_csv(\"data/Diamonds.csv\", index_col=\"id\")\n",
|
||
"\n",
|
||
"random_state=42\n",
|
||
"#считаем средний вес бриллиантов\n",
|
||
"average_carat = df['carat'].mean()\n",
|
||
"\n",
|
||
"print(f\"Среднее значение поля 'карат': {average_carat}\")\n",
|
||
"\n",
|
||
"#новый столбец, в котором 1 значит больше ср знач, 0 меньше\n",
|
||
"average_carat = df['carat'].mean()\n",
|
||
"df['above_average_carat'] = (df['carat'] > average_carat).astype(int)\n",
|
||
"df"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"#### Разделение набора данных на обучающую и тестовые выборки (80/20) для задачи классификации\n",
|
||
"\n",
|
||
"Целевой признак -- Cut"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 34,
|
||
"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>carat</th>\n",
|
||
" <th>cut</th>\n",
|
||
" <th>color</th>\n",
|
||
" <th>clarity</th>\n",
|
||
" <th>depth</th>\n",
|
||
" <th>table</th>\n",
|
||
" <th>price</th>\n",
|
||
" <th>x</th>\n",
|
||
" <th>y</th>\n",
|
||
" <th>z</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>id</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>38836</th>\n",
|
||
" <td>0.40</td>\n",
|
||
" <td>Very Good</td>\n",
|
||
" <td>F</td>\n",
|
||
" <td>VVS2</td>\n",
|
||
" <td>62.0</td>\n",
|
||
" <td>56.0</td>\n",
|
||
" <td>1049</td>\n",
|
||
" <td>4.71</td>\n",
|
||
" <td>4.74</td>\n",
|
||
" <td>2.93</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>30260</th>\n",
|
||
" <td>0.40</td>\n",
|
||
" <td>Very Good</td>\n",
|
||
" <td>E</td>\n",
|
||
" <td>SI1</td>\n",
|
||
" <td>63.0</td>\n",
|
||
" <td>57.0</td>\n",
|
||
" <td>725</td>\n",
|
||
" <td>4.68</td>\n",
|
||
" <td>4.71</td>\n",
|
||
" <td>2.96</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>33169</th>\n",
|
||
" <td>0.36</td>\n",
|
||
" <td>Ideal</td>\n",
|
||
" <td>E</td>\n",
|
||
" <td>VS1</td>\n",
|
||
" <td>61.8</td>\n",
|
||
" <td>56.0</td>\n",
|
||
" <td>817</td>\n",
|
||
" <td>4.55</td>\n",
|
||
" <td>4.58</td>\n",
|
||
" <td>2.82</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1029</th>\n",
|
||
" <td>0.70</td>\n",
|
||
" <td>Very Good</td>\n",
|
||
" <td>E</td>\n",
|
||
" <td>VS1</td>\n",
|
||
" <td>58.4</td>\n",
|
||
" <td>59.0</td>\n",
|
||
" <td>2904</td>\n",
|
||
" <td>5.83</td>\n",
|
||
" <td>5.91</td>\n",
|
||
" <td>3.43</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>53809</th>\n",
|
||
" <td>0.81</td>\n",
|
||
" <td>Very Good</td>\n",
|
||
" <td>G</td>\n",
|
||
" <td>SI1</td>\n",
|
||
" <td>60.7</td>\n",
|
||
" <td>56.0</td>\n",
|
||
" <td>2733</td>\n",
|
||
" <td>6.06</td>\n",
|
||
" <td>6.09</td>\n",
|
||
" <td>3.69</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",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2937</th>\n",
|
||
" <td>0.77</td>\n",
|
||
" <td>Good</td>\n",
|
||
" <td>E</td>\n",
|
||
" <td>VS2</td>\n",
|
||
" <td>63.4</td>\n",
|
||
" <td>57.0</td>\n",
|
||
" <td>3291</td>\n",
|
||
" <td>5.80</td>\n",
|
||
" <td>5.84</td>\n",
|
||
" <td>3.69</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>7514</th>\n",
|
||
" <td>0.90</td>\n",
|
||
" <td>Good</td>\n",
|
||
" <td>F</td>\n",
|
||
" <td>SI1</td>\n",
|
||
" <td>61.8</td>\n",
|
||
" <td>63.0</td>\n",
|
||
" <td>4241</td>\n",
|
||
" <td>6.21</td>\n",
|
||
" <td>6.18</td>\n",
|
||
" <td>3.83</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>48344</th>\n",
|
||
" <td>0.56</td>\n",
|
||
" <td>Ideal</td>\n",
|
||
" <td>H</td>\n",
|
||
" <td>VVS1</td>\n",
|
||
" <td>62.1</td>\n",
|
||
" <td>53.8</td>\n",
|
||
" <td>1961</td>\n",
|
||
" <td>5.27</td>\n",
|
||
" <td>5.33</td>\n",
|
||
" <td>3.29</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3212</th>\n",
|
||
" <td>0.70</td>\n",
|
||
" <td>Premium</td>\n",
|
||
" <td>F</td>\n",
|
||
" <td>VVS1</td>\n",
|
||
" <td>61.8</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" <td>3348</td>\n",
|
||
" <td>5.67</td>\n",
|
||
" <td>5.63</td>\n",
|
||
" <td>3.49</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>35654</th>\n",
|
||
" <td>0.31</td>\n",
|
||
" <td>Very Good</td>\n",
|
||
" <td>G</td>\n",
|
||
" <td>VVS2</td>\n",
|
||
" <td>63.1</td>\n",
|
||
" <td>57.0</td>\n",
|
||
" <td>907</td>\n",
|
||
" <td>4.32</td>\n",
|
||
" <td>4.30</td>\n",
|
||
" <td>2.72</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>43154 rows × 10 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" carat cut color clarity depth table price x y z\n",
|
||
"id \n",
|
||
"38836 0.40 Very Good F VVS2 62.0 56.0 1049 4.71 4.74 2.93\n",
|
||
"30260 0.40 Very Good E SI1 63.0 57.0 725 4.68 4.71 2.96\n",
|
||
"33169 0.36 Ideal E VS1 61.8 56.0 817 4.55 4.58 2.82\n",
|
||
"1029 0.70 Very Good E VS1 58.4 59.0 2904 5.83 5.91 3.43\n",
|
||
"53809 0.81 Very Good G SI1 60.7 56.0 2733 6.06 6.09 3.69\n",
|
||
"... ... ... ... ... ... ... ... ... ... ...\n",
|
||
"2937 0.77 Good E VS2 63.4 57.0 3291 5.80 5.84 3.69\n",
|
||
"7514 0.90 Good F SI1 61.8 63.0 4241 6.21 6.18 3.83\n",
|
||
"48344 0.56 Ideal H VVS1 62.1 53.8 1961 5.27 5.33 3.29\n",
|
||
"3212 0.70 Premium F VVS1 61.8 60.0 3348 5.67 5.63 3.49\n",
|
||
"35654 0.31 Very Good G VVS2 63.1 57.0 907 4.32 4.30 2.72\n",
|
||
"\n",
|
||
"[43154 rows x 10 columns]"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"'y_train'"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"id\n",
|
||
"38836 0\n",
|
||
"30260 0\n",
|
||
"33169 0\n",
|
||
"1029 0\n",
|
||
"53809 1\n",
|
||
" ..\n",
|
||
"2937 0\n",
|
||
"7514 1\n",
|
||
"48344 0\n",
|
||
"3212 0\n",
|
||
"35654 0\n",
|
||
"Name: above_average_carat, Length: 43154, dtype: int64"
|
||
]
|
||
},
|
||
"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>carat</th>\n",
|
||
" <th>cut</th>\n",
|
||
" <th>color</th>\n",
|
||
" <th>clarity</th>\n",
|
||
" <th>depth</th>\n",
|
||
" <th>table</th>\n",
|
||
" <th>price</th>\n",
|
||
" <th>x</th>\n",
|
||
" <th>y</th>\n",
|
||
" <th>z</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>id</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>32452</th>\n",
|
||
" <td>0.39</td>\n",
|
||
" <td>Very Good</td>\n",
|
||
" <td>E</td>\n",
|
||
" <td>VS2</td>\n",
|
||
" <td>60.9</td>\n",
|
||
" <td>58.0</td>\n",
|
||
" <td>793</td>\n",
|
||
" <td>4.72</td>\n",
|
||
" <td>4.77</td>\n",
|
||
" <td>2.89</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2432</th>\n",
|
||
" <td>0.72</td>\n",
|
||
" <td>Very Good</td>\n",
|
||
" <td>E</td>\n",
|
||
" <td>SI1</td>\n",
|
||
" <td>63.3</td>\n",
|
||
" <td>56.0</td>\n",
|
||
" <td>3183</td>\n",
|
||
" <td>5.67</td>\n",
|
||
" <td>5.71</td>\n",
|
||
" <td>3.60</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>16456</th>\n",
|
||
" <td>1.21</td>\n",
|
||
" <td>Ideal</td>\n",
|
||
" <td>H</td>\n",
|
||
" <td>SI1</td>\n",
|
||
" <td>62.1</td>\n",
|
||
" <td>59.0</td>\n",
|
||
" <td>6573</td>\n",
|
||
" <td>6.81</td>\n",
|
||
" <td>6.75</td>\n",
|
||
" <td>4.21</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>46045</th>\n",
|
||
" <td>0.56</td>\n",
|
||
" <td>Ideal</td>\n",
|
||
" <td>D</td>\n",
|
||
" <td>SI1</td>\n",
|
||
" <td>62.5</td>\n",
|
||
" <td>56.0</td>\n",
|
||
" <td>1729</td>\n",
|
||
" <td>5.28</td>\n",
|
||
" <td>5.24</td>\n",
|
||
" <td>3.29</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>11115</th>\n",
|
||
" <td>1.00</td>\n",
|
||
" <td>Good</td>\n",
|
||
" <td>E</td>\n",
|
||
" <td>SI1</td>\n",
|
||
" <td>62.4</td>\n",
|
||
" <td>59.0</td>\n",
|
||
" <td>4936</td>\n",
|
||
" <td>6.35</td>\n",
|
||
" <td>6.40</td>\n",
|
||
" <td>3.98</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",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>40250</th>\n",
|
||
" <td>0.50</td>\n",
|
||
" <td>Premium</td>\n",
|
||
" <td>F</td>\n",
|
||
" <td>SI1</td>\n",
|
||
" <td>59.6</td>\n",
|
||
" <td>61.0</td>\n",
|
||
" <td>1125</td>\n",
|
||
" <td>5.15</td>\n",
|
||
" <td>5.12</td>\n",
|
||
" <td>3.06</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3308</th>\n",
|
||
" <td>0.73</td>\n",
|
||
" <td>Ideal</td>\n",
|
||
" <td>E</td>\n",
|
||
" <td>VS1</td>\n",
|
||
" <td>62.3</td>\n",
|
||
" <td>56.0</td>\n",
|
||
" <td>3370</td>\n",
|
||
" <td>5.75</td>\n",
|
||
" <td>5.80</td>\n",
|
||
" <td>3.60</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>7894</th>\n",
|
||
" <td>1.12</td>\n",
|
||
" <td>Very Good</td>\n",
|
||
" <td>I</td>\n",
|
||
" <td>SI1</td>\n",
|
||
" <td>60.6</td>\n",
|
||
" <td>60.0</td>\n",
|
||
" <td>4312</td>\n",
|
||
" <td>6.73</td>\n",
|
||
" <td>6.77</td>\n",
|
||
" <td>4.09</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>21368</th>\n",
|
||
" <td>0.36</td>\n",
|
||
" <td>Ideal</td>\n",
|
||
" <td>D</td>\n",
|
||
" <td>SI1</td>\n",
|
||
" <td>62.2</td>\n",
|
||
" <td>53.0</td>\n",
|
||
" <td>626</td>\n",
|
||
" <td>4.57</td>\n",
|
||
" <td>4.59</td>\n",
|
||
" <td>2.85</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>46144</th>\n",
|
||
" <td>0.50</td>\n",
|
||
" <td>Premium</td>\n",
|
||
" <td>E</td>\n",
|
||
" <td>VS2</td>\n",
|
||
" <td>61.3</td>\n",
|
||
" <td>59.0</td>\n",
|
||
" <td>1746</td>\n",
|
||
" <td>5.10</td>\n",
|
||
" <td>5.05</td>\n",
|
||
" <td>3.11</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>10789 rows × 10 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" carat cut color clarity depth table price x y z\n",
|
||
"id \n",
|
||
"32452 0.39 Very Good E VS2 60.9 58.0 793 4.72 4.77 2.89\n",
|
||
"2432 0.72 Very Good E SI1 63.3 56.0 3183 5.67 5.71 3.60\n",
|
||
"16456 1.21 Ideal H SI1 62.1 59.0 6573 6.81 6.75 4.21\n",
|
||
"46045 0.56 Ideal D SI1 62.5 56.0 1729 5.28 5.24 3.29\n",
|
||
"11115 1.00 Good E SI1 62.4 59.0 4936 6.35 6.40 3.98\n",
|
||
"... ... ... ... ... ... ... ... ... ... ...\n",
|
||
"40250 0.50 Premium F SI1 59.6 61.0 1125 5.15 5.12 3.06\n",
|
||
"3308 0.73 Ideal E VS1 62.3 56.0 3370 5.75 5.80 3.60\n",
|
||
"7894 1.12 Very Good I SI1 60.6 60.0 4312 6.73 6.77 4.09\n",
|
||
"21368 0.36 Ideal D SI1 62.2 53.0 626 4.57 4.59 2.85\n",
|
||
"46144 0.50 Premium E VS2 61.3 59.0 1746 5.10 5.05 3.11\n",
|
||
"\n",
|
||
"[10789 rows x 10 columns]"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"'y_test'"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"id\n",
|
||
"32452 0\n",
|
||
"2432 0\n",
|
||
"16456 1\n",
|
||
"46045 0\n",
|
||
"11115 1\n",
|
||
" ..\n",
|
||
"40250 0\n",
|
||
"3308 0\n",
|
||
"7894 1\n",
|
||
"21368 0\n",
|
||
"46144 0\n",
|
||
"Name: above_average_carat, Length: 10789, dtype: int64"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"from typing import Tuple\n",
|
||
"import pandas as pd\n",
|
||
"from pandas import DataFrame\n",
|
||
"from sklearn.model_selection import train_test_split\n",
|
||
"\n",
|
||
"def split_stratified_into_train_val_test(\n",
|
||
" df_input,\n",
|
||
" stratify_colname=\"y\",\n",
|
||
" frac_train=0.6,\n",
|
||
" frac_val=0.15,\n",
|
||
" frac_test=0.25,\n",
|
||
" random_state=None,\n",
|
||
") -> Tuple[DataFrame, DataFrame, DataFrame, DataFrame, DataFrame, DataFrame]:\n",
|
||
" \"\"\"\n",
|
||
" Splits a Pandas dataframe into three subsets (train, val, and test)\n",
|
||
" following fractional ratios provided by the user, where each subset is\n",
|
||
" stratified by the values in a specific column (that is, each subset has\n",
|
||
" the same relative frequency of the values in the column). It performs this\n",
|
||
" splitting by running train_test_split() twice.\n",
|
||
" Parameters\n",
|
||
" ----------\n",
|
||
" df_input : Pandas dataframe\n",
|
||
" Input dataframe to be split.\n",
|
||
" stratify_colname : str\n",
|
||
" The name of the column that will be used for stratification. Usually\n",
|
||
" this column would be for the label.\n",
|
||
" frac_train : float\n",
|
||
" frac_val : float\n",
|
||
" frac_test : float\n",
|
||
" The ratios with which the dataframe will be split into train, val, and\n",
|
||
" test data. The values should be expressed as float fractions and should\n",
|
||
" sum to 1.0.\n",
|
||
" random_state : int, None, or RandomStateInstance\n",
|
||
" Value to be passed to train_test_split().\n",
|
||
" Returns\n",
|
||
" -------\n",
|
||
" df_train, df_val, df_test :\n",
|
||
" Dataframes containing the three splits.\n",
|
||
" \"\"\"\n",
|
||
" if frac_train + frac_val + frac_test != 1.0:\n",
|
||
" raise ValueError(\n",
|
||
" \"fractions %f, %f, %f do not add up to 1.0\"\n",
|
||
" % (frac_train, frac_val, frac_test)\n",
|
||
" )\n",
|
||
" if stratify_colname not in df_input.columns:\n",
|
||
" raise ValueError(\"%s is not a column in the dataframe\" % (stratify_colname))\n",
|
||
" X = df_input # содержит все столбцы.\n",
|
||
" y = df_input[\n",
|
||
" [stratify_colname]\n",
|
||
" ] # содержит столбец для стратификации.\n",
|
||
" X = df.drop(['above_average_carat'], axis=1)\n",
|
||
" y = df['above_average_carat']\n",
|
||
" # Первичное разбиение на обучающую и временную выборки.\n",
|
||
" df_train, df_temp, y_train, y_temp = train_test_split(\n",
|
||
" X, y, stratify=y, test_size=(1.0 - frac_train), random_state=random_state\n",
|
||
" )\n",
|
||
" if frac_val <= 0:\n",
|
||
" assert len(df_input) == len(df_train) + len(df_temp)\n",
|
||
" return df_train, pd.DataFrame(), df_temp, y_train, pd.DataFrame(), y_temp\n",
|
||
" # Вторичное разбиение на валидационную и тестовую выборки.\n",
|
||
" relative_frac_test = frac_test / (frac_val + frac_test)\n",
|
||
" df_val, df_test, y_val, y_test = train_test_split(\n",
|
||
" df_temp,\n",
|
||
" y_temp,\n",
|
||
" stratify=y_temp,\n",
|
||
" test_size=relative_frac_test,\n",
|
||
" random_state=random_state,\n",
|
||
" )\n",
|
||
" assert len(df_input) == len(df_train) + len(df_val) + len(df_test)\n",
|
||
" return df_train, df_val, df_test, y_train, y_val, y_test\n",
|
||
"\n",
|
||
"#разбиение на 80% обучающей выборки и 20% тестовой выборки\n",
|
||
"#Стратификация выполняется по столбцу \"above_average_carat\"\n",
|
||
"X_train, X_val, X_test, y_train, y_val, y_test = split_stratified_into_train_val_test(\n",
|
||
" df, stratify_colname=\"above_average_carat\", 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",
|
||
"pipeline_end -- основной конвейер предобработки данных и конструирования признаков"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 40,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"import numpy as np\n",
|
||
"from sklearn.base import BaseEstimator, TransformerMixin\n",
|
||
"from sklearn.compose import ColumnTransformer\n",
|
||
"from sklearn.discriminant_analysis import StandardScaler\n",
|
||
"from sklearn.impute import SimpleImputer\n",
|
||
"from sklearn.pipeline import Pipeline\n",
|
||
"from sklearn.preprocessing import OneHotEncoder\n",
|
||
"\n",
|
||
"class DaimondFeatures(BaseEstimator, TransformerMixin):\n",
|
||
" def __init__(self):\n",
|
||
" pass\n",
|
||
" def fit(self, X, y=None):\n",
|
||
" return self\n",
|
||
" #добавляем новый столбец \"Length_to_Width_Ratio\" - отношение длины к ширине (столбцы x и y)\n",
|
||
" def transform(self, X, y=None):\n",
|
||
" X[\"Length_to_Width_Ratio\"] = X[\"x\"] / X[\"y\"]\n",
|
||
" return X\n",
|
||
" #добавляем имя нового столбца к входным именам\n",
|
||
" def get_feature_names_out(self, features_in):\n",
|
||
" return np.append(features_in, [\"Length_to_Width_Ratio\"], axis=0)\n",
|
||
" \n",
|
||
"#Список столбцов, которые будут удалены из данных\n",
|
||
"columns_to_drop = []\n",
|
||
"#Список числовых столбцов\n",
|
||
"num_columns = [\"carat\", \"depth\", \"table\", \"x\", \"y\", \"z\"]\n",
|
||
"#Список категориальных столбцов\n",
|
||
"cat_columns = [\"cut\", \"color\", \"clarity\"]\n",
|
||
"\n",
|
||
"#Предобработка числовых столбцов\n",
|
||
"#Используется для заполнения пропущенных значений в числовых столбцах медианой\n",
|
||
"num_imputer = SimpleImputer(strategy=\"median\")\n",
|
||
"#Стандартизирует числовые столбцы, приводя их к нулевому среднему и единичному стандартному отклонению\n",
|
||
"num_scaler = StandardScaler()\n",
|
||
"#Создается конвейер для последовательного применения SimpleImputer и StandardScaler\n",
|
||
"preprocessing_num = Pipeline(\n",
|
||
" [\n",
|
||
" (\"imputer\", num_imputer),\n",
|
||
" (\"scaler\", num_scaler),\n",
|
||
" ]\n",
|
||
")\n",
|
||
"#Предобработка категориальных столбцов\n",
|
||
"#Заполняет пропущенные значения в категориальных столбцов значением \"unknown\"\n",
|
||
"cat_imputer = SimpleImputer(strategy=\"constant\", fill_value=\"unknown\")\n",
|
||
"#Кодирует категориальные переменные с помощью one-hot кодирования\n",
|
||
"#handle_unknown=ignore позволяет игнорировать неизвестные категории\n",
|
||
"#drop=first исключает первую категорию для предотвращения мультиколлинеарности\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",
|
||
"#Объединение этапов предобработки\n",
|
||
"#ColumnTransformer Позволяет применять разные преобразования к различным колонкам\n",
|
||
"features_preprocessing = ColumnTransformer(\n",
|
||
" verbose_feature_names_out=False,\n",
|
||
" #числовые и категориальные признаки обрабатываются разными конвейерами\n",
|
||
" transformers=[\n",
|
||
" (\"prepocessing_num\", preprocessing_num, num_columns),\n",
|
||
" (\"prepocessing_cat\", preprocessing_cat, cat_columns),\n",
|
||
" ],\n",
|
||
" #все остальные столбцы, которые не указаны в трансформерах, будут переданы без изменений\n",
|
||
" remainder=\"passthrough\"\n",
|
||
")\n",
|
||
"#конструирование признаков\n",
|
||
"#создается еще один ColumnTransformer, который применяет класс DaimondFeatures к столбцам x и y \n",
|
||
"#Все остальные столбцы будут переданы без изменений\n",
|
||
"features_engineering = ColumnTransformer(\n",
|
||
" verbose_feature_names_out=False,\n",
|
||
" transformers=[\n",
|
||
" (\"add_features\", DaimondFeatures(), [\"x\", \"y\"]),\n",
|
||
" ],\n",
|
||
" remainder=\"passthrough\",\n",
|
||
")\n",
|
||
"\n",
|
||
"#удаление столбцов, в данном случае ничего не будет удалено\n",
|
||
"drop_columns = ColumnTransformer(\n",
|
||
" verbose_feature_names_out=False,\n",
|
||
" transformers=[\n",
|
||
" (\"drop_columns\", \"drop\", columns_to_drop),\n",
|
||
" ],\n",
|
||
" remainder=\"passthrough\",\n",
|
||
")\n",
|
||
"\n",
|
||
"#Постобработка столбцов\n",
|
||
"#Создается еще один ColumnTransformer который обрабатывает столбец Cabin_type с помощью prepocessing_cat\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",
|
||
"#Финальный конвейер\n",
|
||
"pipeline_end = Pipeline(\n",
|
||
" [\n",
|
||
" (\"features_preprocessing\", features_preprocessing),\n",
|
||
" (\"features_engineering\", features_engineering),\n",
|
||
" (\"drop_columns\", drop_columns),\n",
|
||
" ]\n",
|
||
")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"#### Демонстрация работы конвейера для предобработки данных при классификации"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 41,
|
||
"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>x</th>\n",
|
||
" <th>y</th>\n",
|
||
" <th>Length_to_Width_Ratio</th>\n",
|
||
" <th>carat</th>\n",
|
||
" <th>depth</th>\n",
|
||
" <th>table</th>\n",
|
||
" <th>z</th>\n",
|
||
" <th>cut_Good</th>\n",
|
||
" <th>cut_Ideal</th>\n",
|
||
" <th>cut_Premium</th>\n",
|
||
" <th>...</th>\n",
|
||
" <th>color_I</th>\n",
|
||
" <th>color_J</th>\n",
|
||
" <th>clarity_IF</th>\n",
|
||
" <th>clarity_SI1</th>\n",
|
||
" <th>clarity_SI2</th>\n",
|
||
" <th>clarity_VS1</th>\n",
|
||
" <th>clarity_VS2</th>\n",
|
||
" <th>clarity_VVS1</th>\n",
|
||
" <th>clarity_VVS2</th>\n",
|
||
" <th>price</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>id</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",
|
||
" <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>38836</th>\n",
|
||
" <td>-0.907744</td>\n",
|
||
" <td>-0.863476</td>\n",
|
||
" <td>1.051267</td>\n",
|
||
" <td>-0.837490</td>\n",
|
||
" <td>0.176170</td>\n",
|
||
" <td>-0.648004</td>\n",
|
||
" <td>-0.857040</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>...</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.0</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>1049</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>30260</th>\n",
|
||
" <td>-0.934483</td>\n",
|
||
" <td>-0.889579</td>\n",
|
||
" <td>1.050478</td>\n",
|
||
" <td>-0.837490</td>\n",
|
||
" <td>0.876071</td>\n",
|
||
" <td>-0.201125</td>\n",
|
||
" <td>-0.814688</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>...</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.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>725</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>33169</th>\n",
|
||
" <td>-1.050350</td>\n",
|
||
" <td>-1.002691</td>\n",
|
||
" <td>1.047532</td>\n",
|
||
" <td>-0.921885</td>\n",
|
||
" <td>0.036190</td>\n",
|
||
" <td>-0.648004</td>\n",
|
||
" <td>-1.012333</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>...</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.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>817</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1029</th>\n",
|
||
" <td>0.090496</td>\n",
|
||
" <td>0.154530</td>\n",
|
||
" <td>0.585622</td>\n",
|
||
" <td>-0.204531</td>\n",
|
||
" <td>-2.343471</td>\n",
|
||
" <td>0.692631</td>\n",
|
||
" <td>-0.151165</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>...</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.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>2904</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>53809</th>\n",
|
||
" <td>0.295492</td>\n",
|
||
" <td>0.311147</td>\n",
|
||
" <td>0.949688</td>\n",
|
||
" <td>0.027554</td>\n",
|
||
" <td>-0.733700</td>\n",
|
||
" <td>-0.648004</td>\n",
|
||
" <td>0.215890</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>...</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.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>2733</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",
|
||
" <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>2937</th>\n",
|
||
" <td>0.063758</td>\n",
|
||
" <td>0.093624</td>\n",
|
||
" <td>0.680999</td>\n",
|
||
" <td>-0.056841</td>\n",
|
||
" <td>1.156031</td>\n",
|
||
" <td>-0.201125</td>\n",
|
||
" <td>0.215890</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>...</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.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>3291</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>7514</th>\n",
|
||
" <td>0.429185</td>\n",
|
||
" <td>0.389455</td>\n",
|
||
" <td>1.102015</td>\n",
|
||
" <td>0.217442</td>\n",
|
||
" <td>0.036190</td>\n",
|
||
" <td>2.480145</td>\n",
|
||
" <td>0.413535</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>...</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.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>4241</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>48344</th>\n",
|
||
" <td>-0.408624</td>\n",
|
||
" <td>-0.350123</td>\n",
|
||
" <td>1.167088</td>\n",
|
||
" <td>-0.499912</td>\n",
|
||
" <td>0.246160</td>\n",
|
||
" <td>-1.631136</td>\n",
|
||
" <td>-0.348810</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>...</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.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1961</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3212</th>\n",
|
||
" <td>-0.052109</td>\n",
|
||
" <td>-0.089095</td>\n",
|
||
" <td>0.584874</td>\n",
|
||
" <td>-0.204531</td>\n",
|
||
" <td>0.036190</td>\n",
|
||
" <td>1.139510</td>\n",
|
||
" <td>-0.066460</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>...</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.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>3348</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>35654</th>\n",
|
||
" <td>-1.255346</td>\n",
|
||
" <td>-1.246316</td>\n",
|
||
" <td>1.007245</td>\n",
|
||
" <td>-1.027378</td>\n",
|
||
" <td>0.946061</td>\n",
|
||
" <td>-0.201125</td>\n",
|
||
" <td>-1.153508</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>...</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.0</td>\n",
|
||
" <td>1.0</td>\n",
|
||
" <td>907</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>43154 rows × 25 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" x y Length_to_Width_Ratio carat depth \\\n",
|
||
"id \n",
|
||
"38836 -0.907744 -0.863476 1.051267 -0.837490 0.176170 \n",
|
||
"30260 -0.934483 -0.889579 1.050478 -0.837490 0.876071 \n",
|
||
"33169 -1.050350 -1.002691 1.047532 -0.921885 0.036190 \n",
|
||
"1029 0.090496 0.154530 0.585622 -0.204531 -2.343471 \n",
|
||
"53809 0.295492 0.311147 0.949688 0.027554 -0.733700 \n",
|
||
"... ... ... ... ... ... \n",
|
||
"2937 0.063758 0.093624 0.680999 -0.056841 1.156031 \n",
|
||
"7514 0.429185 0.389455 1.102015 0.217442 0.036190 \n",
|
||
"48344 -0.408624 -0.350123 1.167088 -0.499912 0.246160 \n",
|
||
"3212 -0.052109 -0.089095 0.584874 -0.204531 0.036190 \n",
|
||
"35654 -1.255346 -1.246316 1.007245 -1.027378 0.946061 \n",
|
||
"\n",
|
||
" table z cut_Good cut_Ideal cut_Premium ... color_I \\\n",
|
||
"id ... \n",
|
||
"38836 -0.648004 -0.857040 0.0 0.0 0.0 ... 0.0 \n",
|
||
"30260 -0.201125 -0.814688 0.0 0.0 0.0 ... 0.0 \n",
|
||
"33169 -0.648004 -1.012333 0.0 1.0 0.0 ... 0.0 \n",
|
||
"1029 0.692631 -0.151165 0.0 0.0 0.0 ... 0.0 \n",
|
||
"53809 -0.648004 0.215890 0.0 0.0 0.0 ... 0.0 \n",
|
||
"... ... ... ... ... ... ... ... \n",
|
||
"2937 -0.201125 0.215890 1.0 0.0 0.0 ... 0.0 \n",
|
||
"7514 2.480145 0.413535 1.0 0.0 0.0 ... 0.0 \n",
|
||
"48344 -1.631136 -0.348810 0.0 1.0 0.0 ... 0.0 \n",
|
||
"3212 1.139510 -0.066460 0.0 0.0 1.0 ... 0.0 \n",
|
||
"35654 -0.201125 -1.153508 0.0 0.0 0.0 ... 0.0 \n",
|
||
"\n",
|
||
" color_J clarity_IF clarity_SI1 clarity_SI2 clarity_VS1 \\\n",
|
||
"id \n",
|
||
"38836 0.0 0.0 0.0 0.0 0.0 \n",
|
||
"30260 0.0 0.0 1.0 0.0 0.0 \n",
|
||
"33169 0.0 0.0 0.0 0.0 1.0 \n",
|
||
"1029 0.0 0.0 0.0 0.0 1.0 \n",
|
||
"53809 0.0 0.0 1.0 0.0 0.0 \n",
|
||
"... ... ... ... ... ... \n",
|
||
"2937 0.0 0.0 0.0 0.0 0.0 \n",
|
||
"7514 0.0 0.0 1.0 0.0 0.0 \n",
|
||
"48344 0.0 0.0 0.0 0.0 0.0 \n",
|
||
"3212 0.0 0.0 0.0 0.0 0.0 \n",
|
||
"35654 0.0 0.0 0.0 0.0 0.0 \n",
|
||
"\n",
|
||
" clarity_VS2 clarity_VVS1 clarity_VVS2 price \n",
|
||
"id \n",
|
||
"38836 0.0 0.0 1.0 1049 \n",
|
||
"30260 0.0 0.0 0.0 725 \n",
|
||
"33169 0.0 0.0 0.0 817 \n",
|
||
"1029 0.0 0.0 0.0 2904 \n",
|
||
"53809 0.0 0.0 0.0 2733 \n",
|
||
"... ... ... ... ... \n",
|
||
"2937 1.0 0.0 0.0 3291 \n",
|
||
"7514 0.0 0.0 0.0 4241 \n",
|
||
"48344 0.0 1.0 0.0 1961 \n",
|
||
"3212 0.0 1.0 0.0 3348 \n",
|
||
"35654 0.0 0.0 1.0 907 \n",
|
||
"\n",
|
||
"[43154 rows x 25 columns]"
|
||
]
|
||
},
|
||
"execution_count": 41,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"#Обучает все трансформеры в конвейере на данных обучающей выборки\n",
|
||
"preprocessing_result = pipeline_end.fit_transform(X_train)\n",
|
||
"preprocessed_df = pd.DataFrame(\n",
|
||
" preprocessing_result,\n",
|
||
" #возвращает имена всех столбцов, которые были созданы в результате всех этапов предобработки в конвейере\n",
|
||
" columns=pipeline_end.get_feature_names_out(),\n",
|
||
")\n",
|
||
"\n",
|
||
"preprocessed_df"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"#### Формирование набора моделей для классификации"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 42,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"from sklearn import ensemble, linear_model, naive_bayes, neighbors, neural_network, tree\n",
|
||
"\n",
|
||
"#классификационные модели\n",
|
||
"class_models = {\n",
|
||
" #Логистическая регрессия\n",
|
||
" # от 0 до 1, принадлежит ли объект к классу\n",
|
||
" \"logistic\": {\"model\": linear_model.LogisticRegression()},\n",
|
||
" #гребневая регрессия\n",
|
||
" #Логическая, но с регуляризацией L2 (модель не так точно запоминает данные) и сбалансированными весами классов\n",
|
||
" \"ridge\": {\"model\": linear_model.LogisticRegression(penalty=\"l2\", class_weight=\"balanced\")},\n",
|
||
" #дерево решений с максимальной глубиной 7\n",
|
||
" #Деления данных на условия с помощью построения дерева\n",
|
||
" \"decision_tree\": {\n",
|
||
" \"model\": tree.DecisionTreeClassifier(max_depth=7, random_state=random_state)\n",
|
||
" },\n",
|
||
" #K-ближайших соседей с количеством соседей, равным 7\n",
|
||
" #Определяет ближайших объектов и находит и класс\n",
|
||
" \"knn\": {\"model\": neighbors.KNeighborsClassifier(n_neighbors=7)},\n",
|
||
" #Наивный байесовский классификатор - Вероятности для классификации\n",
|
||
" \"naive_bayes\": {\"model\": naive_bayes.GaussianNB()},\n",
|
||
" #Градиентный бустинг с 210 деревьями\n",
|
||
" #Постепенно улучшает предсказания с помощью слабых моделей\n",
|
||
" \"gradient_boosting\": {\n",
|
||
" \"model\": ensemble.GradientBoostingClassifier(n_estimators=210)\n",
|
||
" },\n",
|
||
" #Случайный лес с максимальной глубиной 11 и сбалансированными весами классов\n",
|
||
" \"random_forest\": {\n",
|
||
" \"model\": ensemble.RandomForestClassifier(\n",
|
||
" max_depth=11, class_weight=\"balanced\", random_state=random_state\n",
|
||
" )\n",
|
||
" },\n",
|
||
" #Многослойный персептрон (нейронная сеть)с одним скрытым слоем\n",
|
||
" \"mlp\": {\n",
|
||
" \"model\": neural_network.MLPClassifier(\n",
|
||
" #содержажит 7 нейронов\n",
|
||
" hidden_layer_sizes=(7,),\n",
|
||
" #максимальное количеством итераций 500\n",
|
||
" max_iter=500,\n",
|
||
" #включение ранней остановки для предотвращения переобучения\n",
|
||
" early_stopping=True,\n",
|
||
" random_state=random_state,\n",
|
||
" )\n",
|
||
" },\n",
|
||
"}"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"#### Обучение моделей на обучающем наборе данных и оценка на тестовом"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 43,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Model: logistic\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"d:\\3 kurs\\МИИ\\1 лаб\\mai-main\\.venv\\Lib\\site-packages\\sklearn\\linear_model\\_logistic.py:469: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
|
||
"STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
|
||
"\n",
|
||
"Increase the number of iterations (max_iter) or scale the data as shown in:\n",
|
||
" https://scikit-learn.org/stable/modules/preprocessing.html\n",
|
||
"Please also refer to the documentation for alternative solver options:\n",
|
||
" https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
|
||
" n_iter_i = _check_optimize_result(\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Model: ridge\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stderr",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"d:\\3 kurs\\МИИ\\1 лаб\\mai-main\\.venv\\Lib\\site-packages\\sklearn\\linear_model\\_logistic.py:469: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
|
||
"STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
|
||
"\n",
|
||
"Increase the number of iterations (max_iter) or scale the data as shown in:\n",
|
||
" https://scikit-learn.org/stable/modules/preprocessing.html\n",
|
||
"Please also refer to the documentation for alternative solver options:\n",
|
||
" https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
|
||
" n_iter_i = _check_optimize_result(\n"
|
||
]
|
||
},
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"Model: decision_tree\n",
|
||
"Model: knn\n",
|
||
"Model: naive_bayes\n",
|
||
"Model: gradient_boosting\n",
|
||
"Model: random_forest\n",
|
||
"Model: mlp\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"import numpy as np\n",
|
||
"from sklearn import metrics\n",
|
||
"\n",
|
||
"#проходим по всем моделям\n",
|
||
"for model_name in class_models.keys():\n",
|
||
" #выводим названия\n",
|
||
" print(f\"Model: {model_name}\")\n",
|
||
" model = class_models[model_name][\"model\"]\n",
|
||
"\n",
|
||
" #Получение модели и создание конвейера\n",
|
||
" model_pipeline = Pipeline([(\"pipeline\", pipeline_end), (\"model\", model)])\n",
|
||
" model_pipeline = model_pipeline.fit(X_train, y_train.values.ravel())\n",
|
||
"\n",
|
||
" #Предсказания на обучающей и тестовой выборке\n",
|
||
" y_train_predict = model_pipeline.predict(X_train)\n",
|
||
" y_test_probs = model_pipeline.predict_proba(X_test)[:, 1]\n",
|
||
" y_test_predict = np.where(y_test_probs > 0.5, 1, 0)\n",
|
||
"\n",
|
||
" #Сохранение результатов в словаре моделей\n",
|
||
" class_models[model_name][\"pipeline\"] = model_pipeline\n",
|
||
" class_models[model_name][\"probs\"] = y_test_probs\n",
|
||
" class_models[model_name][\"preds\"] = y_test_predict\n",
|
||
"\n",
|
||
" #Оценка производительности модели\n",
|
||
" #точность\n",
|
||
" class_models[model_name][\"Precision_train\"] = metrics.precision_score(\n",
|
||
" y_train, y_train_predict\n",
|
||
" )\n",
|
||
" class_models[model_name][\"Precision_test\"] = metrics.precision_score(\n",
|
||
" y_test, y_test_predict\n",
|
||
" )\n",
|
||
" #полнота\n",
|
||
" class_models[model_name][\"Recall_train\"] = metrics.recall_score(\n",
|
||
" y_train, y_train_predict\n",
|
||
" )\n",
|
||
" class_models[model_name][\"Recall_test\"] = metrics.recall_score(\n",
|
||
" y_test, y_test_predict\n",
|
||
" )\n",
|
||
" #аккуратность (верность) - Доля правильных предсказаний среди всех\n",
|
||
" class_models[model_name][\"Accuracy_train\"] = metrics.accuracy_score(\n",
|
||
" y_train, y_train_predict\n",
|
||
" )\n",
|
||
" class_models[model_name][\"Accuracy_test\"] = metrics.accuracy_score(\n",
|
||
" y_test, y_test_predict\n",
|
||
" )\n",
|
||
" #Площадь под кривой ROC, которая показывает качество классификации\n",
|
||
" class_models[model_name][\"ROC_AUC_test\"] = metrics.roc_auc_score(\n",
|
||
" y_test, y_test_probs\n",
|
||
" )\n",
|
||
" #Гармоническое среднее между точностью и полнотой\n",
|
||
" class_models[model_name][\"F1_train\"] = metrics.f1_score(y_train, y_train_predict)\n",
|
||
" class_models[model_name][\"F1_test\"] = metrics.f1_score(y_test, y_test_predict)\n",
|
||
" #Коэффициент корреляции Мэтьюса, который учитывает все возможные результаты классификации\n",
|
||
" class_models[model_name][\"MCC_test\"] = metrics.matthews_corrcoef(\n",
|
||
" y_test, y_test_predict\n",
|
||
" )\n",
|
||
" #Мера согласия между двумя классификаторами\n",
|
||
" class_models[model_name][\"Cohen_kappa_test\"] = metrics.cohen_kappa_score(\n",
|
||
" y_test, y_test_predict\n",
|
||
" )\n",
|
||
" #Матрица ошибок, показывающая количество истинных и ложных положительных и отрицательных предсказаний\n",
|
||
" class_models[model_name][\"Confusion_matrix\"] = metrics.confusion_matrix(\n",
|
||
" y_test, y_test_predict\n",
|
||
" )"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"#### Сводная таблица оценок качества для использованных моделей классификации"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"Матрица неточностей"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 44,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "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VpbBulq1asHBwQHZ2dn6dXZ2doXePvzfmjVrBl9fXyxevLhA/2c/AxERkdTkXy+0dOlSg/WLFy82+F2hUKBz58749ddfcffuXf36q1evYs+ePQZ9e/fuDYVCgdmzZxfIWUEQ8PDhQxE/AdHz42l1VGqurq6YOnUqZs+ejS5duqBHjx6IjY3FihUr0LJlSwwYMABA3jVIs2bNwpgxY9CxY0f07dsXN27cwIYNG1CrVi2jsz7//PMPOnXqhL59+yIgIABWVlb45ZdfkJSUhHfeeUffr3nz5li5ciU+/fRT+Pn5wc3NDR07diywPblcjpUrV+KNN95AkyZNMHjwYHh6euLy5cuIiYnBvn37xP+iiIiIKoAmTZqgX79+WLFiBVJTU/HKK6/gwIEDhc4QzZo1C/v370fr1q0xatQoaLVafP3112jQoAHOnj2r71erVi18+umnmDp1qv4xHg4ODoiLi8Mvv/yCESNGYOLEiS/wUxIVjsURiWLWrFlwdXXF119/jbCwMLi4uGDEiBGYP3++wUWWo0ePhiAIWLhwISZOnIjGjRvjt99+w9ixY2FjY1Pk9r29vdGvXz8cOHAA3333HaysrFCvXj1s374dffr00febMWMGbt68iQULFuDx48do3759ocURAAQHByMyMhKzZ8/GwoULodPpUKtWLQwfPly8L4aIiKgCWrduHVxdXbFlyxb8+uuv6NixI3bt2gVvb2+Dfs2bN8eePXswceJETJ8+Hd7e3pgzZw4uXbqEy5cvG/T96KOPUKdOHSxatAizZ88GkJfvQUFB6NGjxwv7bETGyASeQ0RmptPp4Orqit69e2P16tXmHg4RERGVUq9evRATE4MrV66YeyhEJuE1R/RCZWVlFTjXeNOmTUhOTkaHDh3MMygiIiJ6bpmZmQa/X7lyBbt372auU4XEmSN6oaKiohAWFoa3334blStXxl9//YW1a9fC398fp0+fhlKpNPcQiYiIyASenp4YNGiQ/tmGK1euRHZ2Ns6cOVPkc42Iyitec0QvVI0aNeDt7Y2lS5ciOTkZLi4uGDhwID777DMWRkRERBVQly5d8P333yMxMREqlQqBgYGYP38+CyOqkDhzREREREREBF5zREREREREBIDFEREREREREQBec1QiOp0Od+/ehYODg9EHlRJZIkEQ8PjxY3h5eUEuF/d4SlZWFnJy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J8aOHYu+ffvCw8MDADB79myEh4dj6dKl+Oeff3D+/HmsX78eX331lUnjISIi+jdmM7OZXiBzX/REZefZiz5NaU9ISBAGDhwoVKlSRVCpVELNmjWF4cOHC6mpqYIg5F3kOW7cOEGtVgtOTk7ChAkThIEDBxZ50acgCEJmZqYQFhYmeHp6CkqlUvDz8xPWrVunb58zZ47g4eEhyGQyISQkRBCEvAtVFy9eLNStW1ewtrYWXF1dheDgYOHQoUP61/3++++Cn5+foFKphLZt2wrr1q0z+aLPSZMmCZUrVxbs7e2F//znP8KiRYsER0dHffvMmTOFxo0bCytWrBC8vLwEGxsb4a233hKSk5MNtrtlyxahSZMmglKpFJydnYV27doJO3bsEASBF30SEVEeZnPhmM1UXsgEoYgr9YiIiIiIiCSEp9URERERERGBxREREREREREAFkdEREREREQAWBwREREREREBYHFEREREREQEgMURERERERERABZHREREREREAFgcERERERERAWBxREREREREBIDFEREREREREQAWR0RERERERABYHBEREREREQFgcURERERERASAxZGkzJo1CzKZrNxs+8aNG5DJZNiwYUOZjImIiIiKl5/hDx48MPdQiMyOxRFJ3u7duzFr1ixzD4OIiIiIzIzFEYli2rRpyMzMNOk1Pj4+yMzMxHvvvVdGoyqZ3bt3Y/bs2WYdAxERERGZn5W5B0CWwcrKClZWpv1xkslksLGxKaMRlQ2NRgOdTgelUmnuoRARERGRyDhzZKGOHDmCli1bwsbGBrVq1cI333xTaL/NmzejefPmsLW1hYuLC9555x3cunWrQL8TJ07g9ddfh7OzM+zs7NCoUSMsWbJE317YNUcRERFo06YNnJycYG9vj7p16+Ljjz/Wtxd1zdHBgwfRtm1b2NnZwcnJCT179sSlS5cM+uS/39WrVzFo0CA4OTnB0dERgwcPxpMnT0r8PQ0aNAjLly8HkFes5S/Pju/LL7/E4sWLUatWLahUKly8eBEAcPnyZbz11ltwcXGBjY0NWrRogd9++63Ae6SkpGD8+PHw9vaGSqWCn58fPv/8c+h0uhKPk4iI6EW6efMm/Pz80KBBAyQlJaFDhw5o0KABLl68iFdffRWVKlVC1apVsWDBAoPXRUVFQSaTYfv27Zg3bx6qVasGGxsbdOrUCVevXjXTpyEqOc4cWaDz588jKCgIrq6umDVrFjQaDWbOnAl3d3eDfvPmzcP06dPRt29fDBs2DPfv38eyZcvQrl07nDlzBk5OTgDyipzu3bvD09MT48aNg4eHBy5duoSdO3di3LhxhY4hJiYG3bt3R6NGjTBnzhyoVCpcvXoVR48eNTr2P/74A127dkXNmjUxa9YsZGZmYtmyZWjdujX++usv1KhRw6B/37594evri/DwcPz1119Ys2YN3Nzc8Pnnn5fou3r//fdx9+5dRERE4Lvvviu0z/r165GVlYURI0ZApVLBxcUFMTExaN26NapWrYqPPvoIdnZ22L59O3r16oWff/4Zb775JgDgyZMnaN++Pe7cuYP3338f1atXx7FjxzB16lQkJCRg8eLFJRonERHRi3Lt2jV07NgRLi4uiIiIQJUqVQAAjx49QpcuXdC7d2/07dsXP/30E6ZMmYKGDRuia9euBtv47LPPIJfLMXHiRKSmpmLBggXo378/Tpw4YY6PRFRyAlmcXr16CTY2NsLNmzf16y5evCgoFAoh/z/5jRs3BIVCIcybN8/gtefPnxesrKz06zUajeDr6yv4+PgIjx49Muir0+n0P8+cOVN49o/TokWLBADC/fv3ixxnXFycAEBYv369fl2TJk0ENzc34eHDh/p1586dE+RyuTBw4MAC7zdkyBCDbb755ptC5cqVi3zPwoSGhgqF/VXIH59arRbu3btn0NapUyehYcOGQlZWln6dTqcTXnnlFaF27dr6dXPnzhXs7OyEf/75x+D1H330kaBQKIT4+HiTxkpERCS2/Ey9f/++cOnSJcHLy0to2bKlkJycrO/Tvn17AYCwadMm/brs7GzBw8ND6NOnj35dZGSkAEDw9/cXsrOz9euXLFkiABDOnz//Yj4U0XPiaXUWRqvVYt++fejVqxeqV6+uX+/v74/g4GD97zt27IBOp0Pfvn3x4MED/eLh4YHatWsjMjISAHDmzBnExcVh/Pjx+pmkfMZu3Z3f97///W+JTx9LSEjA2bNnMWjQILi4uOjXN2rUCK+99hp2795d4DUjR440+L1t27Z4+PAh0tLSSvSeJdGnTx+4urrqf09OTsbBgwfRt29fPH78WP/dPXz4EMHBwbhy5Qru3LkDAPjxxx/Rtm1bODs7G3zPnTt3hlarxeHDh0UbJxERUWlcuHAB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X79+8PLyssCRVG5ubm4IDQ3FypUrIYRAaGgoatWqJZdfvHgRubm5aNeunbzP1tYWTzzxBM6cOWPUVuvWreV/X7hwAZmZmejatatRHZ1OZzQtgIiIqg7G5orB2EzmxOSomkhPT0fPnj3x6aefFirz8vKCUqnErl27cPjwYezcuRNffPEFPvjgAxw5cgR+fn5YsWIF3nzzTWzfvh3r16/HpEmTsGvXLrRt29YCR1O5DRs2DKNHjwYALFq06KHbcXBwkP+dnp4OANi2bRseeeQRo3pqtfqhP4OIiCyHsbniMDaTufCeo2qiVatWiImJQd26deHv72+0FfyhS5KEdu3aYdq0aTh58iRUKhV+/PFHuY2WLVti4sSJOHz4MJo0aYK1a9da6nAqte7du0On0yE3NxchISFGZfXr14dKpcKhQ4fkfbm5uTh69CgCAgKKbTMgIABqtRqxsbGF/v/z8fEpt2MhIqLyw9hccRibyVw4clQFpaSkIDo62mjfiBEjsHTpUgwYMAATJkyAq6srLly4gHXr1mHZsmU4duwYdu/ejW7dusHd3R1HjhzBrVu30KhRI1y+fBlff/01nnvuOXh7e+PcuXM4f/48hgwZYpkDrOSUSqU8DK9UKo3KHBwcMGrUKIwfPx6urq6oU6cOZs2ahczMTAwfPrzYNp2cnPDOO+9g7NixMBgMaN++PVJSUnDo0CFotVqEhYWV6zEREdF/w9hsWYzNZC5Mjqqgffv2FZrrOnz4cBw6dAjvvvsuunXrhpycHPj6+qJ79+5QKBTQarU4cOAA5s2bh9TUVPj6+mL27Nno0aMHEhIScPbsWaxatQp37tyBl5cXIiIi8Nprr1noCCs/rVZbbNknn3wCg8GAwYMHIy0tDa1bt8aOHTtQo0YNk23OmDEDbm5uiIyMxKVLl+Di4oJWrVrh/fffN3f3iYjIzBibLY+xmcxBEkIIS3eCiIiIiIjI0njPEREREREREZgcERERERERAWByREREREREBIDJEREREREREQAmR0RERERERACYHBEREREREQFgckRERERERASAyRGZSXh4OHr37i2/7tSpE8aMGVPh/di3bx8kSUJycnKxdSRJwubNm0vd5tSpU9GiRYv/1K8rV65AkqRCT08nIiIqL4zNpjE2U1GYHFVj4eHhkCQJkiRBpVLB398f06dPR15eXrl/9qZN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3RpPPPEE5s2bh4yMDHn1uspCEuW1BiAREREREdG/Fi5ciM8++wzx8fFo0aIFFixYgDZt2li6W0aYHBEREREREYH3HBEREREREQFgckRERERERASAyREREREREREAJkdEREREREQAmBxVOeHh4ejdu7elu2F1wsPDIUkSRo4cWagsIiICkiQhPDy84jtGREQWx9hsGYzNVB6YHBGVko+PD9atW4esrCx5X3Z2NtauXYs6deo8dLtCCOTl5Zmji0RERFaFsZnMjclRNfL333+jR48ecHR0hIeHBwYPHozbt2/L5Rs3bkTTpk1hZ2eHmjVrIjg4GBkZGQCAffv24YknnoCDgwNcXFzQrl07XL161VKHUim1atUKPj4+2LRpk7xv06ZNqFOnDlq2bCnvy8nJwZtvvgl3d3doNBq0b98eR48elcv37dsHSZLwyy+/IDAwEGq1GgcPHoTBYEBkZCT8/PxgZ2eH5s2bY+PGjRV6jEREZF6MzeWLsZnMjclRNZGcnIzOnTujZcuWOHbsGLZv346EhAT069cPAHDz5k0MGDAAw4YNw5kzZ7Bv3z706dNHvjLSu3dvdOzYEX/99ReioqIwYsQISJJk4aOqfIYNG4YVK1bIr5cvX17oyc4TJkzADz/8gFWrVuHEiRPw9/dHSEgIkpKSjOq99957+OSTT3DmzBk0a9YMkZGRWL16NZYsWYKYmBiMHTsWgwYNwv79+yvk2IiIyLwYmysGYzOZlaAqJSwsTPTq1avQ/hkzZohu3boZ7YuLixMAxLlz58Tx48cFAHHlypVC771z544AIPbt21de3a7yCr73xMREoVarxZUrV8SVK1eERqMRt27dEr169RJhYWEiPT1d2NraijVr1sjv1el0wtvbW8yaNUsIIcTevXsFALF582a5TnZ2trC3txeHDx82+tzhw4eLAQMGVMxBEhHRQ2FstgzGZioPNpZLy8ic/vzzT+zduxeOjo6Fyi5evIhu3bqhS5cuaNq0KUJCQtCtWze88MILqFGjBlxdXREeHo6QkBB07doVwcHB6NevH7y8vCxwJJWbm5sbQkNDsXLlSgghEBoailq1asnlFy9eRG5uLtq1ayfvs7W1xRNPPIEzZ84YtdW6dWv53xcuXEBmZia6du1qVEen0xlNCyAioqqDsbliMDaTOTE5qibS09PRs2dPfPrpp4XKvP6/vTuPj+nc/wD+OTPJTNbJQlYiltSS2mlVbVWaUG252qtVKkEppYhrqbb2VlSvWlpqq62X4ra4LaXyU5RYrr2tEkLsEUskEZHMcp7fH7mZdhqZZJiYyZzP+/U6r5ec55kzzxlyPr7znCUsDGq1GklJSdi7dy+2bduGzz77DO+//z4OHDiAGjVqYNmyZRg2bBi2bt2KtWvX4oMPPkBSUhKeeuopB+yNc+vXrx+GDh0KAJg3b94Db8fb29v859zcXADA5s2bUaVKFYt+Wq32gd+DiIgch9n86DCbyV54zZGLaNq0KU6cOIHq1asjKirKYin6RZckCa1atcLkyZNx9OhRaDQabNiwwbyNJk2aYNy4cdi7dy/q16+P1atXO2p3nFqnTp2g1+thMBgQGxtr0VarVi1oNBokJyeb1xkMBhw8eBDR0dElbjM6OhparRYXL14s9vcXERFRbvtCRETlh9n86DCbyV44c1QBZWdn49ixYxbrBg4ciMWLF6Nnz54YM2YMAgMDkZqaijVr1mDJkiU4dOgQtm/fjpiYGAQHB+PAgQO4ceMG6tWrh7S0NCxatAgvvfQSwsPDkZKSgjNnzqBPnz6O2UEnp1arzdPwarXaos3b2xuDBw/G6NGjERgYiGrVqmHGjBnIy8tD//79S9ymr68vRo0ahYSEBMiyjNatWyM7OxvJycnQ6XSIi4sr130iIqKHw2x2LGYz2QuLowpo586dxc517d+/P5KTkzF27FjExMSgoKAAkZGR6NSpE1QqFXQ6HX7++WfMnj0bOTk5iIyMxMyZM9G5c2dkZGTg1KlTWLFiBW7duoWwsDAMGTIEb731loP20PnpdLoS26ZPnw5ZlvHGG2/gzp07aN68OX788UcEBARY3ebUqVMRFBSExMREnDt3Dv7+/mjatCnee+89ew+fiIjsjNnseMxmsgdJCCEcPQgiIiIiIiJH4zVHREREREREYHFEREREREQEgMURERERERERABZHREREREREAFgcERERERERAWBxREREREREBIDFEREREREREQAWR2Qn8fHx6Natm/nnZ555BiNGjHjk49i5cyckSUJWVlaJfSRJwsaNG8u8zUmTJqFx48YPNa7z589DkqRiT08nIiIqL8xm65jNdD8sjlxYfHw8JEmCJEnQaDSIiorClClTYDQay/29169fj6lTp5apb1kOmkRE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hIeH49KlS/D19YUkSY4ejs1ycnIQERGBS5cuQafTOXo4ilPRP38hBO7cuYPw8HC7btfDwwNpaWnQ60v/5lEIUex376+zRkSkLMxmehgV/fN3hmzWaDTw8PCw6/s7AxZHZaBSqVC1alVHD+Oh6XS6CnkAcBUV+fO357dSf+bh4WHXA2vlypWhVquRkZFhsT4jIwOhoaF2ex8icjxmM9lDRf78K0o2VzS8IQMRuQyNRoNmzZph+/bt5nWyLGP79u1o2bKlA0dGREREFQFnjojIpYwcORJxcXFo3rw5nnzyScyePRt3795F3759HT00IiIicnIsjhRAq9Vi4sSJvEbDQfj5P1qvvvoqbty4gQkTJuDatWto3Lgxtm7dWuwmDUREjsRscCx+/lQSSZTXPQCJiIiIiIgqEF5zREREREREBBZHREREREREAFgcERERERERAWBxREREREREBIDFUYUTHx+Pbt26OXoYihMfHw9JkjBo0KBibUOGDIEkSYiPj3/0AyMiIodjNjsGs5nKA4sjojKKiIjAmjVrcO/ePfO6/Px8rF69GtWqVXvg7QohYDQa7TFEIiIiRWE2k72xOHIhv/32Gzp37gwfHx+EhITgjTfewM2bN83t33zzDRo0aABPT09UqlQJHTt2xN27dwEAO3fuxJNPPglvb2/4+/ujVatWuHDhgqN2xSk1bdoUERERWL9+vXnd+vXrUa1aNTRp0sS8rqCgAMOGDUNwcDA8PDzQunVrHDx40Ny+c+dOSJKELVu2oFmzZtBqtdizZw9kWUZiYiJq1KgBT09PNGrUCN98880j3UciIrIvZnP5YjaTvbE4chFZWVl49tln0aRJExw6dAhbt25FRkYGevToAQBIT09Hz5490a9fP5w8eRI7d+5E9+7dzd+MdOvWDe3atcMvv/yCffv2YeDAgZAkycF75Xz69euHZcuWmX9eunQp+vbta9FnzJgx+Pbbb7FixQocOXIEUVFRiI2NRWZmpkW/d999F9OnT8fJkyfRsGFDJCYmYuXKlViwYAFOnDiBhIQE9O7dG7t27Xok+0ZERPbFbH40mM1kV4IqlLi4ONG1a9di66dOnSpiYmIs1l26dEkAECkpKeLw4cMCgDh//nyx1966dUsAEDt37iyvYVd4RZ/79evXhVarFefPnxfnz58XHh4e4saNG6Jr164iLi5O5Obm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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",
|
||
"#Функция, создающая фигуру и набор подграфиков (axes)\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=[\"Less\", \"More\"]\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": 46,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<style type=\"text/css\">\n",
|
||
"#T_b8c4d_row0_col0, #T_b8c4d_row0_col1, #T_b8c4d_row0_col2, #T_b8c4d_row0_col3, #T_b8c4d_row1_col0, #T_b8c4d_row1_col1, #T_b8c4d_row1_col2, #T_b8c4d_row1_col3, #T_b8c4d_row2_col0, #T_b8c4d_row2_col1, #T_b8c4d_row2_col2, #T_b8c4d_row2_col3 {\n",
|
||
" background-color: #a8db34;\n",
|
||
" color: #000000;\n",
|
||
"}\n",
|
||
"#T_b8c4d_row0_col4, #T_b8c4d_row0_col5, #T_b8c4d_row0_col6, #T_b8c4d_row0_col7, #T_b8c4d_row1_col4, #T_b8c4d_row1_col5, #T_b8c4d_row1_col6, #T_b8c4d_row1_col7, #T_b8c4d_row2_col4, #T_b8c4d_row2_col5, #T_b8c4d_row2_col6, #T_b8c4d_row2_col7 {\n",
|
||
" background-color: #da5a6a;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_b8c4d_row3_col0 {\n",
|
||
" background-color: #7fd34e;\n",
|
||
" color: #000000;\n",
|
||
"}\n",
|
||
"#T_b8c4d_row3_col1, #T_b8c4d_row5_col0 {\n",
|
||
" background-color: #8ed645;\n",
|
||
" color: #000000;\n",
|
||
"}\n",
|
||
"#T_b8c4d_row3_col2 {\n",
|
||
" background-color: #90d743;\n",
|
||
" color: #000000;\n",
|
||
"}\n",
|
||
"#T_b8c4d_row3_col3, #T_b8c4d_row4_col1 {\n",
|
||
" background-color: #93d741;\n",
|
||
" color: #000000;\n",
|
||
"}\n",
|
||
"#T_b8c4d_row3_col4, #T_b8c4d_row3_col6 {\n",
|
||
" background-color: #ca457a;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_b8c4d_row3_col5, #T_b8c4d_row3_col7 {\n",
|
||
" background-color: #cf4c74;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_b8c4d_row4_col0, #T_b8c4d_row4_col3 {\n",
|
||
" background-color: #86d549;\n",
|
||
" color: #000000;\n",
|
||
"}\n",
|
||
"#T_b8c4d_row4_col2 {\n",
|
||
" background-color: #6ece58;\n",
|
||
" color: #000000;\n",
|
||
"}\n",
|
||
"#T_b8c4d_row4_col4 {\n",
|
||
" background-color: #c43e7f;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_b8c4d_row4_col5, #T_b8c4d_row4_col7 {\n",
|
||
" background-color: #ce4b75;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_b8c4d_row4_col6 {\n",
|
||
" background-color: #c5407e;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_b8c4d_row5_col1, #T_b8c4d_row6_col3 {\n",
|
||
" background-color: #9bd93c;\n",
|
||
" color: #000000;\n",
|
||
"}\n",
|
||
"#T_b8c4d_row5_col2 {\n",
|
||
" background-color: #5ac864;\n",
|
||
" color: #000000;\n",
|
||
"}\n",
|
||
"#T_b8c4d_row5_col3 {\n",
|
||
" background-color: #73d056;\n",
|
||
" color: #000000;\n",
|
||
"}\n",
|
||
"#T_b8c4d_row5_col4, #T_b8c4d_row5_col6 {\n",
|
||
" background-color: #c13b82;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_b8c4d_row5_col5, #T_b8c4d_row5_col7 {\n",
|
||
" background-color: #cc4778;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_b8c4d_row6_col0, #T_b8c4d_row6_col1, #T_b8c4d_row7_col2, #T_b8c4d_row7_col3 {\n",
|
||
" background-color: #26818e;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_b8c4d_row6_col2 {\n",
|
||
" background-color: #9dd93b;\n",
|
||
" color: #000000;\n",
|
||
"}\n",
|
||
"#T_b8c4d_row6_col4 {\n",
|
||
" background-color: #6300a7;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_b8c4d_row6_col5 {\n",
|
||
" background-color: #7100a8;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_b8c4d_row6_col6 {\n",
|
||
" background-color: #6700a8;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_b8c4d_row6_col7 {\n",
|
||
" background-color: #7501a8;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_b8c4d_row7_col0 {\n",
|
||
" background-color: #2eb37c;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_b8c4d_row7_col1 {\n",
|
||
" background-color: #25ac82;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_b8c4d_row7_col4, #T_b8c4d_row7_col5, #T_b8c4d_row7_col6, #T_b8c4d_row7_col7 {\n",
|
||
" background-color: #4e02a2;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"</style>\n",
|
||
"<table id=\"T_b8c4d\">\n",
|
||
" <thead>\n",
|
||
" <tr>\n",
|
||
" <th class=\"blank level0\" > </th>\n",
|
||
" <th id=\"T_b8c4d_level0_col0\" class=\"col_heading level0 col0\" >Precision_train</th>\n",
|
||
" <th id=\"T_b8c4d_level0_col1\" class=\"col_heading level0 col1\" >Precision_test</th>\n",
|
||
" <th id=\"T_b8c4d_level0_col2\" class=\"col_heading level0 col2\" >Recall_train</th>\n",
|
||
" <th id=\"T_b8c4d_level0_col3\" class=\"col_heading level0 col3\" >Recall_test</th>\n",
|
||
" <th id=\"T_b8c4d_level0_col4\" class=\"col_heading level0 col4\" >Accuracy_train</th>\n",
|
||
" <th id=\"T_b8c4d_level0_col5\" class=\"col_heading level0 col5\" >Accuracy_test</th>\n",
|
||
" <th id=\"T_b8c4d_level0_col6\" class=\"col_heading level0 col6\" >F1_train</th>\n",
|
||
" <th id=\"T_b8c4d_level0_col7\" class=\"col_heading level0 col7\" >F1_test</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_b8c4d_level0_row0\" class=\"row_heading level0 row0\" >decision_tree</th>\n",
|
||
" <td id=\"T_b8c4d_row0_col0\" class=\"data row0 col0\" >1.000000</td>\n",
|
||
" <td id=\"T_b8c4d_row0_col1\" class=\"data row0 col1\" >1.000000</td>\n",
|
||
" <td id=\"T_b8c4d_row0_col2\" class=\"data row0 col2\" >1.000000</td>\n",
|
||
" <td id=\"T_b8c4d_row0_col3\" class=\"data row0 col3\" >1.000000</td>\n",
|
||
" <td id=\"T_b8c4d_row0_col4\" class=\"data row0 col4\" >1.000000</td>\n",
|
||
" <td id=\"T_b8c4d_row0_col5\" class=\"data row0 col5\" >1.000000</td>\n",
|
||
" <td id=\"T_b8c4d_row0_col6\" class=\"data row0 col6\" >1.000000</td>\n",
|
||
" <td id=\"T_b8c4d_row0_col7\" class=\"data row0 col7\" >1.000000</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_b8c4d_level0_row1\" class=\"row_heading level0 row1\" >gradient_boosting</th>\n",
|
||
" <td id=\"T_b8c4d_row1_col0\" class=\"data row1 col0\" >1.000000</td>\n",
|
||
" <td id=\"T_b8c4d_row1_col1\" class=\"data row1 col1\" >1.000000</td>\n",
|
||
" <td id=\"T_b8c4d_row1_col2\" class=\"data row1 col2\" >1.000000</td>\n",
|
||
" <td id=\"T_b8c4d_row1_col3\" class=\"data row1 col3\" >1.000000</td>\n",
|
||
" <td id=\"T_b8c4d_row1_col4\" class=\"data row1 col4\" >1.000000</td>\n",
|
||
" <td id=\"T_b8c4d_row1_col5\" class=\"data row1 col5\" >1.000000</td>\n",
|
||
" <td id=\"T_b8c4d_row1_col6\" class=\"data row1 col6\" >1.000000</td>\n",
|
||
" <td id=\"T_b8c4d_row1_col7\" class=\"data row1 col7\" >1.000000</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_b8c4d_level0_row2\" class=\"row_heading level0 row2\" >random_forest</th>\n",
|
||
" <td id=\"T_b8c4d_row2_col0\" class=\"data row2 col0\" >1.000000</td>\n",
|
||
" <td id=\"T_b8c4d_row2_col1\" class=\"data row2 col1\" >1.000000</td>\n",
|
||
" <td id=\"T_b8c4d_row2_col2\" class=\"data row2 col2\" >1.000000</td>\n",
|
||
" <td id=\"T_b8c4d_row2_col3\" class=\"data row2 col3\" >1.000000</td>\n",
|
||
" <td id=\"T_b8c4d_row2_col4\" class=\"data row2 col4\" >1.000000</td>\n",
|
||
" <td id=\"T_b8c4d_row2_col5\" class=\"data row2 col5\" >1.000000</td>\n",
|
||
" <td id=\"T_b8c4d_row2_col6\" class=\"data row2 col6\" >1.000000</td>\n",
|
||
" <td id=\"T_b8c4d_row2_col7\" class=\"data row2 col7\" >1.000000</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_b8c4d_level0_row3\" class=\"row_heading level0 row3\" >mlp</th>\n",
|
||
" <td id=\"T_b8c4d_row3_col0\" class=\"data row3 col0\" >0.992471</td>\n",
|
||
" <td id=\"T_b8c4d_row3_col1\" class=\"data row3 col1\" >0.994967</td>\n",
|
||
" <td id=\"T_b8c4d_row3_col2\" class=\"data row3 col2\" >0.996822</td>\n",
|
||
" <td id=\"T_b8c4d_row3_col3\" class=\"data row3 col3\" >0.996494</td>\n",
|
||
" <td id=\"T_b8c4d_row3_col4\" class=\"data row3 col4\" >0.995458</td>\n",
|
||
" <td id=\"T_b8c4d_row3_col5\" class=\"data row3 col5\" >0.996385</td>\n",
|
||
" <td id=\"T_b8c4d_row3_col6\" class=\"data row3 col6\" >0.994642</td>\n",
|
||
" <td id=\"T_b8c4d_row3_col7\" class=\"data row3 col7\" >0.995730</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_b8c4d_level0_row4\" class=\"row_heading level0 row4\" >ridge</th>\n",
|
||
" <td id=\"T_b8c4d_row4_col0\" class=\"data row4 col0\" >0.993907</td>\n",
|
||
" <td id=\"T_b8c4d_row4_col1\" class=\"data row4 col1\" >0.996049</td>\n",
|
||
" <td id=\"T_b8c4d_row4_col2\" class=\"data row4 col2\" >0.992164</td>\n",
|
||
" <td id=\"T_b8c4d_row4_col3\" class=\"data row4 col3\" >0.994521</td>\n",
|
||
" <td id=\"T_b8c4d_row4_col4\" class=\"data row4 col4\" >0.994114</td>\n",
|
||
" <td id=\"T_b8c4d_row4_col5\" class=\"data row4 col5\" >0.996014</td>\n",
|
||
" <td id=\"T_b8c4d_row4_col6\" class=\"data row4 col6\" >0.993035</td>\n",
|
||
" <td id=\"T_b8c4d_row4_col7\" class=\"data row4 col7\" >0.995285</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_b8c4d_level0_row5\" class=\"row_heading level0 row5\" >logistic</th>\n",
|
||
" <td id=\"T_b8c4d_row5_col0\" class=\"data row5 col0\" >0.995093</td>\n",
|
||
" <td id=\"T_b8c4d_row5_col1\" class=\"data row5 col1\" >0.997574</td>\n",
|
||
" <td id=\"T_b8c4d_row5_col2\" class=\"data row5 col2\" >0.989041</td>\n",
|
||
" <td id=\"T_b8c4d_row5_col3\" class=\"data row5 col3\" >0.991234</td>\n",
|
||
" <td id=\"T_b8c4d_row5_col4\" class=\"data row5 col4\" >0.993303</td>\n",
|
||
" <td id=\"T_b8c4d_row5_col5\" class=\"data row5 col5\" >0.995273</td>\n",
|
||
" <td id=\"T_b8c4d_row5_col6\" class=\"data row5 col6\" >0.992058</td>\n",
|
||
" <td id=\"T_b8c4d_row5_col7\" class=\"data row5 col7\" >0.994394</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_b8c4d_level0_row6\" class=\"row_heading level0 row6\" >naive_bayes</th>\n",
|
||
" <td id=\"T_b8c4d_row6_col0\" class=\"data row6 col0\" >0.946797</td>\n",
|
||
" <td id=\"T_b8c4d_row6_col1\" class=\"data row6 col1\" >0.942845</td>\n",
|
||
" <td id=\"T_b8c4d_row6_col2\" class=\"data row6 col2\" >0.998521</td>\n",
|
||
" <td id=\"T_b8c4d_row6_col3\" class=\"data row6 col3\" >0.997808</td>\n",
|
||
" <td id=\"T_b8c4d_row6_col4\" class=\"data row6 col4\" >0.975645</td>\n",
|
||
" <td id=\"T_b8c4d_row6_col5\" class=\"data row6 col5\" >0.973492</td>\n",
|
||
" <td id=\"T_b8c4d_row6_col6\" class=\"data row6 col6\" >0.971971</td>\n",
|
||
" <td id=\"T_b8c4d_row6_col7\" class=\"data row6 col7\" >0.969549</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_b8c4d_level0_row7\" class=\"row_heading level0 row7\" >knn</th>\n",
|
||
" <td id=\"T_b8c4d_row7_col0\" class=\"data row7 col0\" >0.972527</td>\n",
|
||
" <td id=\"T_b8c4d_row7_col1\" class=\"data row7 col1\" >0.966497</td>\n",
|
||
" <td id=\"T_b8c4d_row7_col2\" class=\"data row7 col2\" >0.962082</td>\n",
|
||
" <td id=\"T_b8c4d_row7_col3\" class=\"data row7 col3\" >0.954635</td>\n",
|
||
" <td id=\"T_b8c4d_row7_col4\" class=\"data row7 col4\" >0.972471</td>\n",
|
||
" <td id=\"T_b8c4d_row7_col5\" class=\"data row7 col5\" >0.966818</td>\n",
|
||
" <td id=\"T_b8c4d_row7_col6\" class=\"data row7 col6\" >0.967276</td>\n",
|
||
" <td id=\"T_b8c4d_row7_col7\" class=\"data row7 col7\" >0.960529</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n"
|
||
],
|
||
"text/plain": [
|
||
"<pandas.io.formats.style.Styler at 0x1659b03a1e0>"
|
||
]
|
||
},
|
||
"execution_count": 46,
|
||
"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",
|
||
"#сортировка по столбцу Accuracy_test в порядке убывания\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",
|
||
" #Указывает, какие столбцы будут окрашены\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": 15,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<style type=\"text/css\">\n",
|
||
"#T_76f05_row0_col0, #T_76f05_row0_col1, #T_76f05_row1_col0, #T_76f05_row1_col1, #T_76f05_row2_col0, #T_76f05_row2_col1, #T_76f05_row3_col0, #T_76f05_row3_col1, #T_76f05_row4_col0, #T_76f05_row4_col1, #T_76f05_row5_col0, #T_76f05_row5_col1 {\n",
|
||
" background-color: #a8db34;\n",
|
||
" color: #000000;\n",
|
||
"}\n",
|
||
"#T_76f05_row0_col2, #T_76f05_row0_col3, #T_76f05_row0_col4, #T_76f05_row1_col2, #T_76f05_row1_col3, #T_76f05_row1_col4, #T_76f05_row2_col2, #T_76f05_row2_col3, #T_76f05_row2_col4, #T_76f05_row3_col2, #T_76f05_row3_col3, #T_76f05_row3_col4, #T_76f05_row4_col2, #T_76f05_row4_col3, #T_76f05_row4_col4, #T_76f05_row5_col2, #T_76f05_row5_col3, #T_76f05_row5_col4 {\n",
|
||
" background-color: #da5a6a;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_76f05_row6_col0, #T_76f05_row6_col1 {\n",
|
||
" background-color: #a2da37;\n",
|
||
" color: #000000;\n",
|
||
"}\n",
|
||
"#T_76f05_row6_col2 {\n",
|
||
" background-color: #d45270;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_76f05_row6_col3, #T_76f05_row6_col4 {\n",
|
||
" background-color: #d8576b;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_76f05_row7_col0, #T_76f05_row7_col1 {\n",
|
||
" background-color: #26818e;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_76f05_row7_col2, #T_76f05_row7_col3, #T_76f05_row7_col4 {\n",
|
||
" background-color: #4e02a2;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"</style>\n",
|
||
"<table id=\"T_76f05\">\n",
|
||
" <thead>\n",
|
||
" <tr>\n",
|
||
" <th class=\"blank level0\" > </th>\n",
|
||
" <th id=\"T_76f05_level0_col0\" class=\"col_heading level0 col0\" >Accuracy_test</th>\n",
|
||
" <th id=\"T_76f05_level0_col1\" class=\"col_heading level0 col1\" >F1_test</th>\n",
|
||
" <th id=\"T_76f05_level0_col2\" class=\"col_heading level0 col2\" >ROC_AUC_test</th>\n",
|
||
" <th id=\"T_76f05_level0_col3\" class=\"col_heading level0 col3\" >Cohen_kappa_test</th>\n",
|
||
" <th id=\"T_76f05_level0_col4\" class=\"col_heading level0 col4\" >MCC_test</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_76f05_level0_row0\" class=\"row_heading level0 row0\" >logistic</th>\n",
|
||
" <td id=\"T_76f05_row0_col0\" class=\"data row0 col0\" >1.000000</td>\n",
|
||
" <td id=\"T_76f05_row0_col1\" class=\"data row0 col1\" >1.000000</td>\n",
|
||
" <td id=\"T_76f05_row0_col2\" class=\"data row0 col2\" >1.000000</td>\n",
|
||
" <td id=\"T_76f05_row0_col3\" class=\"data row0 col3\" >1.000000</td>\n",
|
||
" <td id=\"T_76f05_row0_col4\" class=\"data row0 col4\" >1.000000</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_76f05_level0_row1\" class=\"row_heading level0 row1\" >ridge</th>\n",
|
||
" <td id=\"T_76f05_row1_col0\" class=\"data row1 col0\" >1.000000</td>\n",
|
||
" <td id=\"T_76f05_row1_col1\" class=\"data row1 col1\" >1.000000</td>\n",
|
||
" <td id=\"T_76f05_row1_col2\" class=\"data row1 col2\" >1.000000</td>\n",
|
||
" <td id=\"T_76f05_row1_col3\" class=\"data row1 col3\" >1.000000</td>\n",
|
||
" <td id=\"T_76f05_row1_col4\" class=\"data row1 col4\" >1.000000</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_76f05_level0_row2\" class=\"row_heading level0 row2\" >decision_tree</th>\n",
|
||
" <td id=\"T_76f05_row2_col0\" class=\"data row2 col0\" >1.000000</td>\n",
|
||
" <td id=\"T_76f05_row2_col1\" class=\"data row2 col1\" >1.000000</td>\n",
|
||
" <td id=\"T_76f05_row2_col2\" class=\"data row2 col2\" >1.000000</td>\n",
|
||
" <td id=\"T_76f05_row2_col3\" class=\"data row2 col3\" >1.000000</td>\n",
|
||
" <td id=\"T_76f05_row2_col4\" class=\"data row2 col4\" >1.000000</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_76f05_level0_row3\" class=\"row_heading level0 row3\" >naive_bayes</th>\n",
|
||
" <td id=\"T_76f05_row3_col0\" class=\"data row3 col0\" >1.000000</td>\n",
|
||
" <td id=\"T_76f05_row3_col1\" class=\"data row3 col1\" >1.000000</td>\n",
|
||
" <td id=\"T_76f05_row3_col2\" class=\"data row3 col2\" >1.000000</td>\n",
|
||
" <td id=\"T_76f05_row3_col3\" class=\"data row3 col3\" >1.000000</td>\n",
|
||
" <td id=\"T_76f05_row3_col4\" class=\"data row3 col4\" >1.000000</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_76f05_level0_row4\" class=\"row_heading level0 row4\" >random_forest</th>\n",
|
||
" <td id=\"T_76f05_row4_col0\" class=\"data row4 col0\" >1.000000</td>\n",
|
||
" <td id=\"T_76f05_row4_col1\" class=\"data row4 col1\" >1.000000</td>\n",
|
||
" <td id=\"T_76f05_row4_col2\" class=\"data row4 col2\" >1.000000</td>\n",
|
||
" <td id=\"T_76f05_row4_col3\" class=\"data row4 col3\" >1.000000</td>\n",
|
||
" <td id=\"T_76f05_row4_col4\" class=\"data row4 col4\" >1.000000</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_76f05_level0_row5\" class=\"row_heading level0 row5\" >gradient_boosting</th>\n",
|
||
" <td id=\"T_76f05_row5_col0\" class=\"data row5 col0\" >1.000000</td>\n",
|
||
" <td id=\"T_76f05_row5_col1\" class=\"data row5 col1\" >1.000000</td>\n",
|
||
" <td id=\"T_76f05_row5_col2\" class=\"data row5 col2\" >1.000000</td>\n",
|
||
" <td id=\"T_76f05_row5_col3\" class=\"data row5 col3\" >1.000000</td>\n",
|
||
" <td id=\"T_76f05_row5_col4\" class=\"data row5 col4\" >1.000000</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_76f05_level0_row6\" class=\"row_heading level0 row6\" >mlp</th>\n",
|
||
" <td id=\"T_76f05_row6_col0\" class=\"data row6 col0\" >0.999629</td>\n",
|
||
" <td id=\"T_76f05_row6_col1\" class=\"data row6 col1\" >0.999562</td>\n",
|
||
" <td id=\"T_76f05_row6_col2\" class=\"data row6 col2\" >0.999754</td>\n",
|
||
" <td id=\"T_76f05_row6_col3\" class=\"data row6 col3\" >0.999240</td>\n",
|
||
" <td id=\"T_76f05_row6_col4\" class=\"data row6 col4\" >0.999240</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_76f05_level0_row7\" class=\"row_heading level0 row7\" >knn</th>\n",
|
||
" <td id=\"T_76f05_row7_col0\" class=\"data row7 col0\" >0.980536</td>\n",
|
||
" <td id=\"T_76f05_row7_col1\" class=\"data row7 col1\" >0.976933</td>\n",
|
||
" <td id=\"T_76f05_row7_col2\" class=\"data row7 col2\" >0.995960</td>\n",
|
||
" <td id=\"T_76f05_row7_col3\" class=\"data row7 col3\" >0.960098</td>\n",
|
||
" <td id=\"T_76f05_row7_col4\" class=\"data row7 col4\" >0.960107</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n"
|
||
],
|
||
"text/plain": [
|
||
"<pandas.io.formats.style.Styler at 0x1659f0e94f0>"
|
||
]
|
||
},
|
||
"execution_count": 15,
|
||
"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": 16,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"'logistic'"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"#выводим лучшую модель\n",
|
||
"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": 18,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"'Error items count: 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>carat</th>\n",
|
||
" <th>Predicted</th>\n",
|
||
" <th>cut</th>\n",
|
||
" <th>color</th>\n",
|
||
" <th>clarity</th>\n",
|
||
" <th>depth</th>\n",
|
||
" <th>table</th>\n",
|
||
" <th>price</th>\n",
|
||
" <th>x</th>\n",
|
||
" <th>y</th>\n",
|
||
" <th>z</th>\n",
|
||
" <th>above_average_carat</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>id</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",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
"Empty DataFrame\n",
|
||
"Columns: [carat, Predicted, cut, color, clarity, depth, table, price, x, y, z, above_average_carat]\n",
|
||
"Index: []"
|
||
]
|
||
},
|
||
"execution_count": 18,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"#предобработка тестовой выборки\n",
|
||
"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",
|
||
"#Определение индексов ошибок\n",
|
||
"#Сравнивает истинные значения из y_test (столбец above_average_carat) с предсказанными значениями y_pred\n",
|
||
"#Это дает булев массив, где True означает ошибку\n",
|
||
"error_index = y_test[y_test[\"above_average_carat\"] != y_pred].index.tolist()\n",
|
||
"#выводим кол-во ошибок\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": 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>carat</th>\n",
|
||
" <th>cut</th>\n",
|
||
" <th>color</th>\n",
|
||
" <th>clarity</th>\n",
|
||
" <th>depth</th>\n",
|
||
" <th>table</th>\n",
|
||
" <th>price</th>\n",
|
||
" <th>x</th>\n",
|
||
" <th>y</th>\n",
|
||
" <th>z</th>\n",
|
||
" <th>above_average_carat</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>4500</th>\n",
|
||
" <td>0.9</td>\n",
|
||
" <td>Premium</td>\n",
|
||
" <td>H</td>\n",
|
||
" <td>SI1</td>\n",
|
||
" <td>61.9</td>\n",
|
||
" <td>58.0</td>\n",
|
||
" <td>3629</td>\n",
|
||
" <td>6.2</td>\n",
|
||
" <td>6.15</td>\n",
|
||
" <td>3.82</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" carat cut color clarity depth table price x y z \\\n",
|
||
"4500 0.9 Premium H SI1 61.9 58.0 3629 6.2 6.15 3.82 \n",
|
||
"\n",
|
||
" above_average_carat \n",
|
||
"4500 1 "
|
||
]
|
||
},
|
||
"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>x</th>\n",
|
||
" <th>y</th>\n",
|
||
" <th>Length_to_Width_Ratio</th>\n",
|
||
" <th>carat</th>\n",
|
||
" <th>depth</th>\n",
|
||
" <th>table</th>\n",
|
||
" <th>z</th>\n",
|
||
" <th>above_average_carat</th>\n",
|
||
" <th>cut_Good</th>\n",
|
||
" <th>cut_Ideal</th>\n",
|
||
" <th>...</th>\n",
|
||
" <th>color_I</th>\n",
|
||
" <th>color_J</th>\n",
|
||
" <th>clarity_IF</th>\n",
|
||
" <th>clarity_SI1</th>\n",
|
||
" <th>clarity_SI2</th>\n",
|
||
" <th>clarity_VS1</th>\n",
|
||
" <th>clarity_VS2</th>\n",
|
||
" <th>clarity_VVS1</th>\n",
|
||
" <th>clarity_VVS2</th>\n",
|
||
" <th>price</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>4500</th>\n",
|
||
" <td>0.420272</td>\n",
|
||
" <td>0.363352</td>\n",
|
||
" <td>1.156653</td>\n",
|
||
" <td>0.217442</td>\n",
|
||
" <td>0.10618</td>\n",
|
||
" <td>0.245753</td>\n",
|
||
" <td>0.399417</td>\n",
|
||
" <td>1.168162</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>...</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.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>0.0</td>\n",
|
||
" <td>3629.0</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>1 rows × 26 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" x y Length_to_Width_Ratio carat depth table \\\n",
|
||
"4500 0.420272 0.363352 1.156653 0.217442 0.10618 0.245753 \n",
|
||
"\n",
|
||
" z above_average_carat cut_Good cut_Ideal ... color_I \\\n",
|
||
"4500 0.399417 1.168162 0.0 0.0 ... 0.0 \n",
|
||
"\n",
|
||
" color_J clarity_IF clarity_SI1 clarity_SI2 clarity_VS1 clarity_VS2 \\\n",
|
||
"4500 0.0 0.0 1.0 0.0 0.0 0.0 \n",
|
||
"\n",
|
||
" clarity_VVS1 clarity_VVS2 price \n",
|
||
"4500 0.0 0.0 3629.0 \n",
|
||
"\n",
|
||
"[1 rows x 26 columns]"
|
||
]
|
||
},
|
||
"metadata": {},
|
||
"output_type": "display_data"
|
||
},
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"'predicted: 1 (proba: [4.39873930e-04 9.99560126e-01])'"
|
||
]
|
||
},
|
||
"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 = 4500\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",
|
||
"#Получение вероятностей предсказания\n",
|
||
"result_proba = model.predict_proba(test)[0]\n",
|
||
"#Получение предсказания\n",
|
||
"result = model.predict(test)[0]\n",
|
||
"#Получение реального значения\n",
|
||
"real = int(y_test.loc[example_id].values[0])\n",
|
||
"display(f\"predicted: {result} (proba: {result_proba})\")\n",
|
||
"display(f\"real: {real}\")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"#### Подбор гиперпараметров методом поиска по сетке"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 209,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"{'model__criterion': 'gini',\n",
|
||
" 'model__max_depth': 2,\n",
|
||
" 'model__max_features': 'sqrt',\n",
|
||
" 'model__n_estimators': 20}"
|
||
]
|
||
},
|
||
"execution_count": 209,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"from sklearn.model_selection import GridSearchCV\n",
|
||
"\n",
|
||
"#используем модель случайного леса\n",
|
||
"optimized_model_type = \"random_forest\"\n",
|
||
"random_forest_model = class_models[optimized_model_type][\"pipeline\"]\n",
|
||
"#Определение сетки гиперпараметров\n",
|
||
"param_grid = {\n",
|
||
" #Количество деревьев в лесу\n",
|
||
" \"model__n_estimators\": [10, 20, 30, 40, 50, 100, 150, 200, 250, 500],\n",
|
||
" #Количество столбцов\n",
|
||
" \"model__max_features\": [\"sqrt\", \"log2\", 2],\n",
|
||
" #Максимальная глубина дерева\n",
|
||
" \"model__max_depth\": [2, 3, 4, 5, 6, 7, 8, 9 ,10],\n",
|
||
" #Критерий оценки качества разбиения\n",
|
||
" \"model__criterion\": [\"gini\", \"entropy\", \"log_loss\"],\n",
|
||
"}\n",
|
||
"#Указываем модель, которую мы хотим оптимизировать\n",
|
||
"#Передаем сетку гиперпараметров для поиска\n",
|
||
"#Указываем, что хотим использовать все доступные процессоры для параллельной обработки\n",
|
||
"gs_optomizer = GridSearchCV(\n",
|
||
" estimator=random_forest_model, param_grid=param_grid, n_jobs=-1\n",
|
||
")\n",
|
||
"#Метод fit запускает процесс поиска по сетке и обучает модель с различными комбинациями гиперпараметров\n",
|
||
"#метод ravel() для преобразования меток в одномерный массив\n",
|
||
"gs_optomizer.fit(X_train, y_train.values.ravel())\n",
|
||
"#выводим наилучшие значения гиперпараметров\n",
|
||
"gs_optomizer.best_params_"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"Обучение модели с новыми гиперпараметрами"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 210,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"optimized_model = ensemble.RandomForestClassifier(\n",
|
||
" random_state=random_state,\n",
|
||
" criterion=\"gini\",\n",
|
||
" max_depth=7,\n",
|
||
" max_features=\"sqrt\",\n",
|
||
" n_estimators=30,\n",
|
||
")\n",
|
||
"\n",
|
||
"result = {}\n",
|
||
"\n",
|
||
"result[\"pipeline\"] = Pipeline([(\"pipeline\", pipeline_end), (\"model\", optimized_model)]).fit(X_train, y_train.values.ravel())\n",
|
||
"result[\"train_preds\"] = result[\"pipeline\"].predict(X_train)\n",
|
||
"result[\"probs\"] = result[\"pipeline\"].predict_proba(X_test)[:, 1]\n",
|
||
"result[\"preds\"] = np.where(result[\"probs\"] > 0.5, 1, 0)\n",
|
||
"\n",
|
||
"result[\"Precision_train\"] = metrics.precision_score(y_train, result[\"train_preds\"])\n",
|
||
"result[\"Precision_test\"] = metrics.precision_score(y_test, result[\"preds\"])\n",
|
||
"result[\"Recall_train\"] = metrics.recall_score(y_train, result[\"train_preds\"])\n",
|
||
"result[\"Recall_test\"] = metrics.recall_score(y_test, result[\"preds\"])\n",
|
||
"result[\"Accuracy_train\"] = metrics.accuracy_score(y_train, result[\"train_preds\"])\n",
|
||
"result[\"Accuracy_test\"] = metrics.accuracy_score(y_test, result[\"preds\"])\n",
|
||
"result[\"ROC_AUC_test\"] = metrics.roc_auc_score(y_test, result[\"probs\"])\n",
|
||
"result[\"F1_train\"] = metrics.f1_score(y_train, result[\"train_preds\"])\n",
|
||
"result[\"F1_test\"] = metrics.f1_score(y_test, result[\"preds\"])\n",
|
||
"result[\"MCC_test\"] = metrics.matthews_corrcoef(y_test, result[\"preds\"])\n",
|
||
"result[\"Cohen_kappa_test\"] = metrics.cohen_kappa_score(y_test, result[\"preds\"])\n",
|
||
"result[\"Confusion_matrix\"] = metrics.confusion_matrix(y_test, result[\"preds\"])"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"Формирование данных для оценки старой и новой версии модели"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"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": 212,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<style type=\"text/css\">\n",
|
||
"#T_703b0_row0_col0, #T_703b0_row0_col1, #T_703b0_row0_col2, #T_703b0_row0_col3, #T_703b0_row1_col0, #T_703b0_row1_col1, #T_703b0_row1_col2, #T_703b0_row1_col3 {\n",
|
||
" background-color: #440154;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_703b0_row0_col4, #T_703b0_row0_col5, #T_703b0_row0_col6, #T_703b0_row0_col7, #T_703b0_row1_col4, #T_703b0_row1_col5, #T_703b0_row1_col6, #T_703b0_row1_col7 {\n",
|
||
" background-color: #0d0887;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"</style>\n",
|
||
"<table id=\"T_703b0\">\n",
|
||
" <thead>\n",
|
||
" <tr>\n",
|
||
" <th class=\"blank level0\" > </th>\n",
|
||
" <th id=\"T_703b0_level0_col0\" class=\"col_heading level0 col0\" >Precision_train</th>\n",
|
||
" <th id=\"T_703b0_level0_col1\" class=\"col_heading level0 col1\" >Precision_test</th>\n",
|
||
" <th id=\"T_703b0_level0_col2\" class=\"col_heading level0 col2\" >Recall_train</th>\n",
|
||
" <th id=\"T_703b0_level0_col3\" class=\"col_heading level0 col3\" >Recall_test</th>\n",
|
||
" <th id=\"T_703b0_level0_col4\" class=\"col_heading level0 col4\" >Accuracy_train</th>\n",
|
||
" <th id=\"T_703b0_level0_col5\" class=\"col_heading level0 col5\" >Accuracy_test</th>\n",
|
||
" <th id=\"T_703b0_level0_col6\" class=\"col_heading level0 col6\" >F1_train</th>\n",
|
||
" <th id=\"T_703b0_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_703b0_level0_row0\" class=\"row_heading level0 row0\" >Old</th>\n",
|
||
" <td id=\"T_703b0_row0_col0\" class=\"data row0 col0\" >1.000000</td>\n",
|
||
" <td id=\"T_703b0_row0_col1\" class=\"data row0 col1\" >1.000000</td>\n",
|
||
" <td id=\"T_703b0_row0_col2\" class=\"data row0 col2\" >1.000000</td>\n",
|
||
" <td id=\"T_703b0_row0_col3\" class=\"data row0 col3\" >1.000000</td>\n",
|
||
" <td id=\"T_703b0_row0_col4\" class=\"data row0 col4\" >1.000000</td>\n",
|
||
" <td id=\"T_703b0_row0_col5\" class=\"data row0 col5\" >1.000000</td>\n",
|
||
" <td id=\"T_703b0_row0_col6\" class=\"data row0 col6\" >1.000000</td>\n",
|
||
" <td id=\"T_703b0_row0_col7\" class=\"data row0 col7\" >1.000000</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_703b0_level0_row1\" class=\"row_heading level0 row1\" >New</th>\n",
|
||
" <td id=\"T_703b0_row1_col0\" class=\"data row1 col0\" >1.000000</td>\n",
|
||
" <td id=\"T_703b0_row1_col1\" class=\"data row1 col1\" >1.000000</td>\n",
|
||
" <td id=\"T_703b0_row1_col2\" class=\"data row1 col2\" >1.000000</td>\n",
|
||
" <td id=\"T_703b0_row1_col3\" class=\"data row1 col3\" >1.000000</td>\n",
|
||
" <td id=\"T_703b0_row1_col4\" class=\"data row1 col4\" >1.000000</td>\n",
|
||
" <td id=\"T_703b0_row1_col5\" class=\"data row1 col5\" >1.000000</td>\n",
|
||
" <td id=\"T_703b0_row1_col6\" class=\"data row1 col6\" >1.000000</td>\n",
|
||
" <td id=\"T_703b0_row1_col7\" class=\"data row1 col7\" >1.000000</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n"
|
||
],
|
||
"text/plain": [
|
||
"<pandas.io.formats.style.Styler at 0x21f4cb4fe90>"
|
||
]
|
||
},
|
||
"execution_count": 212,
|
||
"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": 213,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<style type=\"text/css\">\n",
|
||
"#T_0ba78_row0_col0, #T_0ba78_row0_col1, #T_0ba78_row1_col0, #T_0ba78_row1_col1 {\n",
|
||
" background-color: #440154;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"#T_0ba78_row0_col2, #T_0ba78_row0_col3, #T_0ba78_row0_col4, #T_0ba78_row1_col2, #T_0ba78_row1_col3, #T_0ba78_row1_col4 {\n",
|
||
" background-color: #0d0887;\n",
|
||
" color: #f1f1f1;\n",
|
||
"}\n",
|
||
"</style>\n",
|
||
"<table id=\"T_0ba78\">\n",
|
||
" <thead>\n",
|
||
" <tr>\n",
|
||
" <th class=\"blank level0\" > </th>\n",
|
||
" <th id=\"T_0ba78_level0_col0\" class=\"col_heading level0 col0\" >Accuracy_test</th>\n",
|
||
" <th id=\"T_0ba78_level0_col1\" class=\"col_heading level0 col1\" >F1_test</th>\n",
|
||
" <th id=\"T_0ba78_level0_col2\" class=\"col_heading level0 col2\" >ROC_AUC_test</th>\n",
|
||
" <th id=\"T_0ba78_level0_col3\" class=\"col_heading level0 col3\" >Cohen_kappa_test</th>\n",
|
||
" <th id=\"T_0ba78_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_0ba78_level0_row0\" class=\"row_heading level0 row0\" >Old</th>\n",
|
||
" <td id=\"T_0ba78_row0_col0\" class=\"data row0 col0\" >1.000000</td>\n",
|
||
" <td id=\"T_0ba78_row0_col1\" class=\"data row0 col1\" >1.000000</td>\n",
|
||
" <td id=\"T_0ba78_row0_col2\" class=\"data row0 col2\" >1.000000</td>\n",
|
||
" <td id=\"T_0ba78_row0_col3\" class=\"data row0 col3\" >1.000000</td>\n",
|
||
" <td id=\"T_0ba78_row0_col4\" class=\"data row0 col4\" >1.000000</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th id=\"T_0ba78_level0_row1\" class=\"row_heading level0 row1\" >New</th>\n",
|
||
" <td id=\"T_0ba78_row1_col0\" class=\"data row1 col0\" >1.000000</td>\n",
|
||
" <td id=\"T_0ba78_row1_col1\" class=\"data row1 col1\" >1.000000</td>\n",
|
||
" <td id=\"T_0ba78_row1_col2\" class=\"data row1 col2\" >1.000000</td>\n",
|
||
" <td id=\"T_0ba78_row1_col3\" class=\"data row1 col3\" >1.000000</td>\n",
|
||
" <td id=\"T_0ba78_row1_col4\" class=\"data row1 col4\" >1.000000</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n"
|
||
],
|
||
"text/plain": [
|
||
"<pandas.io.formats.style.Styler at 0x21f4cb4ef30>"
|
||
]
|
||
},
|
||
"execution_count": 213,
|
||
"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": 215,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "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AAAAAGAhzKQBgJU5XTJlSYfTt684AgBqCHLNEGbSAAAAAMBCKNLg8wYOHKhevXq5v77uuus0cuTIah/H2rVrZbPZlJube942NptNb731luE+J0+erNatW1dqXF9//bVsNpu2b99eqX5QRVxO8zYAPoFcuzByzeLINUMo0uAVAwcOlM1mk81mk91uV2JioqZOnarS0tIq/+w33nhDjzzyiKG2RgIIqFLlN1ibsQGoMuQaYBC5Zgj3pMFrunfvrgULFqioqEjvvPOO0tPTVatWLU2YMOGstsXFxbLb7aZ8bmRkpCn9AADwa+QaALMwkwavCQwMVExMjOLj4zV8+HClpKTo7bfflvTLUo7HHntMsbGxatq0qSTp0KFDuv322xUREaHIyEjdcsst+vrrr919lpWVafTo0YqIiFDdunU1btw4uc640nLmspCioiKNHz9ecXFxCgwMVGJiol5++WV9/fXX6tq1qySpTp06stlsGjhwoCTJ6XRq+vTpSkhIUHBwsFq1aqXXXnvN43PeeecdNWnSRMHBweratavHOI0aP368mjRpotq1a6tx48Z6+OGHVVJScla7F154QXFxcapdu7Zuv/125eXleRyfN2+emjdvrqCgIDVr1kzPP/98hccCL3G6zNsAVCly7beRayDXjGEmDZYRHBysH3/80f31mjVr5HA4tHr1aklSSUmJ0tLSlJycrA8//FABAQF69NFH1b17d33++eey2+2aOXOmMjIyNH/+fDVv3lwzZ87Um2++qeuvv/68n3vXXXcpMzNTs2fPVqtWrXTw4EH98MMPiouL0+uvv64+ffpoz549cjgcCg4OliRNnz5d//nPfzR37lxdeeWVWr9+vfr166f69eurS5cuOnTokHr37q309HQNHTpUW7du1QMPPFDhn0lYWJgyMjIUGxurHTt2aMiQIQoLC9O4cePcbfbt26elS5dq2bJlys/P1+DBg/W3v/1Nr7zyiiTplVde0cSJE/Xss8+qTZs2+vTTTzVkyBCFhIRowIABFR4TqhnvkwFqLHLtbOQayDVjKNLgdS6XS2vWrNGqVat07733uveHhIRo3rx57uUg//nPf+R0OjVv3jzZbDZJ0oIFCxQREaG1a9cqNTVVTz31lCZMmKDevXtLkubOnatVq1ad97O/+uorLV26VKtXr1ZKSookqXHjxu7j5UtIoqKiFBERIen0Fcpp06bp/fffV3Jysvt7NmzYoBdeeEFdunTRnDlzdMUVV2jmzJmSpKZNm2rHjh365z//WaGfzUMPPeT+8+WXX64xY8ZoyZIlHmFWWFioRYsW6bLLLpMkPfPMM+rZs6dmzpypmJgYTZo0STNnznT/TBISEvTll1/qhRdeIMwAoAqQa+dHrgHGUKTBa5YvX67Q0FCVlJTI6XTqL3/5iyZPnuw+3qJFC4/1+p999pn27dunsLAwj34KCwu1f/9+5eXl6ciRI+rQoYP7WEBAgNq3b3/W0pBy27dvl7+/v7p06WJ43Pv27dPJkyfVrVs3j/3FxcVq06aNJGnXrl0e45DkDr6KePXVVzV79mzt379fBQUFKi0tlcPh8GjTqFEjd5CVf47T6dSePXsUFham/fv3a/DgwRoyZIi7TWlpqcLDwys8HniBSyZdcax8FwAujFz7beQayDVjKNLgNV27dtWcOXNkt9sVGxurgADPv44hISEeXxcUFKhdu3bu5Q6/Vr9+/YsaQ/kyj4ooKCiQJK1YscIjRKTT9yOYJTMzU3379tWUKVOUlpam8PBwLVmyxH0VsyJjfemll84KV39/f9PGiirEshCgxiDXLoxcgyRyzSCKNHhNSEiIEhMTDbdv27atXn31VUVFRZ111a1cgwYNtHnzZl177bWSTl9Z27Ztm9q2bXvO9i1atJDT6dS6devcy0J+rfyKZ1lZmXtfUlKSAgMDlZWVdd4rlc2bN3ffLF7uo48++u2T/JVNmzYpPj5e//jHP9z7vvnmm7PaZWVl6fDhw4qNjXV/jp+fn5o2baro6GjFxsbqwIED6tu3b4U+HwBQMeTahZFrgHE83RE1Rt++fVWvXj3dcsst+vDDD3Xw4EGtXbtW9913n7799ltJ0v3336/HH39cb731lnbv3q2//e1vF3wXzOWXX64BAwZo0KBBeuutt9x9Ll26VJIUHx8vm82m5cuX6/vvv1dBQYHCwsI0ZswYjRo1SgsXLtT+/fv1ySef6JlnntHChQslScOGDdPevXs1duxY7dmzR4sXL1ZGRkaFzvfKK69UVlaWlixZov3792v27Nl68803z2oXFBSkAQMG6LPPPtOHH36o++67T7fffrtiYmIkSVOmTNH06dM1e/ZsffXVV9qxY4cWLFigJ598skLjgZc4neZtACyFXCPXLknkmiEUaagxateurfXr16tRo0bq3bu3mjdvrsGDB6uwsNB9BfKBBx5Q//79NWDAACUnJyssLEy33nrrBfudM2eObrvtNv3tb39Ts2bNNGTIEJ04cUKSdNlll2nKlCl68MEHFR0drREjRkiSHnnkET388MOaPn26mjdvru7du2vFihVKSEiQdHo9/euvv6633npLrVq10ty5czVt2rQKne/NN9+sUaNGacSIEWrdurU2bdqkhx9++Kx2iYmJ6t27t2688UalpqaqZcuWHo8ivueeezRv3jwtWLBALVq0UJcuXZSRkeEeKwDAO8g1cg04H5vrfHeeAgC8Jj8/X+Hh4UqpP1gBfpV/4W2ps1jvf/+y8vLyzrusCgCAqkKuVQz3pAGAlXGDNQDAl5BrhrDcEQAAAAAshJk0ALAyp0umvAzG6dtXHAEANQS5ZghFGgBYmMvllMtV+SdYmdEHAACVRa4Zw3JHAAAAALAQZtIAwMpcLnOWdPj4DdYAgBqCXDOEIg0ArMxl0tp9Hw8zAEANQa4ZwnJHAAAAALAQZtIAwMqcTslmws3RPn6DNQCghiDXDKFIAwArY1kIAMCXkGuGsNwRAAAAACyEmTQAsDCX0ymXCctCfP19MgCAmoFcM4aZNAAAAACwEGbSAMDKWLsPAPAl5JohFGkAYGVOl2QjzAAAPoJcM4TljgAAAABgIcykAYCVuVySzHifjG9fcQQA1BDkmiEUaQBgYS6nSy4TloW4fDzMAAA1A7lmDMsdAQAAAMBCKNIAwMpcTvO2i/Dcc8/p8ssvV1BQkDp06KCPP/7Y5BMEAFxSyDVDKNIAwMJcTpdpW0W9+uqrGj16tCZNmqRPPvlErVq1Ulpamo4ePVoFZwoAuBSQa8ZQpAEAzunJJ5/UkCFDdPfddyspKUlz585V7dq1NX/+fG8PDQCACqtJuUaRBgBW5qVlIcXFxdq2bZtSUlLc+/z8/JSSkqLMzEyzzxIAcKkg1wzh6Y4AYGGlKpFMeIBVqUokSfn5+R77AwMDFRgYeFb7H374QWVlZYqOjvbYHx0drd27d1d+QACASxK5ZgxFGgBYkN1uV0xMjDZkv2Nan6GhoYqLi/PYN2nSJE2ePNm0zwAA4FzItYqhSAMACwoKCtLBgwdVXFxsWp8ul0s2m81j37muNkpSvXr15O/vr5ycHI/9OTk5iomJMW1MAIBLA7lWMRRpAGBRQUFBCgoK8spn2+12tWvXTmvWrFGvXr0kSU6nU2vWrNGIESO8MiYAQM1GrhlHkQYAOKfRo0drwIABat++va6++mo99dRTOnHihO6++25vDw0AgAqrSblGkQYAOKc///nP+v777zVx4kRlZ2erdevWWrly5Vk3XQMAUBPUpFyzuVwuE56vAgAAAAAwA+9JAwAAAAALoUgDAAAAAAuhSAMAAAAAC6FIAwAAAAALoUgDAAAAAAuhSAMAAAAAC6FIAwAAAAALoUgDAAAAAAuhSAMAAAAAC6FIAwAAAAALoUgDAAAAAAuhSAMAAAAAC/n/REJRUHgAzpQAAAAASUVORK5CYII=",
|
||
"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=[\"Less\", \"More\"]\n",
|
||
" ).plot(ax=ax.flat[index])\n",
|
||
"\n",
|
||
"plt.subplots_adjust(top=1, bottom=0, hspace=0.4, wspace=0.3)\n",
|
||
"plt.show()"
|
||
]
|
||
}
|
||
],
|
||
"metadata": {
|
||
"kernelspec": {
|
||
"display_name": "Python 3",
|
||
"language": "python",
|
||
"name": "python3"
|
||
},
|
||
"language_info": {
|
||
"codemirror_mode": {
|
||
"name": "ipython",
|
||
"version": 3
|
||
},
|
||
"file_extension": ".py",
|
||
"mimetype": "text/x-python",
|
||
"name": "python",
|
||
"nbconvert_exporter": "python",
|
||
"pygments_lexer": "ipython3",
|
||
"version": "3.12.5"
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 2
|
||
}
|