Last active
April 13, 2022 11:56
-
-
Save jamm1985/7fd9f2aecee17614af54aa805191446f to your computer and use it in GitHub Desktop.
Lab_15_Intro_to_ML_Classification_part_II.ipynb
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"nbformat": 4, | |
"nbformat_minor": 0, | |
"metadata": { | |
"colab": { | |
"name": "Lab_15_Intro_to_ML_Classification_part_II.ipynb", | |
"provenance": [], | |
"authorship_tag": "ABX9TyPeHhv6+euwp/n4WwUNatil", | |
"include_colab_link": true | |
}, | |
"kernelspec": { | |
"name": "python3", | |
"display_name": "Python 3" | |
}, | |
"language_info": { | |
"name": "python" | |
} | |
}, | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "view-in-github", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"<a href=\"https://colab.research.google.com/gist/jamm1985/7fd9f2aecee17614af54aa805191446f/lab_15_intro_to_ml_classification_part_ii.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"Видео лабораторной: https://youtu.be/lkiFy6LQnSk\n", | |
"\n", | |
"TG: https://t.me/data_science_news\n", | |
"\n", | |
"\n", | |
"\n", | |
"---" | |
], | |
"metadata": { | |
"id": "0t6oCX9hxKL0" | |
} | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"## Введение в ML классификация\n", | |
"\n", | |
"### Часть 1\n", | |
"- Логистическая регрессия (бинарный вариант)\n", | |
"- Оценка качества классификации для бинарного случая\n", | |
"\n", | |
"### Часть 2\n", | |
"- Логистическая регрессия для трёх и более классов\n", | |
"- Линейный/Квадратный дискриминативный анализ \n", | |
"- Оценка качества классификации для бинарного случая и выбор модели" | |
], | |
"metadata": { | |
"id": "AJx5fQI7JsbZ" | |
} | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": { | |
"id": "oIq0XfXXrfqY" | |
}, | |
"outputs": [], | |
"source": [ | |
"import numpy as np\n", | |
"import pandas as pd\n", | |
"\n", | |
"import matplotlib.pylab as plt\n", | |
"\n", | |
"from sklearn.linear_model import LogisticRegression\n", | |
"from sklearn.discriminant_analysis import LinearDiscriminantAnalysis\n", | |
"from sklearn.discriminant_analysis import QuadraticDiscriminantAnalysis\n", | |
"from sklearn.model_selection import train_test_split\n", | |
"from sklearn.model_selection import cross_val_score\n", | |
"from sklearn.metrics import classification_report\n", | |
"from sklearn.metrics import confusion_matrix\n", | |
"from sklearn.metrics import precision_score\n", | |
"from sklearn.metrics import roc_auc_score\n", | |
"from sklearn.metrics import roc_curve, auc\n", | |
"from sklearn.preprocessing import label_binarize\n", | |
"\n", | |
"from itertools import cycle" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"# Данные (геометрические параметры разных сортов пшеницы)" | |
], | |
"metadata": { | |
"id": "b7hvIP10L55h" | |
} | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"# download dataset\n", | |
"# https://archive.ics.uci.edu/ml/datasets/seeds\n", | |
"!wget https://archive.ics.uci.edu/ml/machine-learning-databases/00236/seeds_dataset.txt\n", | |
"!head seeds_dataset.txt\n" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "6apfctsWrvdA", | |
"outputId": "77e6f198-abbc-43e6-f9e2-1ea0a7c0243e" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"--2022-04-13 06:01:15-- https://archive.ics.uci.edu/ml/machine-learning-databases/00236/seeds_dataset.txt\n", | |
"Resolving archive.ics.uci.edu (archive.ics.uci.edu)... 128.195.10.252\n", | |
"Connecting to archive.ics.uci.edu (archive.ics.uci.edu)|128.195.10.252|:443... connected.\n", | |
"HTTP request sent, awaiting response... 200 OK\n", | |
"Length: 9300 (9.1K) [application/x-httpd-php]\n", | |
"Saving to: ‘seeds_dataset.txt’\n", | |
"\n", | |
"seeds_dataset.txt 100%[===================>] 9.08K --.-KB/s in 0s \n", | |
"\n", | |
"2022-04-13 06:01:15 (99.1 MB/s) - ‘seeds_dataset.txt’ saved [9300/9300]\n", | |
"\n", | |
"15.26\t14.84\t0.871\t5.763\t3.312\t2.221\t5.22\t1\n", | |
"14.88\t14.57\t0.8811\t5.554\t3.333\t1.018\t4.956\t1\n", | |
"14.29\t14.09\t0.905\t5.291\t3.337\t2.699\t4.825\t1\n", | |
"13.84\t13.94\t0.8955\t5.324\t3.379\t2.259\t4.805\t1\n", | |
"16.14\t14.99\t0.9034\t5.658\t3.562\t1.355\t5.175\t1\n", | |
"14.38\t14.21\t0.8951\t5.386\t3.312\t2.462\t4.956\t1\n", | |
"14.69\t14.49\t0.8799\t5.563\t3.259\t3.586\t5.219\t1\n", | |
"14.11\t14.1\t0.8911\t5.42\t3.302\t2.7\t\t5\t\t1\n", | |
"16.63\t15.46\t0.8747\t6.053\t3.465\t2.04\t5.877\t1\n", | |
"16.44\t15.25\t0.888\t5.884\t3.505\t1.969\t5.533\t1\n" | |
] | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"# load the data\n", | |
"DATA = pd.read_csv(\n", | |
" \"https://archive.ics.uci.edu/ml/machine-learning-databases/00236/seeds_dataset.txt\",\n", | |
" sep='\\t',\n", | |
" header=None,\n", | |
" names=[\"area\", \"perimeter\", \"compactness\", \"length\", \"width\", \"asymmetry\", \"length_groove\", \"class\"],\n", | |
" on_bad_lines='skip')\n", | |
"DATA" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 423 | |
}, | |
"id": "sI7VPb84nF0I", | |
"outputId": "977e47c3-a445-4c73-f984-f6de95da93cd" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
" area perimeter compactness length width asymmetry length_groove \\\n", | |
"0 15.26 14.84 0.8710 5.763 3.312 2.221 5.220 \n", | |
"1 14.88 14.57 0.8811 5.554 3.333 1.018 4.956 \n", | |
"2 14.29 14.09 0.9050 5.291 3.337 2.699 4.825 \n", | |
"3 13.84 13.94 0.8955 5.324 3.379 2.259 4.805 \n", | |
"4 16.14 14.99 0.9034 5.658 3.562 1.355 5.175 \n", | |
".. ... ... ... ... ... ... ... \n", | |
"205 12.19 13.20 0.8783 5.137 2.981 3.631 4.870 \n", | |
"206 11.23 12.88 0.8511 5.140 2.795 4.325 5.003 \n", | |
"207 13.20 13.66 0.8883 5.236 3.232 8.315 5.056 \n", | |
"208 11.84 13.21 0.8521 5.175 2.836 3.598 5.044 \n", | |
"209 12.30 13.34 0.8684 5.243 2.974 5.637 5.063 \n", | |
"\n", | |
" class \n", | |
"0 1.0 \n", | |
"1 1.0 \n", | |
"2 1.0 \n", | |
"3 1.0 \n", | |
"4 1.0 \n", | |
".. ... \n", | |
"205 3.0 \n", | |
"206 3.0 \n", | |
"207 3.0 \n", | |
"208 3.0 \n", | |
"209 3.0 \n", | |
"\n", | |
"[210 rows x 8 columns]" | |
], | |
"text/html": [ | |
"\n", | |
" <div id=\"df-b5862fc4-4d38-4e60-b8d6-898d46a1447c\">\n", | |
" <div class=\"colab-df-container\">\n", | |
" <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>area</th>\n", | |
" <th>perimeter</th>\n", | |
" <th>compactness</th>\n", | |
" <th>length</th>\n", | |
" <th>width</th>\n", | |
" <th>asymmetry</th>\n", | |
" <th>length_groove</th>\n", | |
" <th>class</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>15.26</td>\n", | |
" <td>14.84</td>\n", | |
" <td>0.8710</td>\n", | |
" <td>5.763</td>\n", | |
" <td>3.312</td>\n", | |
" <td>2.221</td>\n", | |
" <td>5.220</td>\n", | |
" <td>1.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>14.88</td>\n", | |
" <td>14.57</td>\n", | |
" <td>0.8811</td>\n", | |
" <td>5.554</td>\n", | |
" <td>3.333</td>\n", | |
" <td>1.018</td>\n", | |
" <td>4.956</td>\n", | |
" <td>1.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>14.29</td>\n", | |
" <td>14.09</td>\n", | |
" <td>0.9050</td>\n", | |
" <td>5.291</td>\n", | |
" <td>3.337</td>\n", | |
" <td>2.699</td>\n", | |
" <td>4.825</td>\n", | |
" <td>1.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>13.84</td>\n", | |
" <td>13.94</td>\n", | |
" <td>0.8955</td>\n", | |
" <td>5.324</td>\n", | |
" <td>3.379</td>\n", | |
" <td>2.259</td>\n", | |
" <td>4.805</td>\n", | |
" <td>1.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>16.14</td>\n", | |
" <td>14.99</td>\n", | |
" <td>0.9034</td>\n", | |
" <td>5.658</td>\n", | |
" <td>3.562</td>\n", | |
" <td>1.355</td>\n", | |
" <td>5.175</td>\n", | |
" <td>1.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>...</th>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>205</th>\n", | |
" <td>12.19</td>\n", | |
" <td>13.20</td>\n", | |
" <td>0.8783</td>\n", | |
" <td>5.137</td>\n", | |
" <td>2.981</td>\n", | |
" <td>3.631</td>\n", | |
" <td>4.870</td>\n", | |
" <td>3.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>206</th>\n", | |
" <td>11.23</td>\n", | |
" <td>12.88</td>\n", | |
" <td>0.8511</td>\n", | |
" <td>5.140</td>\n", | |
" <td>2.795</td>\n", | |
" <td>4.325</td>\n", | |
" <td>5.003</td>\n", | |
" <td>3.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>207</th>\n", | |
" <td>13.20</td>\n", | |
" <td>13.66</td>\n", | |
" <td>0.8883</td>\n", | |
" <td>5.236</td>\n", | |
" <td>3.232</td>\n", | |
" <td>8.315</td>\n", | |
" <td>5.056</td>\n", | |
" <td>3.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>208</th>\n", | |
" <td>11.84</td>\n", | |
" <td>13.21</td>\n", | |
" <td>0.8521</td>\n", | |
" <td>5.175</td>\n", | |
" <td>2.836</td>\n", | |
" <td>3.598</td>\n", | |
" <td>5.044</td>\n", | |
" <td>3.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>209</th>\n", | |
" <td>12.30</td>\n", | |
" <td>13.34</td>\n", | |
" <td>0.8684</td>\n", | |
" <td>5.243</td>\n", | |
" <td>2.974</td>\n", | |
" <td>5.637</td>\n", | |
" <td>5.063</td>\n", | |
" <td>3.0</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"<p>210 rows × 8 columns</p>\n", | |
"</div>\n", | |
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-b5862fc4-4d38-4e60-b8d6-898d46a1447c')\"\n", | |
" title=\"Convert this dataframe to an interactive table.\"\n", | |
" style=\"display:none;\">\n", | |
" \n", | |
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n", | |
" width=\"24px\">\n", | |
" <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n", | |
" <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n", | |
" </svg>\n", | |
" </button>\n", | |
" \n", | |
" <style>\n", | |
" .colab-df-container {\n", | |
" display:flex;\n", | |
" flex-wrap:wrap;\n", | |
" gap: 12px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-convert {\n", | |
" background-color: #E8F0FE;\n", | |
" border: none;\n", | |
" border-radius: 50%;\n", | |
" cursor: pointer;\n", | |
" display: none;\n", | |
" fill: #1967D2;\n", | |
" height: 32px;\n", | |
" padding: 0 0 0 0;\n", | |
" width: 32px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-convert:hover {\n", | |
" background-color: #E2EBFA;\n", | |
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n", | |
" fill: #174EA6;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-convert {\n", | |
" background-color: #3B4455;\n", | |
" fill: #D2E3FC;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-convert:hover {\n", | |
" background-color: #434B5C;\n", | |
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n", | |
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n", | |
" fill: #FFFFFF;\n", | |
" }\n", | |
" </style>\n", | |
"\n", | |
" <script>\n", | |
" const buttonEl =\n", | |
" document.querySelector('#df-b5862fc4-4d38-4e60-b8d6-898d46a1447c button.colab-df-convert');\n", | |
" buttonEl.style.display =\n", | |
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n", | |
"\n", | |
" async function convertToInteractive(key) {\n", | |
" const element = document.querySelector('#df-b5862fc4-4d38-4e60-b8d6-898d46a1447c');\n", | |
" const dataTable =\n", | |
" await google.colab.kernel.invokeFunction('convertToInteractive',\n", | |
" [key], {});\n", | |
" if (!dataTable) return;\n", | |
"\n", | |
" const docLinkHtml = 'Like what you see? Visit the ' +\n", | |
" '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n", | |
" + ' to learn more about interactive tables.';\n", | |
" element.innerHTML = '';\n", | |
" dataTable['output_type'] = 'display_data';\n", | |
" await google.colab.output.renderOutput(dataTable, element);\n", | |
" const docLink = document.createElement('div');\n", | |
" docLink.innerHTML = docLinkHtml;\n", | |
" element.appendChild(docLink);\n", | |
" }\n", | |
" </script>\n", | |
" </div>\n", | |
" </div>\n", | |
" " | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 3 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"DATA.describe()" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 300 | |
}, | |
"id": "vKXjajLiIEkH", | |
"outputId": "1c09125e-a7a0-494e-9502-10b003d00729" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
" area perimeter compactness length width \\\n", | |
"count 210.000000 210.000000 207.000000 210.000000 209.000000 \n", | |
"mean 14.847524 14.559286 0.871280 5.563918 3.281440 \n", | |
"std 2.909699 1.305959 0.023306 0.719594 0.419907 \n", | |
"min 10.590000 12.410000 0.808100 0.818900 2.630000 \n", | |
"25% 12.270000 13.450000 0.857700 5.244750 2.956000 \n", | |
"50% 14.355000 14.320000 0.873500 5.518000 3.245000 \n", | |
"75% 17.305000 15.715000 0.887650 5.979750 3.566000 \n", | |
"max 21.180000 17.250000 0.918300 6.675000 5.325000 \n", | |
"\n", | |
" asymmetry length_groove class \n", | |
"count 210.000000 206.000000 206.000000 \n", | |
"mean 3.693530 5.407529 2.084039 \n", | |
"std 1.495112 0.532330 0.948211 \n", | |
"min 0.765100 3.485000 1.000000 \n", | |
"25% 2.600250 5.045000 1.000000 \n", | |
"50% 3.599000 5.226000 2.000000 \n", | |
"75% 4.768750 5.879000 3.000000 \n", | |
"max 8.456000 6.735000 5.439000 " | |
], | |
"text/html": [ | |
"\n", | |
" <div id=\"df-eaa45a61-5d9e-4f32-ba5b-0f48135b3f04\">\n", | |
" <div class=\"colab-df-container\">\n", | |
" <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>area</th>\n", | |
" <th>perimeter</th>\n", | |
" <th>compactness</th>\n", | |
" <th>length</th>\n", | |
" <th>width</th>\n", | |
" <th>asymmetry</th>\n", | |
" <th>length_groove</th>\n", | |
" <th>class</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>count</th>\n", | |
" <td>210.000000</td>\n", | |
" <td>210.000000</td>\n", | |
" <td>207.000000</td>\n", | |
" <td>210.000000</td>\n", | |
" <td>209.000000</td>\n", | |
" <td>210.000000</td>\n", | |
" <td>206.000000</td>\n", | |
" <td>206.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>mean</th>\n", | |
" <td>14.847524</td>\n", | |
" <td>14.559286</td>\n", | |
" <td>0.871280</td>\n", | |
" <td>5.563918</td>\n", | |
" <td>3.281440</td>\n", | |
" <td>3.693530</td>\n", | |
" <td>5.407529</td>\n", | |
" <td>2.084039</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>std</th>\n", | |
" <td>2.909699</td>\n", | |
" <td>1.305959</td>\n", | |
" <td>0.023306</td>\n", | |
" <td>0.719594</td>\n", | |
" <td>0.419907</td>\n", | |
" <td>1.495112</td>\n", | |
" <td>0.532330</td>\n", | |
" <td>0.948211</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>min</th>\n", | |
" <td>10.590000</td>\n", | |
" <td>12.410000</td>\n", | |
" <td>0.808100</td>\n", | |
" <td>0.818900</td>\n", | |
" <td>2.630000</td>\n", | |
" <td>0.765100</td>\n", | |
" <td>3.485000</td>\n", | |
" <td>1.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>25%</th>\n", | |
" <td>12.270000</td>\n", | |
" <td>13.450000</td>\n", | |
" <td>0.857700</td>\n", | |
" <td>5.244750</td>\n", | |
" <td>2.956000</td>\n", | |
" <td>2.600250</td>\n", | |
" <td>5.045000</td>\n", | |
" <td>1.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>50%</th>\n", | |
" <td>14.355000</td>\n", | |
" <td>14.320000</td>\n", | |
" <td>0.873500</td>\n", | |
" <td>5.518000</td>\n", | |
" <td>3.245000</td>\n", | |
" <td>3.599000</td>\n", | |
" <td>5.226000</td>\n", | |
" <td>2.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>75%</th>\n", | |
" <td>17.305000</td>\n", | |
" <td>15.715000</td>\n", | |
" <td>0.887650</td>\n", | |
" <td>5.979750</td>\n", | |
" <td>3.566000</td>\n", | |
" <td>4.768750</td>\n", | |
" <td>5.879000</td>\n", | |
" <td>3.000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>max</th>\n", | |
" <td>21.180000</td>\n", | |
" <td>17.250000</td>\n", | |
" <td>0.918300</td>\n", | |
" <td>6.675000</td>\n", | |
" <td>5.325000</td>\n", | |
" <td>8.456000</td>\n", | |
" <td>6.735000</td>\n", | |
" <td>5.439000</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>\n", | |
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-eaa45a61-5d9e-4f32-ba5b-0f48135b3f04')\"\n", | |
" title=\"Convert this dataframe to an interactive table.\"\n", | |
" style=\"display:none;\">\n", | |
" \n", | |
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n", | |
" width=\"24px\">\n", | |
" <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n", | |
" <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n", | |
" </svg>\n", | |
" </button>\n", | |
" \n", | |
" <style>\n", | |
" .colab-df-container {\n", | |
" display:flex;\n", | |
" flex-wrap:wrap;\n", | |
" gap: 12px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-convert {\n", | |
" background-color: #E8F0FE;\n", | |
" border: none;\n", | |
" border-radius: 50%;\n", | |
" cursor: pointer;\n", | |
" display: none;\n", | |
" fill: #1967D2;\n", | |
" height: 32px;\n", | |
" padding: 0 0 0 0;\n", | |
" width: 32px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-convert:hover {\n", | |
" background-color: #E2EBFA;\n", | |
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n", | |
" fill: #174EA6;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-convert {\n", | |
" background-color: #3B4455;\n", | |
" fill: #D2E3FC;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-convert:hover {\n", | |
" background-color: #434B5C;\n", | |
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n", | |
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n", | |
" fill: #FFFFFF;\n", | |
" }\n", | |
" </style>\n", | |
"\n", | |
" <script>\n", | |
" const buttonEl =\n", | |
" document.querySelector('#df-eaa45a61-5d9e-4f32-ba5b-0f48135b3f04 button.colab-df-convert');\n", | |
" buttonEl.style.display =\n", | |
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n", | |
"\n", | |
" async function convertToInteractive(key) {\n", | |
" const element = document.querySelector('#df-eaa45a61-5d9e-4f32-ba5b-0f48135b3f04');\n", | |
" const dataTable =\n", | |
" await google.colab.kernel.invokeFunction('convertToInteractive',\n", | |
" [key], {});\n", | |
" if (!dataTable) return;\n", | |
"\n", | |
" const docLinkHtml = 'Like what you see? Visit the ' +\n", | |
" '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n", | |
" + ' to learn more about interactive tables.';\n", | |
" element.innerHTML = '';\n", | |
" dataTable['output_type'] = 'display_data';\n", | |
" await google.colab.output.renderOutput(dataTable, element);\n", | |
" const docLink = document.createElement('div');\n", | |
" docLink.innerHTML = docLinkHtml;\n", | |
" element.appendChild(docLink);\n", | |
" }\n", | |
" </script>\n", | |
" </div>\n", | |
" </div>\n", | |
" " | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 126 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"# set int type for dependent variable\n", | |
"DATA = DATA.dropna()\n", | |
"DATA[\"class\"] = DATA[\"class\"].astype('int32')\n", | |
"DATA\n" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 531 | |
}, | |
"id": "g_g_e98PsF-N", | |
"outputId": "e143c03d-31d6-4442-e735-b31ee3c36df7" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stderr", | |
"text": [ | |
"/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:3: SettingWithCopyWarning: \n", | |
"A value is trying to be set on a copy of a slice from a DataFrame.\n", | |
"Try using .loc[row_indexer,col_indexer] = value instead\n", | |
"\n", | |
"See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", | |
" This is separate from the ipykernel package so we can avoid doing imports until\n" | |
] | |
}, | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
" area perimeter compactness length width asymmetry length_groove \\\n", | |
"0 15.26 14.84 0.8710 5.763 3.312 2.221 5.220 \n", | |
"1 14.88 14.57 0.8811 5.554 3.333 1.018 4.956 \n", | |
"2 14.29 14.09 0.9050 5.291 3.337 2.699 4.825 \n", | |
"3 13.84 13.94 0.8955 5.324 3.379 2.259 4.805 \n", | |
"4 16.14 14.99 0.9034 5.658 3.562 1.355 5.175 \n", | |
".. ... ... ... ... ... ... ... \n", | |
"205 12.19 13.20 0.8783 5.137 2.981 3.631 4.870 \n", | |
"206 11.23 12.88 0.8511 5.140 2.795 4.325 5.003 \n", | |
"207 13.20 13.66 0.8883 5.236 3.232 8.315 5.056 \n", | |
"208 11.84 13.21 0.8521 5.175 2.836 3.598 5.044 \n", | |
"209 12.30 13.34 0.8684 5.243 2.974 5.637 5.063 \n", | |
"\n", | |
" class \n", | |
"0 1 \n", | |
"1 1 \n", | |
"2 1 \n", | |
"3 1 \n", | |
"4 1 \n", | |
".. ... \n", | |
"205 3 \n", | |
"206 3 \n", | |
"207 3 \n", | |
"208 3 \n", | |
"209 3 \n", | |
"\n", | |
"[199 rows x 8 columns]" | |
], | |
"text/html": [ | |
"\n", | |
" <div id=\"df-d76e5518-c1e2-4ecc-872b-e7cf3ba929cc\">\n", | |
" <div class=\"colab-df-container\">\n", | |
" <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>area</th>\n", | |
" <th>perimeter</th>\n", | |
" <th>compactness</th>\n", | |
" <th>length</th>\n", | |
" <th>width</th>\n", | |
" <th>asymmetry</th>\n", | |
" <th>length_groove</th>\n", | |
" <th>class</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>15.26</td>\n", | |
" <td>14.84</td>\n", | |
" <td>0.8710</td>\n", | |
" <td>5.763</td>\n", | |
" <td>3.312</td>\n", | |
" <td>2.221</td>\n", | |
" <td>5.220</td>\n", | |
" <td>1</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>14.88</td>\n", | |
" <td>14.57</td>\n", | |
" <td>0.8811</td>\n", | |
" <td>5.554</td>\n", | |
" <td>3.333</td>\n", | |
" <td>1.018</td>\n", | |
" <td>4.956</td>\n", | |
" <td>1</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>14.29</td>\n", | |
" <td>14.09</td>\n", | |
" <td>0.9050</td>\n", | |
" <td>5.291</td>\n", | |
" <td>3.337</td>\n", | |
" <td>2.699</td>\n", | |
" <td>4.825</td>\n", | |
" <td>1</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>13.84</td>\n", | |
" <td>13.94</td>\n", | |
" <td>0.8955</td>\n", | |
" <td>5.324</td>\n", | |
" <td>3.379</td>\n", | |
" <td>2.259</td>\n", | |
" <td>4.805</td>\n", | |
" <td>1</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>16.14</td>\n", | |
" <td>14.99</td>\n", | |
" <td>0.9034</td>\n", | |
" <td>5.658</td>\n", | |
" <td>3.562</td>\n", | |
" <td>1.355</td>\n", | |
" <td>5.175</td>\n", | |
" <td>1</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>...</th>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" <td>...</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>205</th>\n", | |
" <td>12.19</td>\n", | |
" <td>13.20</td>\n", | |
" <td>0.8783</td>\n", | |
" <td>5.137</td>\n", | |
" <td>2.981</td>\n", | |
" <td>3.631</td>\n", | |
" <td>4.870</td>\n", | |
" <td>3</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>206</th>\n", | |
" <td>11.23</td>\n", | |
" <td>12.88</td>\n", | |
" <td>0.8511</td>\n", | |
" <td>5.140</td>\n", | |
" <td>2.795</td>\n", | |
" <td>4.325</td>\n", | |
" <td>5.003</td>\n", | |
" <td>3</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>207</th>\n", | |
" <td>13.20</td>\n", | |
" <td>13.66</td>\n", | |
" <td>0.8883</td>\n", | |
" <td>5.236</td>\n", | |
" <td>3.232</td>\n", | |
" <td>8.315</td>\n", | |
" <td>5.056</td>\n", | |
" <td>3</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>208</th>\n", | |
" <td>11.84</td>\n", | |
" <td>13.21</td>\n", | |
" <td>0.8521</td>\n", | |
" <td>5.175</td>\n", | |
" <td>2.836</td>\n", | |
" <td>3.598</td>\n", | |
" <td>5.044</td>\n", | |
" <td>3</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>209</th>\n", | |
" <td>12.30</td>\n", | |
" <td>13.34</td>\n", | |
" <td>0.8684</td>\n", | |
" <td>5.243</td>\n", | |
" <td>2.974</td>\n", | |
" <td>5.637</td>\n", | |
" <td>5.063</td>\n", | |
" <td>3</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"<p>199 rows × 8 columns</p>\n", | |
"</div>\n", | |
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-d76e5518-c1e2-4ecc-872b-e7cf3ba929cc')\"\n", | |
" title=\"Convert this dataframe to an interactive table.\"\n", | |
" style=\"display:none;\">\n", | |
" \n", | |
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n", | |
" width=\"24px\">\n", | |
" <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n", | |
" <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n", | |
" </svg>\n", | |
" </button>\n", | |
" \n", | |
" <style>\n", | |
" .colab-df-container {\n", | |
" display:flex;\n", | |
" flex-wrap:wrap;\n", | |
" gap: 12px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-convert {\n", | |
" background-color: #E8F0FE;\n", | |
" border: none;\n", | |
" border-radius: 50%;\n", | |
" cursor: pointer;\n", | |
" display: none;\n", | |
" fill: #1967D2;\n", | |
" height: 32px;\n", | |
" padding: 0 0 0 0;\n", | |
" width: 32px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-convert:hover {\n", | |
" background-color: #E2EBFA;\n", | |
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n", | |
" fill: #174EA6;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-convert {\n", | |
" background-color: #3B4455;\n", | |
" fill: #D2E3FC;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-convert:hover {\n", | |
" background-color: #434B5C;\n", | |
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n", | |
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n", | |
" fill: #FFFFFF;\n", | |
" }\n", | |
" </style>\n", | |
"\n", | |
" <script>\n", | |
" const buttonEl =\n", | |
" document.querySelector('#df-d76e5518-c1e2-4ecc-872b-e7cf3ba929cc button.colab-df-convert');\n", | |
" buttonEl.style.display =\n", | |
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n", | |
"\n", | |
" async function convertToInteractive(key) {\n", | |
" const element = document.querySelector('#df-d76e5518-c1e2-4ecc-872b-e7cf3ba929cc');\n", | |
" const dataTable =\n", | |
" await google.colab.kernel.invokeFunction('convertToInteractive',\n", | |
" [key], {});\n", | |
" if (!dataTable) return;\n", | |
"\n", | |
" const docLinkHtml = 'Like what you see? Visit the ' +\n", | |
" '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n", | |
" + ' to learn more about interactive tables.';\n", | |
" element.innerHTML = '';\n", | |
" dataTable['output_type'] = 'display_data';\n", | |
" await google.colab.output.renderOutput(dataTable, element);\n", | |
" const docLink = document.createElement('div');\n", | |
" docLink.innerHTML = docLinkHtml;\n", | |
" element.appendChild(docLink);\n", | |
" }\n", | |
" </script>\n", | |
" </div>\n", | |
" </div>\n", | |
" " | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 4 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"DATA[\"class\"].hist(figsize=(14,10))" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 610 | |
}, | |
"id": "bj-DuuZlpGp1", | |
"outputId": "70bdab88-c017-4cb6-f704-6724eef745cc" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"<matplotlib.axes._subplots.AxesSubplot at 0x7f90b1d37d50>" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 5 | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"<Figure size 1008x720 with 1 Axes>" | |
], | |
"image/png": "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\n" | |
}, | |
"metadata": { | |
"needs_background": "light" | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"# data preparation\n", | |
"X = DATA.loc[:, DATA.columns != 'class'].to_numpy()\n", | |
"y = DATA[\"class\"].to_numpy()\n", | |
"X, y" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "CTD6HwQUpOYi", | |
"outputId": "842a4e0c-0368-4314-f991-bd977e561732" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"(array([[15.26 , 14.84 , 0.871 , ..., 3.312 , 2.221 , 5.22 ],\n", | |
" [14.88 , 14.57 , 0.8811, ..., 3.333 , 1.018 , 4.956 ],\n", | |
" [14.29 , 14.09 , 0.905 , ..., 3.337 , 2.699 , 4.825 ],\n", | |
" ...,\n", | |
" [13.2 , 13.66 , 0.8883, ..., 3.232 , 8.315 , 5.056 ],\n", | |
" [11.84 , 13.21 , 0.8521, ..., 2.836 , 3.598 , 5.044 ],\n", | |
" [12.3 , 13.34 , 0.8684, ..., 2.974 , 5.637 , 5.063 ]]),\n", | |
" array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", | |
" 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", | |
" 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", | |
" 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n", | |
" 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n", | |
" 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n", | |
" 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n", | |
" 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n", | |
" 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n", | |
" 3], dtype=int32))" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 6 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"# split data\n", | |
"X_train, X_test, y_train, y_test = train_test_split(\n", | |
" X, y, test_size=0.33, random_state=0, shuffle=True)\n", | |
"X_train.shape, X_test.shape" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "XvCQEKwJ0c42", | |
"outputId": "6a849e3c-cab0-4f94-c437-66ccf04e2790" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"((133, 7), (66, 7))" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 7 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"plt.hist(y_train)" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 318 | |
}, | |
"id": "llsHJnoz1U_f", | |
"outputId": "d42a22e2-780f-4a67-b36e-81afa809226e" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"(array([44., 0., 0., 0., 0., 49., 0., 0., 0., 40.]),\n", | |
" array([1. , 1.2, 1.4, 1.6, 1.8, 2. , 2.2, 2.4, 2.6, 2.8, 3. ]),\n", | |
" <a list of 10 Patch objects>)" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 8 | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
], | |
"image/png": "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\n" | |
}, | |
"metadata": { | |
"needs_background": "light" | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"plt.hist(y_test)" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 318 | |
}, | |
"id": "X6qMKxiy1ZO4", | |
"outputId": "46a1f5e8-cc14-4f19-e6c7-74309f71cf88" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"(array([22., 0., 0., 0., 0., 19., 0., 0., 0., 25.]),\n", | |
" array([1. , 1.2, 1.4, 1.6, 1.8, 2. , 2.2, 2.4, 2.6, 2.8, 3. ]),\n", | |
" <a list of 10 Patch objects>)" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 9 | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
], | |
"image/png": "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\n" | |
}, | |
"metadata": { | |
"needs_background": "light" | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"# Логистическая регрессия для трех и более классов\n", | |
"\n", | |
"Пусть нам даны пары наблюдений $(Y_1,X_1),...,(Y_n,X_n)$, где $Y_i$ представленна в виде $k$ категорий/классов $\\{1,...,K\\}$, а $X \\in R^d$.\n", | |
"\n", | |
"## Вариант 1 - обобщённая бинарная модель (multinomial logit)\n", | |
"\n", | |
"Модель логистической регрессия применяется для моделирования вероятностей возникновения $K$ взаимоисключающих классов через линейную завистмость от $X$.\n", | |
"\n", | |
"Обобщённый вартант логистической регрессии для $K>2$ классов это мультиномиальная логистическая регрессия.\n", | |
"\n", | |
"$\\mathrm{log}\\frac{\\mathbb{P}(Y=1|X)}{\\mathbb{P}(Y=K|X)}=\\beta_{10}+\\beta_1^TX$\n", | |
"\n", | |
"$\\mathrm{log}\\frac{\\mathbb{P}(Y=2|X)}{\\mathbb{P}(Y=K|X)}=\\beta_{20}+\\beta_2^TX$\n", | |
"\n", | |
"...\n", | |
"\n", | |
"$\\mathrm{log}\\frac{\\mathbb{P}(Y=K-1|X)}{\\mathbb{P}(Y=K|X)}=\\beta_{(K-1)0}+\\beta_{K-1}^TX$\n", | |
"\n", | |
"То есть, модель задаёт $K-1$ уравнений log отношения шансов к $K$ классу в условиях суммы вероятностей возникновения $K$ классов равной 1, то есть:\n", | |
"\n", | |
"$\\mathbb{P}(Y=k|X)=\\frac{\\exp{\\beta_{k0}+\\beta_k^TX}}{1+\\sum_{i=1}^{K-1}\\exp{\\beta_{i0}+\\beta_i^TX}}$, где $k=1,...,K-1$\n", | |
"\n", | |
"$\\mathbb{P}(Y=K|X)=\\frac{1}{1+\\sum_{i=1}^{K-1}\\exp{\\beta_{i0}+\\beta_i^TX}}$.\n", | |
"\n", | |
"Лог-функция максимального правдоподобия **(log-likelihood)** имеет вид:\n", | |
"\n", | |
"$$\\ell(\\theta) = \\Sigma_{i=1}^N \\log p_{gi}(X_i,\\theta)$$\n", | |
"\n", | |
"где $p_k(X_i;\\theta)=\\mathbb{P}(Y=k|X;\\theta)$\n", | |
"\n", | |
"Решения в общем виде не существует, значения $\\theta$ минимизирующие $\\ell(\\theta)$ могут быть получены методами численной оптимизации.\n", | |
"\n", | |
"__Мультиномиальная логистическая регрессия предполагает__ независимость нерелеватных вариантов [https://en.wikipedia.org/wiki/Independence_of_irrelevant_alternatives](https://en.wikipedia.org/wiki/Independence_of_irrelevant_alternatives)\n", | |
"\n", | |
"## Вариант 2 - One vs Rest (OVR)\n", | |
"\n", | |
"OVR это обобщённый метод раширения любого бинарного классификатора для $K>3$ классов. По сути, для каждого отдельного класса, задача сводится к бинарной, то есть для кажого $k$ из $1,...,K$ конструируется новая зависимая переменная $z$, такая что:\n", | |
"\n", | |
"$z_i=1$, если $Y_i=k$\n", | |
"\n", | |
"$z_i=0$, если $Y_i \\neq k$\n", | |
"\n", | |
"Далее, для каждого класса подбираются оптимальные коэффициенты на основе бинарного классификатора (в нашем случае это логистическая регрессия).\n", | |
"\n", | |
"Формируется функция $f_k$ отражающая набор $K$ класисфикаторов (например, $K$ бинарных логистических регрессий). \n", | |
"\n", | |
"Тогда, пронозное значение может быть получено: $\\hat{y}=\\mathrm{argmax}_{k \\in 1...K}f_k(X)$\n", | |
"\n", | |
"## Вартант 3 - One Vs One (OVO)\n", | |
"\n", | |
"В этом подходе, задача сводится к бинарной путём формирования группу классов \"каждый с каждым\", таким образом, получается $\\frac{K(K-1)}{2}$ классификаторов. На этапе вывода, аналогично OVR, прогнозное значение присваивается класисифкатору с наибольшей вероятностью.\n", | |
"\n", | |
"\n" | |
], | |
"metadata": { | |
"id": "F9J2hxvtMlqK" | |
} | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"# logistic regression\n", | |
"# https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html\n", | |
"clf = LogisticRegression(penalty='none', multi_class='ovr', solver='newton-cg')\n", | |
"clf.fit(X_train,y_train)" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "iok-Q9oTsnKP", | |
"outputId": "add021b7-4157-43e4-ff4a-4f0c16bbfc89" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"LogisticRegression(multi_class='ovr', penalty='none', solver='newton-cg')" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 10 | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"# Оценка производительности модели" | |
], | |
"metadata": { | |
"id": "Vca6QMOhknMn" | |
} | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"## Бинарный случай" | |
], | |
"metadata": { | |
"id": "AVjffmCclo86" | |
} | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"\n", | |
"\n", | |
"Fawcett, Tom. \"An introduction to ROC analysis.\" Pattern recognition letters 27.8 (2006): 861-874.\n" | |
], | |
"metadata": { | |
"id": "QOokyUwk0jU7" | |
} | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"## K>3" | |
], | |
"metadata": { | |
"id": "a_Oeji3HlvZR" | |
} | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"$\\mathrm{precision}_k=\\frac{TP_k}{TP_k+\\sum_{i=1}^K FP_{k \\rightarrow i}}$\n", | |
"\n", | |
"$\\mathrm{recall}_k=\\frac{TP_k}{TP_k+\\sum_{i=1}^K FN_{k \\rightarrow i}}$\n", | |
"\n", | |
"$\\mathrm{tpr}_k=\\frac{TP_K}{TP_k+\\sum_{i=1}^K FN_{k \\rightarrow i}}$\n", | |
"\n", | |
"$\\mathrm{fpr}_k=\\frac{FP_K}{|Y \\neq k|}$\n", | |
"\n", | |
"$\\mathrm{macro\\ precision}=\\frac{\\sum_{i=1}^K\\mathrm{precision}_K}{K}$\n", | |
"\n", | |
"$\\mathrm{micro\\ precision}= \\frac{\\sum_{i=1}^K TP_i}{\\sum_{i=1}^K TP_i+\\sum_{i=1}^K\\sum FP_i}$\n", | |
"\n", | |
"\n", | |
"\n" | |
], | |
"metadata": { | |
"id": "fXJLbaPvlzeO" | |
} | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"# Model performance metrics\n", | |
"y_true = y_test\n", | |
"y_pred = clf.predict(X_test)\n", | |
"# precision, recall, f1, overall accuracy\n", | |
"print(classification_report(y_true,y_pred))\n", | |
"\n", | |
"y_true, y_pred" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "tY6FIRbZxcYX", | |
"outputId": "9cf19d6d-a8e6-4092-ac46-f3cbed66f453" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
" precision recall f1-score support\n", | |
"\n", | |
" 1 1.00 0.91 0.95 22\n", | |
" 2 1.00 0.95 0.97 19\n", | |
" 3 0.89 1.00 0.94 25\n", | |
"\n", | |
" accuracy 0.95 66\n", | |
" macro avg 0.96 0.95 0.96 66\n", | |
"weighted avg 0.96 0.95 0.95 66\n", | |
"\n" | |
] | |
}, | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"(array([1, 3, 2, 2, 3, 3, 1, 3, 1, 3, 1, 2, 3, 3, 2, 1, 1, 2, 1, 2, 3, 3,\n", | |
" 1, 3, 1, 2, 3, 3, 2, 1, 1, 1, 2, 2, 1, 3, 3, 1, 3, 3, 3, 2, 1, 2,\n", | |
" 3, 1, 1, 2, 2, 3, 2, 3, 2, 2, 3, 1, 1, 2, 1, 1, 2, 3, 3, 1, 3, 3],\n", | |
" dtype=int32),\n", | |
" array([3, 3, 2, 2, 3, 3, 1, 3, 1, 3, 1, 2, 3, 3, 2, 1, 1, 3, 1, 2, 3, 3,\n", | |
" 1, 3, 1, 2, 3, 3, 2, 1, 1, 1, 2, 2, 3, 3, 3, 1, 3, 3, 3, 2, 1, 2,\n", | |
" 3, 1, 1, 2, 2, 3, 2, 3, 2, 2, 3, 1, 1, 2, 1, 1, 2, 3, 3, 1, 3, 3],\n", | |
" dtype=int32))" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 11 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"# confusion matrix for the best threshold\n", | |
"confusion_matrix(y_pred, y_true)" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "viMOSJh-zQdv", | |
"outputId": "fe332d4c-3199-438e-a598-e779ee4ab383" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"array([[20, 0, 0],\n", | |
" [ 0, 18, 0],\n", | |
" [ 2, 1, 25]])" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 12 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"precision_score(y_true, y_pred, average='micro')" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "eYrVQrBAqbvn", | |
"outputId": "7712e062-87a6-4057-e0ee-ca799a1de7a2" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"0.9545454545454546" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 13 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"precision_score(y_true, y_pred, average='macro')" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "Bx0O4BIIqkSF", | |
"outputId": "47643920-fdf1-4107-8f20-2bcca6cd89f3" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"0.9642857142857143" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 14 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"y_score = clf.predict_proba(X_test)\n", | |
"y_score" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "LbSG6zvBtDek", | |
"outputId": "b08d80c4-2607-4a76-8cb7-d0a31abba47e" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"array([[2.28972552e-001, 8.39075373e-020, 7.71027448e-001],\n", | |
" [3.43475032e-007, 1.69079145e-014, 9.99999657e-001],\n", | |
" [2.75974676e-005, 9.99972403e-001, 3.51162994e-169],\n", | |
" [1.58112169e-009, 9.99999998e-001, 1.03042150e-129],\n", | |
" [4.91270080e-006, 7.71746322e-019, 9.99995087e-001],\n", | |
" [1.72650019e-006, 1.41571111e-013, 9.99998273e-001],\n", | |
" [1.00000000e+000, 5.75086375e-021, 7.95483592e-084],\n", | |
" [1.64773367e-014, 4.52900586e-008, 9.99999955e-001],\n", | |
" [1.00000000e+000, 1.77712925e-031, 2.62594104e-098],\n", | |
" [1.19169001e-008, 7.30929275e-006, 9.99992679e-001],\n", | |
" [1.00000000e+000, 2.24123006e-034, 2.90202093e-089],\n", | |
" [3.74722376e-009, 9.99999996e-001, 5.19403888e-055],\n", | |
" [1.36196231e-011, 6.55523544e-009, 9.99999993e-001],\n", | |
" [1.76699473e-010, 2.06544627e-007, 9.99999793e-001],\n", | |
" [2.16016691e-007, 9.99999784e-001, 1.22329341e-168],\n", | |
" [7.36151405e-001, 2.63848595e-001, 9.03610140e-093],\n", | |
" [1.00000000e+000, 4.37951222e-017, 5.83057434e-078],\n", | |
" [4.50412842e-010, 5.00000000e-001, 5.00000000e-001],\n", | |
" [9.22469156e-001, 1.72575458e-009, 7.75308420e-002],\n", | |
" [5.46144888e-009, 9.99999995e-001, 1.12391788e-131],\n", | |
" [3.17234026e-003, 2.85212171e-015, 9.96827660e-001],\n", | |
" [4.73558633e-011, 3.76867641e-006, 9.99996231e-001],\n", | |
" [1.00000000e+000, 2.40780612e-016, 4.54270534e-069],\n", | |
" [7.40021255e-014, 2.00615585e-005, 9.99979938e-001],\n", | |
" [9.95507827e-001, 2.13296334e-017, 4.49217338e-003],\n", | |
" [5.76144721e-006, 9.99994239e-001, 6.87045991e-128],\n", | |
" [5.36476396e-008, 4.29945746e-019, 9.99999946e-001],\n", | |
" [1.79234723e-010, 5.13039854e-017, 1.00000000e+000],\n", | |
" [1.92081625e-006, 9.99998079e-001, 2.68782561e-128],\n", | |
" [1.00000000e+000, 4.73836907e-027, 1.18295040e-146],\n", | |
" [1.00000000e+000, 7.04778950e-019, 4.45722580e-137],\n", | |
" [1.00000000e+000, 1.26167039e-014, 2.45255932e-084],\n", | |
" [2.89390984e-009, 9.99999997e-001, 1.01816448e-099],\n", | |
" [4.93370281e-002, 9.50662972e-001, 6.69597067e-209],\n", | |
" [9.32990414e-002, 3.40566906e-020, 9.06700959e-001],\n", | |
" [1.02520226e-001, 1.16442761e-011, 8.97479774e-001],\n", | |
" [1.98863317e-008, 7.87527503e-003, 9.92124705e-001],\n", | |
" [1.00000000e+000, 2.65228151e-018, 5.74834249e-147],\n", | |
" [7.25070885e-010, 3.57432611e-006, 9.99996425e-001],\n", | |
" [2.90744068e-004, 5.46738088e-016, 9.99709256e-001],\n", | |
" [9.49038371e-012, 3.10919628e-007, 9.99999689e-001],\n", | |
" [1.67326130e-006, 9.99998327e-001, 1.29953842e-070],\n", | |
" [1.00000000e+000, 7.57301928e-034, 9.52198152e-075],\n", | |
" [4.33637871e-004, 9.99566362e-001, 1.42245387e-037],\n", | |
" [9.70380910e-009, 4.35432677e-008, 9.99999947e-001],\n", | |
" [1.00000000e+000, 1.18748137e-027, 5.24436451e-120],\n", | |
" [9.99999999e-001, 6.80830071e-010, 2.67382696e-127],\n", | |
" [3.79666874e-005, 9.99962033e-001, 3.95139006e-093],\n", | |
" [1.14489614e-011, 1.00000000e+000, 5.67720040e-131],\n", | |
" [1.09683226e-013, 2.28316978e-012, 1.00000000e+000],\n", | |
" [4.21498605e-007, 9.99999579e-001, 8.37169587e-041],\n", | |
" [3.21654366e-009, 1.32685082e-003, 9.98673146e-001],\n", | |
" [6.83514839e-007, 9.99999316e-001, 1.18329843e-224],\n", | |
" [6.25196037e-007, 9.99999375e-001, 7.81430666e-026],\n", | |
" [2.12543529e-012, 6.67308916e-010, 9.99999999e-001],\n", | |
" [1.00000000e+000, 9.72878131e-020, 5.69707414e-196],\n", | |
" [1.00000000e+000, 3.22446057e-018, 4.20152706e-096],\n", | |
" [7.13452624e-004, 9.99286547e-001, 1.35074386e-185],\n", | |
" [1.00000000e+000, 2.57762112e-024, 5.52655892e-043],\n", | |
" [1.00000000e+000, 3.52168085e-019, 6.71078451e-099],\n", | |
" [7.00190201e-004, 9.99299810e-001, 3.14739566e-083],\n", | |
" [2.99078090e-007, 7.04513952e-018, 9.99999701e-001],\n", | |
" [2.80203168e-009, 2.18169543e-020, 9.99999997e-001],\n", | |
" [1.00000000e+000, 1.47261853e-023, 7.44901568e-077],\n", | |
" [8.67660479e-008, 1.85651340e-014, 9.99999913e-001],\n", | |
" [1.96150822e-008, 3.41343291e-001, 6.58656689e-001]])" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 15 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"# Binarize the output\n", | |
"y = label_binarize(y_test, classes=[1, 2, 3])\n", | |
"n_classes = y.shape[1]\n", | |
"\n", | |
"y" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "mSjZx9xwv-UQ", | |
"outputId": "b8ea6785-dc4c-4951-b9ed-8a43e1fb3de6" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"array([[1, 0, 0],\n", | |
" [0, 0, 1],\n", | |
" [0, 1, 0],\n", | |
" [0, 1, 0],\n", | |
" [0, 0, 1],\n", | |
" [0, 0, 1],\n", | |
" [1, 0, 0],\n", | |
" [0, 0, 1],\n", | |
" [1, 0, 0],\n", | |
" [0, 0, 1],\n", | |
" [1, 0, 0],\n", | |
" [0, 1, 0],\n", | |
" [0, 0, 1],\n", | |
" [0, 0, 1],\n", | |
" [0, 1, 0],\n", | |
" [1, 0, 0],\n", | |
" [1, 0, 0],\n", | |
" [0, 1, 0],\n", | |
" [1, 0, 0],\n", | |
" [0, 1, 0],\n", | |
" [0, 0, 1],\n", | |
" [0, 0, 1],\n", | |
" [1, 0, 0],\n", | |
" [0, 0, 1],\n", | |
" [1, 0, 0],\n", | |
" [0, 1, 0],\n", | |
" [0, 0, 1],\n", | |
" [0, 0, 1],\n", | |
" [0, 1, 0],\n", | |
" [1, 0, 0],\n", | |
" [1, 0, 0],\n", | |
" [1, 0, 0],\n", | |
" [0, 1, 0],\n", | |
" [0, 1, 0],\n", | |
" [1, 0, 0],\n", | |
" [0, 0, 1],\n", | |
" [0, 0, 1],\n", | |
" [1, 0, 0],\n", | |
" [0, 0, 1],\n", | |
" [0, 0, 1],\n", | |
" [0, 0, 1],\n", | |
" [0, 1, 0],\n", | |
" [1, 0, 0],\n", | |
" [0, 1, 0],\n", | |
" [0, 0, 1],\n", | |
" [1, 0, 0],\n", | |
" [1, 0, 0],\n", | |
" [0, 1, 0],\n", | |
" [0, 1, 0],\n", | |
" [0, 0, 1],\n", | |
" [0, 1, 0],\n", | |
" [0, 0, 1],\n", | |
" [0, 1, 0],\n", | |
" [0, 1, 0],\n", | |
" [0, 0, 1],\n", | |
" [1, 0, 0],\n", | |
" [1, 0, 0],\n", | |
" [0, 1, 0],\n", | |
" [1, 0, 0],\n", | |
" [1, 0, 0],\n", | |
" [0, 1, 0],\n", | |
" [0, 0, 1],\n", | |
" [0, 0, 1],\n", | |
" [1, 0, 0],\n", | |
" [0, 0, 1],\n", | |
" [0, 0, 1]])" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 16 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"# Compute ROC curve and ROC area for each class\n", | |
"fpr = dict()\n", | |
"tpr = dict()\n", | |
"roc_auc = dict()\n", | |
"for i in range(n_classes):\n", | |
" fpr[i], tpr[i], _ = roc_curve(y[:, i], y_score[:, i])\n", | |
" roc_auc[i] = auc(fpr[i], tpr[i])\n" | |
], | |
"metadata": { | |
"id": "KKNGX8eaycQs" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"# Compute micro-average ROC curve and ROC area\n", | |
"fpr[\"micro\"], tpr[\"micro\"], _ = roc_curve(y.ravel(), y_score.ravel())\n", | |
"roc_auc[\"micro\"] = auc(fpr[\"micro\"], tpr[\"micro\"])\n", | |
"\n", | |
"fpr,tpr" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "xYFSM-ZXzn8z", | |
"outputId": "4b129a8a-69a9-4c23-a93a-00ea7963a390" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"({0: array([0. , 0. , 0. , 0.02272727, 0.02272727,\n", | |
" 1. ]),\n", | |
" 1: array([0., 0., 0., 1.]),\n", | |
" 2: array([0. , 0. , 0. , 0.02439024, 0.02439024,\n", | |
" 0.04878049, 0.04878049, 1. ]),\n", | |
" 'micro': array([0. , 0. , 0. , 0.00757576, 0.00757576,\n", | |
" 0.01515152, 0.01515152, 0.02272727, 0.02272727, 0.03787879,\n", | |
" 0.03787879, 0.04545455, 0.04545455, 1. ])},\n", | |
" {0: array([0. , 0.63636364, 0.95454545, 0.95454545, 1. ,\n", | |
" 1. ]),\n", | |
" 1: array([0. , 0.05263158, 1. , 1. ]),\n", | |
" 2: array([0. , 0.04, 0.92, 0.92, 0.96, 0.96, 1. , 1. ]),\n", | |
" 'micro': array([0. , 0.21212121, 0.90909091, 0.90909091, 0.92424242,\n", | |
" 0.92424242, 0.95454545, 0.95454545, 0.96969697, 0.96969697,\n", | |
" 0.98484848, 0.98484848, 1. , 1. ])})" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 18 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"roc_auc" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "217DZZGj1PMj", | |
"outputId": "c0693d0f-f27f-4dec-acc4-b4be8e0a72fe" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"{0: 0.9989669421487604,\n", | |
" 1: 1.0,\n", | |
" 2: 0.9970731707317073,\n", | |
" 'micro': 0.9978191000918274}" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 19 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"# source https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html\n", | |
"\n", | |
"lw = 2\n", | |
"\n", | |
"# First aggregate all false positive rates\n", | |
"all_fpr = np.unique(np.concatenate([fpr[i] for i in range(n_classes)]))\n", | |
"\n", | |
"# Then interpolate all ROC curves at this points\n", | |
"mean_tpr = np.zeros_like(all_fpr)\n", | |
"for i in range(n_classes):\n", | |
" mean_tpr += np.interp(all_fpr, fpr[i], tpr[i])\n", | |
"\n", | |
"# Finally average it and compute AUC\n", | |
"mean_tpr /= n_classes\n", | |
"\n", | |
"fpr[\"macro\"] = all_fpr\n", | |
"tpr[\"macro\"] = mean_tpr\n", | |
"roc_auc[\"macro\"] = auc(fpr[\"macro\"], tpr[\"macro\"])\n", | |
"\n", | |
"# Plot all ROC curves\n", | |
"plt.figure(figsize=(14, 10))\n", | |
"plt.plot(\n", | |
" fpr[\"micro\"],\n", | |
" tpr[\"micro\"],\n", | |
" label=\"micro-average ROC curve (area = {0:0.4f})\".format(roc_auc[\"micro\"]),\n", | |
" color=\"deeppink\",\n", | |
" linestyle=\":\",\n", | |
" linewidth=4,\n", | |
")\n", | |
"\n", | |
"plt.plot(\n", | |
" fpr[\"macro\"],\n", | |
" tpr[\"macro\"],\n", | |
" label=\"macro-average ROC curve (area = {0:0.4f})\".format(roc_auc[\"macro\"]),\n", | |
" color=\"navy\",\n", | |
" linestyle=\":\",\n", | |
" linewidth=4,\n", | |
")\n", | |
"\n", | |
"colors = cycle([\"aqua\", \"darkorange\", \"cornflowerblue\"])\n", | |
"for i, color in zip(range(n_classes), colors):\n", | |
" plt.plot(\n", | |
" fpr[i],\n", | |
" tpr[i],\n", | |
" color=color,\n", | |
" lw=lw,\n", | |
" label=\"ROC curve of class {0} (area = {1:0.4f})\".format(i, roc_auc[i]),\n", | |
" )\n", | |
"\n", | |
"plt.plot([0, 1], [0, 1], \"k--\", lw=lw)\n", | |
"plt.xlim([0.0, 1.0])\n", | |
"plt.ylim([0.0, 1.05])\n", | |
"plt.xlabel(\"False Positive Rate\")\n", | |
"plt.ylabel(\"True Positive Rate\")\n", | |
"plt.title(\"Some extension of Receiver operating characteristic to multiclass\")\n", | |
"plt.legend(loc=\"lower right\")\n", | |
"plt.show()" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 621 | |
}, | |
"id": "uOGMsA0o0DdV", | |
"outputId": "e8b9c007-a512-42c8-db9c-18fd78aa6b11" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"<Figure size 1008x720 with 1 Axes>" | |
], | |
"image/png": "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AAAAQHitXLlSF198sXr27KlDhw6pXbt2+vHHH7N1cSRRIAEAAAAIcezYMb300kuqXbu25syZo3Llyumjjz7SW2+9pWLFsv/fEM2+XexqlQw6AQAAABBxzEyfffaZDh8+rPbt2+vll19W0aJFg46VabJvgTT95qATAAAAABHh6NGj2r17t0qUKKGoqCi9+eabWrFihVq2bBl0tEyXfQskAAAAAKn6+eef1aFDBxUoUEDTp09XVFSUqlSpoipVqgQdLRDcgwQAAADkQPHx8XrmmWd03nnnacGCBVqzZo02btwYdKzAUSABAAAAOcySJUvUsGFD9e3bV/Hx8br77rv1888/q2LFikFHCxwFEgAAAJCDPPfcc6pfv75+/PFHVapUSV9++aVef/11FSpUKOhoWUL2K5DG/SyVHOI9Xvgh6DQAAABAlnL06FHFx8erW7duWrp0qS677LKgI2Up2XuQhi37pR5fe89fbhpsFgAAACAAR44c0S+//KJatWpJkh5++GE1bdpUjRo1CjhZ1pS9C6Txy71/K9FcCAAAgJxn0aJFat++vTZv3qzly5erVKlSiomJoThKQfbrYpdYpULSS02CTgEAAABkmsOHD6tv375q0KCBli5dqiJFimjLli1Bx4oIEdeCtC6qtu4a9mcKa5ST+rX956zlkpantA0AAACQPcyfP18dOnTQsmXLZGZ64IEH9MwzzyhfvnxBR4sIEVcgZaSaFWOCjgAAAABkmNdee00PPvigEhISdM4552jMmDG66KKLgo4VUSKyQBrZrdjfEyWH/HPh9u6ZGwYAAADIIs477zxFRUXpwQcfVP/+/Wk1SoeILJAAAAAASAcPHtQnn3yim266SZLUuHFjrVmzhj/4ehqy/yANAAAAQDY0e/Zs1alTR61bt9YXX3xxYj7F0emhQAIAAAAiyIEDB9SzZ081btxYq1atUrVq1VS0aNGgY2UbkdnFbtzPUrsa3nPuOQIAAEAOMXPmTHXs2FGrV69WVFSU+vTpo8cff1yxsbFBR8s2IrMFqec3QScAAAAAMtXEiRN1ySWXaPXq1apRo4Z++OEHPfvssxRHGSwyW5AAAACAHKZFixaqUKGC7rzzTvXt21d58uQJOlK2RIEEAAAAZEH79u3Tyy+/rN69eys2NlZFixbVL7/8wtDdYRaZBdId1YNOAAAAAITN119/rU6dOmnt2rU6dOiQnn32WUmiOMoEkXkP0stNg04AAAAAZLi9e/eqW7duatasmdauXas6deqoTZs2QcfKUSKzQAIAAACyma+++ko1a9bU8OHDFRMTo/79+2vevHmqU6dO0NFylMjsYgcAAABkI3PmzNHll18uSTrvvPM0ZswY1apVK+BUORMFEgAAABCwCy64QDfccIPq1aunhx56SDExMUFHyrHoYgcAAABksr/++ktdu3bVL7/8IkkyM73//vt65JFHKI4CRgsSAAAAkIk+/fRTdenSRZs2bdLKlSs1Y8YMSV6RhOBFZgtSs/eCTgAAAACckl27dqlDhw666qqrtGnTJjVs2FDDhg0LOhYSicwCacn2oBMAAAAAafbRRx8pLi5OY8eOVWxsrF588UXNmjVL1apVCzoaEqGLHQAAABBGW7du1c0336yDBw+qUaNGGj16tKpWrRp0LCSDAgkAAAAIA+eczEylS5fWiy++qCNHjui+++5TdHR00NGQAnPOBZ3hlJSsVMdtn/qFVLtU0FEAAACAk+zcuVP33XefLrvsMnXo0CHoODmSmS10ztVPz7aReQ8SxREAAACyoClTpqh69ep655131LdvXx0+fDjoSDhFkVkgAQAAAFnI9u3bdcstt+jGG2/Utm3bdOmll+q7775Tnjx5go6GU0SBBAAAAJyGyZMnKy4uTu+9957y58+voUOH6uuvv9ZZZ50VdDSkA4M0AAAAAOkUHx+v/v37a/v27fr3v/+tUaNGqUqVKkHHwmmgQAIAAABOgXNOR44cUZ48eRQTE6OxY8dq/vz56tKli6Ki6KAV6SKzQFq8jYEaAAAAkOm2bNmibt26KV++fJowYYIkqV69eqpXr17AyZBRIrPEvWxS0AkAAACQgzjn9PbbbysuLk4ffPCBpk6dqo0bNwYdC2EQmQUSAAAAkEk2b96s6667Trfffrv+/PNPtWjRQsuWLVOFChWCjoYwoEACAAAAkjF+/HjFxcXpo48+UuHChTV69Gh9+umnOuOMM4KOhjCJzHuQapUMOgEAAABygDlz5mj37t1q2bKlRowYQatRDmDOuaAznJKSleq47et+CjoGAAAAsiHnnLZu3aoyZcpIkvbu3auPP/5Yt9xyi8ws4HRIKzNb6Jyrn55t6WIHAAAASNqwYYOuvPJKNW7cWPv375ckFSxYULfeeivFUQ5CgQQAAIAczTmnkSNHKi4uTtOmTdOff/6pZcuWBR0LAaFAAgAAQI61bt06NW/eXF26dNHevXvVqlUrLV++XA0aNAg6GgJCgQQAAIAcacKECapRo4a+/PJLFS9eXBMnTtSUKVNO3H+EnCkyR7EDAAAATlNsbKz27dunG2+8UUOHDlXp0qWDjoQsIDJbkHp8HXQCAAAARJiEhATNnz//xPRNN92kmTNn6v3336c4wgmRWSCNXx50AgAAAESQNWvWqGnTpmrUqJEWL158Yv5FF10UYCpkRZFZIAEAAABpkJCQoMGDB6tWrVr69ttvVaxYMbWTtxYAACAASURBVG3bti3oWMjCuAcJAAAA2dLq1avVqVMnff/995Kktm3batCgQSpRokTAyZCVRWaBNLBJ0AkAAACQhX344Ydq27atDh48qNKlS+v1119Xq1atgo6FCBCZXeza1Qg6AQAAALKwunXrKjo6WrfffruWL19OcYQ0i8wCCQAAAAhx7Ngxvf3220pISJAkVapUSStWrND48eNVrFixgNMhklAgAQAAIKKtWLFCjRs31u23367hw4efmF+hQoUAUyFSUSABAAAgIh09elTPP/+86tatq7lz56p8+fI688wzg46FCBeZgzQAAAAgR1u2bJk6dOhw4g+/duzYUQMHDlSRIkUCToZIR4EEAACAiDJnzhw1adJER44cUYUKFTRy5Ei1aNEi6FjIJiKzi13JIUEnAAAAQEDOP/981a5dW126dNGyZcsojpChaEECAABAlhYfH6+XX35Zd955p8qUKaNcuXLp22+/Vd68eYOOhmwoMluQAAAAkCMsXrxYDRs2VJ8+fdStW7cT8ymOEC4USAAAAMhyjhw5oieffFL169fXjz/+qMqVK6t79+5Bx0IOEJld7Lbz4QAAAMiuFi1apA4dOmjJkiWSpHvuuUfPPfecChQoEHAy5ASRWSABAAAgW9q8ebMuvPBCHTlyRGeeeaZGjRqlJk2aBB0LOQgFEgAAALKMcuXK6f7779fhw4f17LPPKn/+/EFHQg5jzrmgM5ySkpXquO3rfgo6BgAAADLA4cOH1b9/f1188cUnhut2zsnMAk6GSGZmC51z9dOzLS1IAAAACMS8efPUoUMHLV++XBUrVtTq1auVO3duiiMEilHsAAAAkKkOHTqkhx9+WBdeeKGWL1+uc889VxMnTlTu3LmDjgZEaIE07uegEwAAACAd5syZo7p16+qFF16QJPXq1Us//fSTGjVqFHAywBPWAsnMWpjZSjP71cz6JLG8opnNMLMfzWyJmbVM0457fpPRUQEAABBmR44c0S233KJffvlF//rXvzRr1iy9+OKL/NFXZClhuwfJzKIlDZV0uaSNkuab2VTn3PKQ1fpKmuScG25m1SV9KqlyuDIBAAAg8x0fdCF37twaPny4vvvuOz355JOKjY0NOhpwknAO0tBA0q/Oud8kyczelXSdpNACyUkq5D8vLGlzGPMAAAAgEx04cECPPvqo8uTJo+eee06S1LJlS7VsmbZOQ0AQwtnFrrykDSHTG/15oZ6UdLuZbZTXenRvUjsysy5mtsDMFkiS7qie4WEBAACQcb777jvVrl1br776ql555RX98ccfQUcC0iToQRpulTTWOVdBUktJ483spEzOuTecc/VPjGX+ctPMTQkAAIA02b9/v+677z5deuml+vXXX1WjRg3Nnj1bZcuWDToakCbhLJA2STojZLqCPy9UJ0mTJMk5N0dSrKQSYcwEAACAMJkxY4Zq1qypwYMHK1euXHr88ce1cOFC1atXL+hoQJqFs0CaL+kcM6tiZrkl3SJpaqJ11ktqJklmVk1egbQ9jJkAAAAQJoMGDdLvv/+u2rVra968eerXrx9/2wgRJ2yDNDjnjppZd0nTJEVLGu2cW2Zm/SUtcM5NldRT0kgze1DegA3tnXMuXJkAAACQsQ4dOnRiNLrhw4erQYMG6tWrF4URIpZFWj1SslIdt33dT0HHAAAAyNH27Nmj3r1768cff9SsWbOUK1c4B0cGTo2ZLTwxfsEp4p0MAACAU/LFF1/orrvu0vr16xUTE6P58+frwgsvDDoWkCGCHsUufZq9F3QCAACAHOevv/5S586d1bx5c61fv1716tXTokWLKI6QrURmgbSEcRwAAAAy07Rp01SjRg2NGjVKuXPn1oABAzR37lzVqFEj6GhAhqKLHQAAAFK1cuVKbdy4UQ0aNNCYMWNUvXr1oCMBYUGBBAAAgCRt3rxZ5cqVkyR1795dRYsW1a233sqADMjWIrOL3Vdtgk4AAACQbe3atUt33nmn/vWvf2n9+vWSpKioKN1xxx0UR8j2IrNAql0q6AQAAADZ0tSpUxUXF6dx48YpPj5eCxcuDDoSkKkis0ACAABAhtq5c6duv/12XXfddfrjjz900UUXafHixbr++uuDjgZkKtpIAQAAcrjp06frtttu09atW5U3b14NGDBA3bt3V3R0dNDRgExHgQQAAJDDFS9eXDt37tQll1yiUaNG6eyzzw46EhAYutgBAADkQHPmzDnxvE6dOpo5c6ZmzJhBcYQcLzILpMXbgk4AAAAQkbZt26Y2bdqoUaNGmjJlyon5DRs2VFRUZH41BDJSZH4KLpsUdAIAAICI4pzTpEmTFBcXp8mTJyt//vzat29f0LGALId7kAAAALK5rVu36p577tH//vc/SVLTpk01atQoVa5cOdhgQBZEgQQAAJCNzZ8/X1deeaV27typggUL6qWXXtJdd90lMws6GpAlRWaBVKtk0AkAAAAiQrVq1VSoUCHVq1dPI0eOVMWKFYOOBGRpkVkgTb856AQAAABZ0vF7ja666ioVKFBABQoU0MyZM1W2bFlajYA0iMxBGgAAAHCSzZs369prr9Utt9yiPn36nJhfrlw5iiMgjSiQAAAAIpxzTm+99Zbi4uL08ccfq3Dhwqpfv37QsYCIFJld7AAAACBJ2rhxo7p06aLPPvtMknTVVVdpxIgRKl++fMDJgMhEgQQAABChNm7cqLi4OO3Zs0dFixbVoEGDdPvtt9OdDjgNFEgAAAARqkKFCmrZsqUOHjyo4cOHq2zZskFHAiJeZN6D1OProBMAAABkOuec3njjDS1atOjEvLFjx+qDDz6gOAIySGQWSOOXB50AAAAgU61du1ZXXHGF7r77brVv317x8fGSpDx58tClDshAkVkgAQAA5BAJCQkaPny4atasqa+++krFixfXo48+qly5uFMCCAc+WQAAAFnU77//rk6dOmnGjBmSpNatW2vIkCEqVapUwMmA7CsyC6SBTYJOAAAAEFaHDx9W48aNtXnzZpUsWVLDhg3TTTfdFHQsINuLzAKpXY2gEwAAAIRVnjx51K9fP02fPl2DBw9WiRIlgo4E5AjmnAs6wykpWamO277up6BjAAAAZKiEhAQNHjxYuXPn1n/+8x9J3qh1DMAAnDozW+icq5+ebSOzBQkAACAbWb16tTp27KiZM2cqb968uuGGG1S6dGmKIyAAjGIHAAAQkGPHjumVV15RrVq1NHPmTJUpU0YTJ05U6dKlg44G5Fi0IAEAAARg5cqV6tChg+bMmSNJateu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AgUKMHPmTJKSkmjSpInd0URERITMbUHaCFSyLMvHsqzcQAdg0cUXjTEJxhhvY0x5Y0x5YB1w/eJIRMRNbdmyherVq/PMM8+41tWuXVvFkYiISBaSaS1IxpgLlmX1B5YCnsA0Y8x2y7JGAJHGmEXXPoKISPaQkpLCm2++yciRI0lJSeH48eOcPn2aQoUK2R1NRERE/iZTHxRrjPkW+PZv6168yrb1bvjAj142W7iISJYUExND9+7diYmJAeCJJ55g1KhRKo5ERESyKNsmafhX3mlgdwIRkWsyxvDyyy8TGhpKTEwM5cuXZ/ny5XzwwQcqjkRERLIw9yyQRESyOMuy2LNnDxcuXKB///5s3bqVBg30xx0REZGsznK3J7UXLxdk4vfF2B1DROQy58+fJy4ujrJlywLw559/sn37durWrWtzMhERkZzFsqwo1yOC/iG1IImI3AKRkZGEhITQrFkzkpOTAfD29lZxJCIi4mZUIImI/Avnz59n+PDh3H///Wzbto2zZ89y8OBBu2OJiIjITVKBJCJykzZs2EBwcDBvvPEGaWlpPP3002zevJkKFSrYHU1ERERuknsWSOFz7U4gIjncq6++So0aNdixYwf33Xcfa9as4e233yZ//vx2RxMREZF/wT0LpC3xdicQkRyuVKlSAAwZMoSYmBhq1qxpcyIRERG5FTL1QbEiItnF2bNn2bhxI3Xq1AGgR48eVK9eHafTaXMyERERuZXcswVJROQ2+umnnwgKCqJp06bs3bsXSH/OkYojERGR7Mc9C6Rl7exOICI5QFJSEk899RS1a9dmz549+Pj4cPbsWbtjiYiISCZyzwIpsITdCUQkm1u9ejUBAQG89957eHh48PzzzxMdHU1AQIDd0URERCQTaQySiMjfjBs3jgEDBgDgdDqZMWMG1apVszmViIiI3A7u2YIkIpKJGjZsSMGCBXnhhReIiopScSQiIpKDqAVJRHK8xMREPvnkEx577DEsy6JKlSrExsZy55132h1NREREbjMVSCKSoy1fvpxevXoRGxtLwYIF+c9//gOg4khERCSHcs8udpuP2p1ARNzcqVOnePzxx2nYsCGxsbEEBwdrAgYRERFx0wKp4ed2JxARN/b999/j7+/PpEmT8PLy4tVXX2XdunUqkERERERd7EQkZ1mwYAFt2rQBoFq1asyYMUMPfBUREREX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rlwUKFCAgIAAvvvuO44dO0bu3Lld49UbNWrEggULXPs0aJD+yB5fX19iY2OJi4tjw4YNVKxYkQoVKpA7d246dOjg+mzUrl2bZcuW3Z4i0RjjVl/eZQONZI7k5GTj4+NjAFOwYEEzceJEk5qaancsERGRm7Zjx44My/Byhq+rmTQpMsN2vXsvuqnz//7778bT09Ns2bLFpKammuDgYNO9e3eTlpZmFi5caB555BFjjDEJCQkmJSXFGGPM//73P9OqVStjjDEffPCBad26teu1Y8eOGWOMKVeunBk1apQxxphDhw6ZMmXKmKNHj5qUlBRTv3598+WXX16WJSUlxSQkJBhjjImPjzf33nuvSUtLM9HR0aZOnTqu7apUqWL2799vli5danr37m3S0tJMamqqefjhh82qVavM77//bizLMj///LNrn4u5Lly4YOrWrWs2b95szp49a+655x7z22+/GWOM6dChg3n44YeNMcY899xz5uOPPzbGGHPixAlTqVIlk5iYeNm1czgcxhhjzp49a+rVq2c2b95sjDGmZcuWZuHChRm2P3nypClWrJgxxphixYqZkydPXvfn065dO/Puu++6sp88eTLDeY0x5q233jIvvfSSMcaYunXrmieeeML1WkREhFmxYoUxxpg5c+aYnj17GmOMadCggdmzZ48xxph169aZ+vXrX3buadOmmaefftq1fPz4cZOWlmaMMWbKlCmu11566SUTHBxskpKSjDHGdOzY0fz444/GGGP27dtnfH19jTFX/wxd6tSpUyYwMPCKX9u3b79s+yJFiri+T0tLy7B80dKlS03NmjXNmTNnTHx8vPHx8TFjxowxaWlppmzZsmbjxo3GGGMGDBhgnE6nMSb95z9o0CBjjDHr1683np6eJjIy0sybN891DY0xZtasWaZfv36u5YYNG5rIyMjLMvz999wYY4BIc5P1hntO0iCZwsvLi6FDhzJv3jymTp1K+fLl7Y4kIiLi9nx8fPD39wfA4XAQHh6OZVn4+/sTGxsLQEJCAl27dmXv3r1YluUaa7Ns2TIef/xxcuVKv2W74447XMdt3749ABs3bqRevXoUL14cgM6dO7N69WpatGiRIYcxhuHDh7N69Wo8PDw4dOgQcXFxVK1alaNHj3L48GHi4+MpVqwYZcqUYezYsXz//fdUrVoVSG+B2rt3L2XLlqVc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FezQoUMMHDiQnTt3AvD4448zffr0QlNeKqWUUkoppcpe1RxiF/RpRUdQaurUqcOPP/7IXXfdxdq1a5k3b54mR0oppZRSSlWQqtmDtDetoiP4XZKSknB2dsbe3p4///nPrFy5Eg8Pj+suqqaUUkoppZQqe1WzB6mKunTpEi+99BI+Pj4FHmzr1KmTJkdKKaWUUkpVApoglZOEhAQ6dOjA5MmTuXz5sm1BLqWUUkrd2uzs7PD19cXT05MHHniAc+fO2Y59//33dO/enbZt2+Ls7MzUqVO5cgmW1atX4+/vj7u7O+3atWPs2LEVcQklMnDgQLy9vZk5c2axytepU6dM4jhw4ACdOnWiZs2avPHGG9csJyJ0796d8+fPl0kcpaFXr17Ur1+fkJCQa5b57bffCAsLo02bNnTs2JGffvrJduyVV16hTZs2tG3blrVr19r2r1mzhrZt29KmTRteffVV2/4jR47QsWNH2rRpQ1hYmG2h2dmzZ7NgwYLSv8BKomomSLEPVXQExXbp0iVeeOEFAgIC2LNnD05OTsTFxd3SUyMqpZRS6n9q1apFQkIC+/fvp2HDhsyZMweArKwsQkNDmTBhAj/88AN79uxh69atvPPOOwDs37+fp556io8++ojExER27txJmzZtSjW2nJycUq0v388//0x8fDx79+5l9OjRZdJGcTVs2JBZs2bx7LPPXrfcqlWr8PHxualRPeU9JXhkZOQN12maP38+DRo04NChQ4wePZrx48cDluVkoqOj+f7771mzZg2jRo0iNzeX3NxcnnzySVavXk1iYiKffPIJiYmJAIwfP57Ro0dz6NAhGjRowPz58wHLbH9vv/122V5sBaqaCZJP44qOoFh+/vln/P39mTp1Kjk5OURERLB37166detW0aEppZRSfzwzTNm8bkKnTp1ISUkB4OOPP+aee+4hODgYAEdHR2bPnm37C/7rr7/OxIkTcXV1BSw9UU888UShOjMzMxk6dCheXl54e3vz+eefAwV7ZJYuXUp4eDgA4eHhjBw5ko4dOzJu3DhatmxZoFfL2dmZ1NRU0tLS6N+/PwEBAQQEBLBly5ZCbWdnZ9vabteuHXFxcQAEBweTkpKCr68v33zzTYFzUlNT6devHz4+Pvj4+LB169ZC1xMUFISfnx9eXl4sX74cgAsXLtC7d298fHzw9PTk008tk3ZN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\n" | |
}, | |
"metadata": { | |
"needs_background": "light" | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"roc_auc_score(y_true, clf.predict_proba(X_test), multi_class='ovr')" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "rnlbHMGwtNRd", | |
"outputId": "d9ee75a3-e5a5-4538-8544-1575c6c511e8" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"0.9986800376268224" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 145 | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"# Линейный/квадратный дискриминативный анализ" | |
], | |
"metadata": { | |
"id": "0aFi7zTd1wxw" | |
} | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"https://scikit-learn.org/stable/modules/lda_qda.html#lda-qda" | |
], | |
"metadata": { | |
"id": "17lpONwUFfL6" | |
} | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"#LDA \n", | |
"clf_lda = LinearDiscriminantAnalysis()\n", | |
"clf_lda.fit(X_train,y_train)" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "QrGXgkVT13jA", | |
"outputId": "0fa0f69a-adac-4f19-cb4e-988f70f1b3d9" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"LinearDiscriminantAnalysis()" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 21 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"# Model performance metrics\n", | |
"y_true = y_test\n", | |
"y_pred = clf_lda.predict(X_test)\n", | |
"# precision, recall, f1, overall accuracy\n", | |
"print(classification_report(y_true,y_pred))\n", | |
"\n", | |
"y_true, y_pred" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "9CXdp8I00ivu", | |
"outputId": "6c8c62c1-204b-45bd-bf63-c52c76a6eb3d" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
" precision recall f1-score support\n", | |
"\n", | |
" 1 0.95 0.91 0.93 22\n", | |
" 2 0.95 1.00 0.97 19\n", | |
" 3 0.96 0.96 0.96 25\n", | |
"\n", | |
" accuracy 0.95 66\n", | |
" macro avg 0.95 0.96 0.95 66\n", | |
"weighted avg 0.95 0.95 0.95 66\n", | |
"\n" | |
] | |
}, | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"(array([1, 3, 2, 2, 3, 3, 1, 3, 1, 3, 1, 2, 3, 3, 2, 1, 1, 2, 1, 2, 3, 3,\n", | |
" 1, 3, 1, 2, 3, 3, 2, 1, 1, 1, 2, 2, 1, 3, 3, 1, 3, 3, 3, 2, 1, 2,\n", | |
" 3, 1, 1, 2, 2, 3, 2, 3, 2, 2, 3, 1, 1, 2, 1, 1, 2, 3, 3, 1, 3, 3],\n", | |
" dtype=int32),\n", | |
" array([1, 3, 2, 2, 3, 3, 1, 3, 1, 3, 1, 2, 3, 3, 2, 2, 1, 2, 1, 2, 3, 3,\n", | |
" 1, 3, 1, 2, 3, 3, 2, 1, 1, 1, 2, 2, 3, 1, 3, 1, 3, 3, 3, 2, 1, 2,\n", | |
" 3, 1, 1, 2, 2, 3, 2, 3, 2, 2, 3, 1, 1, 2, 1, 1, 2, 3, 3, 1, 3, 3],\n", | |
" dtype=int32))" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 22 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"y_score = clf_lda.predict_proba(X_test)\n", | |
"\n", | |
"# Compute ROC curve and ROC area for each class\n", | |
"fpr = dict()\n", | |
"tpr = dict()\n", | |
"roc_auc = dict()\n", | |
"for i in range(n_classes):\n", | |
" fpr[i], tpr[i], _ = roc_curve(y[:, i], y_score[:, i])\n", | |
" roc_auc[i] = auc(fpr[i], tpr[i])\n", | |
"\n", | |
"# Compute micro-average ROC curve and ROC area\n", | |
"fpr[\"micro\"], tpr[\"micro\"], _ = roc_curve(y.ravel(), y_score.ravel())\n", | |
"roc_auc[\"micro\"] = auc(fpr[\"micro\"], tpr[\"micro\"])\n", | |
"\n", | |
"lw = 2\n", | |
"\n", | |
"# First aggregate all false positive rates\n", | |
"all_fpr = np.unique(np.concatenate([fpr[i] for i in range(n_classes)]))\n", | |
"\n", | |
"# Then interpolate all ROC curves at this points\n", | |
"mean_tpr = np.zeros_like(all_fpr)\n", | |
"for i in range(n_classes):\n", | |
" mean_tpr += np.interp(all_fpr, fpr[i], tpr[i])\n", | |
"\n", | |
"# Finally average it and compute AUC\n", | |
"mean_tpr /= n_classes\n", | |
"\n", | |
"fpr[\"macro\"] = all_fpr\n", | |
"tpr[\"macro\"] = mean_tpr\n", | |
"roc_auc[\"macro\"] = auc(fpr[\"macro\"], tpr[\"macro\"])\n", | |
"\n", | |
"# Plot all ROC curves\n", | |
"plt.figure(figsize=(14, 10))\n", | |
"plt.plot(\n", | |
" fpr[\"micro\"],\n", | |
" tpr[\"micro\"],\n", | |
" label=\"micro-average ROC curve (area = {0:0.4f})\".format(roc_auc[\"micro\"]),\n", | |
" color=\"deeppink\",\n", | |
" linestyle=\":\",\n", | |
" linewidth=4,\n", | |
")\n", | |
"\n", | |
"plt.plot(\n", | |
" fpr[\"macro\"],\n", | |
" tpr[\"macro\"],\n", | |
" label=\"macro-average ROC curve (area = {0:0.4f})\".format(roc_auc[\"macro\"]),\n", | |
" color=\"navy\",\n", | |
" linestyle=\":\",\n", | |
" linewidth=4,\n", | |
")\n", | |
"\n", | |
"colors = cycle([\"aqua\", \"darkorange\", \"cornflowerblue\"])\n", | |
"for i, color in zip(range(n_classes), colors):\n", | |
" plt.plot(\n", | |
" fpr[i],\n", | |
" tpr[i],\n", | |
" color=color,\n", | |
" lw=lw,\n", | |
" label=\"ROC curve of class {0} (area = {1:0.4f})\".format(i, roc_auc[i]),\n", | |
" )\n", | |
"\n", | |
"plt.plot([0, 1], [0, 1], \"k--\", lw=lw)\n", | |
"plt.xlim([0.0, 1.0])\n", | |
"plt.ylim([0.0, 1.05])\n", | |
"plt.xlabel(\"False Positive Rate\")\n", | |
"plt.ylabel(\"True Positive Rate\")\n", | |
"plt.title(\"Some extension of Receiver operating characteristic to multiclass\")\n", | |
"plt.legend(loc=\"lower right\")\n", | |
"plt.show()" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 621 | |
}, | |
"id": "CVYA0dFbAqPt", | |
"outputId": "ece28a01-2e3d-40fc-c402-8a9b787c0227" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"<Figure size 1008x720 with 1 Axes>" | |
], | |
"image/png": "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AOBPTpw4oSFDhqhBgwZauHChxo4dqyNHjgQdK6wisovdSf36tVCBAqkP561+8/88KMOnHSmKAAAAgAzYsGGD4uLitHjxYklS586d9dJLLykmJibgZOEVsS1IPXo0VqdO9VJfIHlxBAAAACBdJ06c0IsvvqgGDRpo8eLFqlKlit555x29/vrrKlPmr79HmtdEZIH0xBN/18svX5H2QqdFS/XLezcAAAAAGWJm+uCDD3T06FF16dJFa9eu1dVXXx10rByTp34oNkXPf/3HcN5+F7uTnfIi68gBAACA8Dh+/Lj27duncuXKSfJ+APbbb79Vu3btAk6WNafyQ7F5v0BKAQUSAAAA4Fm7dq3i4uJUvHhxzZ07VwUKRGQnsz85lQIp8o8eAAAAQKYlJCToqaeeUuPGjbVs2TJt2rRJ27dvDzpW4CiQAAAAgHxm9erVat68uQYMGKCEhATdeeedWrt2rapXrx50tMBRIAEAAAD5yLPPPqumTZvqm2++UY0aNfTJJ59o9OjRKlmyZNDRcoW8VyBNWiuVH+7dnv866DQAAABArnL8+HElJCSoV69eWrNmjS699NKgI+UqEf1Dsen6+aDU9zPv/pDWwWYBAAAAAnDs2DF99913ql+/viTpoYceUuvWrdWiRYuAk+VOebtAmrze+7cGzYUAAADIf1asWKEuXbpox44dWr9+vSpUqKCoqCiKozTkvS52ydUoKb3YKugUAAAAQI45evSoBgwYoGbNmmnNmjUqVaqUfv7556BjRYS814LUua53AwAAAPKhpUuXKi4uTuvWrZOZ6d5779VTTz2lokWLBh0tIuS9AgkAAADIp1555RXdd999SkxM1DnnnKMJEybowgsvDDpWRIn8Aqn88D8/ju8TTA4AAAAgYI0bN1aBAgV03333adCgQbQaZUHkF0gAAABAPnX48GG99957uuGGGyRJLVu21KZNm/jB11OQ9wdpAAAAAPKgRYsWqWHDhurQoYM+/vjjpOkUR6eGAgkAAACIIIcOHdL999+vli1bauPGjapdu7ZKly4ddKw8IzK72E1a+8dIdVxzBAAAgHxiwYIF6tq1q77//nsVKFBA/fv316OPPqqYmJigo+UZkdmCdP/8oBMAAAAAOWratGm6+OKL9f3336tu3br6+uuv9fTTT1McZbPIbEECAAAA8pkrrrhC1apV0+23364B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AQAA5CHff/+9unbtqgULFqhIkSL65z//qYoVK1IcAQFgFDsAAICAnDhxQi+99JLq16+vBQsWqFKlSpo2bZoqVqwYdDQg36IFCQAAIAAbNmxQXFycFi9eLEnq3LmzXnrpJZUpUybgZED+RoEEAAAQgJ49e2rx4sWqUqWKxowZo6uvvjroSAAUqV3syg8POgEAAECmhQ6ONXLkSHXv3l3r1q2jOAJykcgskAAAACLI8ePH9eyzz6pjx45JRVLt2rU1duxYlSpVKuB0AELRxQ4AACCM1q5dq7i4OC1btkyS9NVXX+mCCy4IOBWA1NCCBAAAEAYJCQl66qmn1KRJEy1btkynn366PvzwQ4ojIJeLzBak+D5BJwAAAEjV6tWrFRcXpxUrVkiS7rzzTj3//PMqWbJkwMkApCcyCyQAAIBcbNq0aVqxYoVq1KihcePGqU2bNkFHApBBFEgAAADZ4PDhwypSpIgk6bHHHlNMTIz69u2rEiVKBJwMQGZwDRIAAMApOHbsmB577DHVrl1b+/btkyTFxMToscceozgCIhAFEgAAQBatWLFCTZs21aBBg7Rlyxa9//77QUcCcIookAAAADLp6NGjGjBggJo1a6Y1a9borLPO0vz589WpU6egowE4RZFZIE1aG3QCAACQT61YsUJNmjTRU089pcTERN1zzz1atWqVLrnkkqCjAcgGkVkg3T8/6AQAACCfio+P17p163TOOefoiy++0Msvv6xixYoFHQtANonMAgkAACAHbd++Pel+27Zt9eabb2rlypVq2bJlgKkAhAMFEgAAQCoOHz6sBx54QGeccYYWLVqUNP3GG29U0aJFA0wGIFwis0C6rU7QCQAAQB63aNEiNWzYUC+++KISExO1ZMmSoCMByAGRWSANaR10AgAAkEcdOnRI999/v1q2bKmNGzeqdu3aWrRoke69996gowHIAYWCDgAAAJBbrFmzRtdff72+//57FShQQP3799ejjz6qmJiYoKMByCEUSAAAAL4KFSpo9+7dio2N1YQJE3TeeecFHQlADqNAAgAA+drXX3+txo0bKyoqShUrVtTcuXNVu3ZtRUdHBx0NQAAi8xokAACAU/T777+rT58+Ov/88/XCCy8kTW/YsCHFEZCP0YIEAADync8++0zdunXT5s2bVagQH4cA/CEyW5DaTA86AQAAiEAHDhxQr1691KZNG23evFkNGzbU0qVL9fDDDwcdDUAuEZlfmayODzoBAACIMNu2bdNFF12kLVu2KCoqSv/5z3/Uv39/RUVFBR0NQC4SmQUSAABAJlWtWlU1a9ZU2bJlNWHCBNWvXz/oSAByIQokAACQZ3300UeqVauWatasqQIFCmjmzJkqVaoUrUYAUhWZ1yB92jHoBAAAIBf77bff1L17d11xxRXq3r27nHOSpPLly1McAUhTZLYgNagQdAIAAJBLvf/+++rRo4d++uknFS5cWJdddpkSExNVsGDBoKMBiACRWSABAAAks3fvXvXt21cTJ06UJDVv3lwTJkxQ7dq1gw0GIKJQIAEAgIh35MgRNW7cWJs3b1ZMTIyeeOIJ3XfffbQaAcg0CiQAABDxYmJiFBcXp48++kjjx49XrVq1go4EIELZyYsWI0X5Gg1d/JaVQccAAAABmz17tgoUKKBrr71WknT8+HGZGa1GAGRmy51zTbOybmSOYrdqV9AJAABAQH799Vd16tRJ//jHP9StWzft3r1bklSoUCGKIwCnLDILpEtnBJ0AAAAEYNasWYqNjdW0adNUtGhR/ec//1Hp0qWDjgUgD+EaJAAAkOvFx8frX//6l6ZPny5JuuSSSzRu3DidddZZAScDkNdQIAEAgFyvffv2WrRokYoVK6bnnntOd911lwoUiMyOMAByt8j8y1K/fNAJAABADnrmmWfUpk0brV69Wr1796Y4AhA2jGIHAAByFeec3nzzTa1evVrPPPPMn6abWYDJAESKUxnFji52AAAg1/j555911113afbs2ZKkf/7znzrvvPMkieIIQI6gfRoAAATOOaepU6eqTp06mj17tkqUKKGxY8eqadMsfQEMAFlGCxIAAAjUjh071LNnT73zzjuSpLZt2+rVV19V9erVA04GID+iBQkAAARq0KBBeuedd1SyZEmNGzdOH3zwAcURgMDQggQAAHJc6IALTz/9tA4dOqSnn35a1apVCzgZgPwuMluQ+n4WdAIAAJAFzjmNHz9eF110kY4ePSpJKlOmjCZNmkRxBCBXiMwCafL6oBMAAIBM2rZtm6688kp169ZNCxcu1PTp04OOBAB/EZkFEgAAiBjOOY0dO1axsbH66KOPVLp0aU2ZMkW33XZb0NEA4C+4BgkAAITNli1bdMcdd+iTTz6RJLVv316jRo1SpUqVAk4G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SBfkRBAAAHKjgwcP6oYbbtCHH34oSbr66qs1evRoVa1aNeBkAIBwSLVAMrMZzrmOftc6FzpLknPO1Q97utQMbhXYrgEA+UvRokVVqFAhlS5dWq+88opuueUWmVnQsQAAYWLOuZRnmFV2zu00sxopzXfObQlrslSUr9HQxW9ZGcSuAQD5xNatW5WQkKCzzjpLkvTzzz/LOafKlSsHnAwAkBFmttw51zQr66bacdo5t9O/28s5tyX0JqlXVnYGAEBu5pzTmDFjVLduXd166606ceKEJKlSpUoURwCQT2TkytLLUph2ZXYHAQAgSJs3b9Zll12mnj176sCBA6pcubIOHjwYdCwAQA5LtUAys7v8649qmdnqkNuPklbnXEQAAMInMTFRI0eOVN26dTV37lyVK1dOb775pv773/+qZMmSQccDAOSwtEaxe0PSB5KekdQ/ZPoB59yesKYCACAHOOd0zTXX6P3335ckdejQQcOHD1eFChUCTgYACEpaXeycc26zpN6SDoTcZGZlwh8NAIDwMjNdeumlKl++vGbOnKkZM2ZQHAFAPpfWKHbvOueu9rvUOXnDe5/knHNn5kTA5MrXaOjiD3WX4vsEsXsAQIT74YcftHHjRrVr106SdOLECe3bt09ly5YNOBkAILucyih2qXaxc85d7f97RlaDAQCQWyQmJmrYsGH697//raioKK1bt07VqlVTwYIFKY4AAEnSHcXOzC40s2L+/VvNbIiZVQ9/NAAAssfGjRt18cUX695779Xhw4d1zTXXqEiRIkHHAgDkQhkZ5nuUpENm1kDS/ZI2SZoc1lQAAGSDEydOaPDgwWrQoIEWLlyoSpUq6f/+7/80ZcoUWo0AACnKSIF03HkXKl0nabhzboSkEuGNlQ6uPwIAZECPHj3Ur18/HTlyRJ07d9a6det07bXXBh0LAJCLZaRAOmBm/5Z0m6T3zKyApKjwxgIA4NT16tVLNWrU0LvvvqvXX39dZcowCCsAIG0ZKZBulHRUUlfn3M+Sqkl6IaypgP9n787jbKz7P46/rhmTJWuWyDoiY87sZkZD1rFVTMmuOzsVQiTSXYk2UndCsmSrboSSknRbItlmMXbRMvYY2zDGMMv398fk/EzWMK45M+/n43EezXWda3mfa87kfM53uUREbsKOHTt44403nMs1atRgz549PProozamEhERV3LdAumvouhzoIhlWc2BZGPMrCxPJiIicoNSU1N5++23CQwM5JVXXuHbb791PufhoU4PIiJy425kFru2wEagDdAW2GBZVuusDiYiInIjtm3bRlhYGMOGDePChQv06NGDOnXq2B1LRERc1FXvg3SJl4EQY8xRAMuySgLLgPlZGUxERORaUlJSGD16NK+//jopKSlUqFCBKVOm0KRJE7ujiYiIC7uRMUhuF4ujvxy/wf2yzqxttp5eRETs9+677/Lvf/+blJQUnnnmGbZu3ariSEREbtmNFDrfW5a11LKsLpZldQEWA99lbazrGPSjracXERH7Pffcc9SvX59ly5YxceJEChcubHckERHJAW5kkobBwCTA76/HZGPMkKwOJiIicqnY2FhatmzJ2bNnAShUqBArV64kPDzc5mQiIpKTXLVAsiyrqmVZX1uWtY2MCRreM8YMNMZ8defioQQvewAAIABJREFUiYhIbnfhwgVee+01QkJCWLhwIe++qztNiIhI1rnWJA3TgFnAaqAFMA544k6Euq6nvO1OICIid0B0dDRdu3Zl69atQEa3usGDB9ucSkREcrJrFUiFjDFT/vr5F8uyYu5EoBvyfkO7E4iISBY6f/48I0aMYNSoUaSlpXH//fczbdo06tata3c0ERHJ4a5VIOWzLCsQsP5azn/psjEm+xRMIiKSoyxbtoy33noLy7IYMGAAb775JgUKFLA7loiI5AKWMebKT1jWymvsZ4wxtjTjlKwYYOL3xtpxahERyULGGCzLci6/+OKLPPbYY9SuXdvGVCIi4oosy4o2xgTf1L5XK5CyKxVIIiI5z4YNG+jVqxczZ84kICDA7jgiIuLibqVAsveGryIikqudO3eOF198kVq1arFlyxbefvttuyOJiEgupwJJRERssXbtWgICApzTdr/44ovMmDHD3lAiIpLruWaBFD7X7gQiInKTkpKSGDRoEA899BC7d+/G29ubdevWMWrUKPLnz293PBERyeWuWyBZGf5lWdarfy1XsCwrNOujXcOWeFtPLyIiN+/YsWNMnjwZNzc3hg0bRkxMDKGh9v6zIiIictG1pvm+6CMgHWgIjADOAAuAkCzMJSIiOUhSUhL58uXDzc2NChUqMH36dCpVqkRw8E2NnxUREckyN9LFrqYxpg+QDGCMOQnclaWpREQkx1i1ahW+vr5MmDDBua5169YqjkREJFu6kQIpxbIsd8AAWJZVkowWJfssa2vr6UVE5PoSExPp27cv9evX5/fff2f27Nmkp9v7z4eIiMj13EiB9CHwFVDKsqw3gTXAW1ma6nr8S9l6ehERubYVK1Y4W43y5MnD8OHD+fHHH3Fzc825gUREJPe47hgkY8znlmVFA+GABTxujNmZ5clERMTlnDt3jkGDBjFx4kQAAgICmDFjBv7+/jYnExERuTE3MotdBSAJ+AZYBJz9a52IiEgmHh4eREZG4uHhwciRI9m4caOKIxERcSk3MovdYjLGH1lAPsAT+AVwZGEuERFxEadPn+bChQuUKFGCPHny8Omnn5KSkoKvr6/d0URERP6x67YgGWN8jTF+f/23KhAKrMv6aCIikt0tXboUHx8fevbsiTEGAC8vLxVHIiLisv7xaFljTAxQMwuy3LjNR209vYhIbpeQkECPHj1o1qwZ+/fv5+DBg5w+fdruWCIiIrfsul3sLMsaeMmiGxAEHMqyRDei0RcQ39fWCCIiudV3331Hr169OHjwIHnz5mXEiBEMHDiQPHlupNe2iIhI9nYj/5oVuuTnVDLGJC3ImjgiIpJdGWPo0aMH06ZNA+DBBx9k+vTpeHl52ZxMRETk9rlmgfTXDWILGWNeuEN5REQkm7Isi2LFipEvXz7eeOMNBgwYgLu7u92xREREbivr4qDay56wrDzGmFTLstYZY8LucK6rKlkxwMRXeQmWt7M7iohIjnfixAni4uIICgoCMu5ztH//fh544AGbk4mIiFydZVnRxpjgm9n3Wi1IG8kYbxRrWdYiYB5w9uKTxpgvb+aEt4WKIxGRLLdw4UKeeeYZ8uTJw/bt2ylSpAj58+dXcSQiIjnajYxBygccBxry//dDMoB9BZKIiGSZY8eO0a9fP2bPng1AnTp1OHPmDEWKFLE5mYiISNa7VoFU6q8Z7Lbx/4XRRVfulyciIi5twYIF9O7dm6NHj1KgQAHeeecd+vTpg5vbP74rhIiIiEu6VoHkDhQkc2F0kQokEZEcZsCAAYwdOxaAevXq8cknn3D//ffbnEpEROTOulaBdNgYM+KOJREREVs1adKEqVOnMnr0aJ555hm1GomISK50rQLpSi1HIiKSQxw5coRly5bx5JNPAvDII48QFxdHiRIlbE4mIiJin2t9PRh+x1L8UwNX2J1ARMRlGWOYM2cODoeDTp06sWHDBudzKo5ERCS3u2qBZIw5cSeD/COf7rA7gYiIS/rzzz9p1aoVHTp04Pjx44SHh1O6dGm7Y4mIiGQb6mAuIpILGGP4/PPPcTgcfPXVVxQqVIgpU6awdOlSKlasaHc8ERGRbONG7oMkIiIubvTo0QwdOhSAZs2aMXnyZMqXL29zKhERkezHNVuQ3qtvdwIREZfSqVMnPD09mTZtGt99952KIxERkatwzQKpk4/dCUREsrWDBw/ywgsvkJqaCkCZMmX45Zdf6Nq1K5alSUpFRESuRl3sRERyEGMMM2bM4PnnnychIYHSpUvzwgsvAODh4WFzOhERkexPBZKISA6xf/9+evbsydKlSwFo0aIFHTt2tDmViIiIa3HNLnYiIuJkjGHq1Kk4HA6WLl1KsWLF+Oyzz/j666+577777I4nIiLiUtSCJCLi4r788kt69uwJwOOPP87EiRN1byMREZGbpAJJRMTFtWzZkscff5x27drRrl07TcIgIiJyC1yzi13J8XYnEBGxzR9//MFjjz3G3r17AXBzc+Orr76iffv2Ko5ERERukVqQRERcRHp6OhMnTmTIkCGcPXuW/PnzM2fOHLtjiYiI5CgqkEREXMBvv/1G9+7dWbVqFQBt27Zl3LhxNqcSERHJeVyzi52ISC6Rnp7OuHHj8PPzY9WqVZQqVYr58+czd+5cSpYsaXc8ERGRHMcyxtid4R8pWTHAxO+NtTuGiMgdsXPnTvz8/EhNTaVjx46MHTuWEiVK2B1LREQkW7MsK9oYE3wz+6qLnYhINpOeno6bW0YDf/Xq1Rk9ejSenp48/vjjNicTERHJ+bK0i51lWc0sy/rFsqxfLcsaeo3tWlmWZSzLuqkqT0Qkp/jll1946KGHWLBggXPd888/r+JIRETkDsmyAsmyLHdgAvAw4A10sCzL+wrbFQL6AxuyKouISHaXlpbGmDFjCAgIYN26dbzxxhu4WhdoERGRnCArW5BCgV+NMb8bYy4Ac4DHrrDdSGAUkJyFWUREsq2dO3fy0EMPMXjwYJKTk+nSpQsrVqzQPY1ERERskJUFUllg/yXLB/5a52RZVhBQ3hiz+FoHsiyrl2VZUZZlRd3+mCIi9khNTWXUqFEEBgayfv16ypYty+LFi5k+fTrFihWzO56IiEiuZNs035ZluQHvA4Out60xZrIxJtg5E8WsbVmcTkQk650/f55JkyZx/vx5unfvzvbt23nkkUfsjiUiIpKrZeUsdgeB8pcsl/tr3UWFAB/gx7+6kZQGFlmWFWGMuXZL0aAfoZPPbQ0rInInpKamkpKSQv78+bn77ruZOXMmSUlJNG3a1O5oIiIiQta2IEUCVS3L8rQs6y6gPbDo4pPGmARjTAljTCVjTCVgPXD94khExEVt2bKFmjVr8sILLzjX1alTR8WRiIhINpJlLUjGmFTLsvoCSwF3YJoxZrtlWSOAKGPMomsfQUQkZ0hJSeGdd95h5MiRpKSkcOLECc6cOUOhQoXsjiYiIiJ/k6U3ijXGfAd897d1r15l2/o3fOCnLpstXEQkW4qNjaVr167ExsYC8OyzzzJq1CgVRyIiItmUbZM03JL3G9qdQETkmowxDB8+nJCQEGJjY6lUqRLLly/no48+UnEkIiKSjblmgSQiks1ZlsXu3btJTU2lb9++bN26lYYN9eWOiIhIdme52p3aS1YMMPF7Y+2OISJymfPnz3PkyBEqVKgAwLFjx9i+fTv16tWzOZmIiEjuYllWtPMWQf+QWpBERG6DqKgogoODad68ORcuXACgRIkSKo5ERERcjAokEZFbcP78eYYNG8aDDz7Itm3bOHfuHAcOHLA7loiIiNwkFUgiIjdp48aNBAUF8fbbb5Oens7AgQPZvHkzlStXtjuaiIiI3CTXLJDC59qdQERyuTfeeIOwsDB27NjBAw88wJo1a3jvvfcoUKCA3dFERETkFrhmgbQl3u4EIpLLlSlTBoDBgwcTGxtLrVq1bE4kIiIit0OW3ihWRCSnOHfuHJGRkdStWxeAbt26UbNmTXx8fGxOJiIiIreTa7YgiYjcQT///DMBAQE0a9aMPXv2ABn3OVJxJCIikvO4ZoG0rK3dCUQkF0hKSuL555+nTp067N69G09PT86dO2d3LBEREclCrlkg+ZeyO4GI5HCrV6/Gz8+PDz74ADc3N15++WViYmLw8/OzO5qIiIhkIY1BEhH5m3HjxtGvXz8AfHx8mDFjBjVq1LA5lYiIiNwJrtmCJCKShRo1akTBggV55ZVXiI6OVnEkIiKSi6gFSURyvcTERD777DOefvppLMuievXqxMXFUbx4cbujiYiIyB2mAklEcrXly5fTo0cP4uLiKFiwIP/6178AVByJiIjkUq7ZxW7zUbsTiIiLO336NM888wyNGjUiLi6OoKAgTcAgIiIiLlogNfrC7gQi4sJ++OEHfH19mTRpEh4eHrzxxhusX79eBZKIiIioi52I5C4LFiygdevWANSoUYMZM2bohq8iIiLipAJJRHKVRx99lICAANq1a8cLL7xAnjz636CIiIj8P9fsYudX0u4EIuIiTp06xfPPP8/JkycByJcvH5GRkQwdOlTFkYiIiFzGNT8dLG9ndwIRcQGLFy+mV69eHDp0iMTERKZMmQKgwkhERESuyjVbkEREruHkyZN07tyZ5s2bc+jQIcLCwhg0aJDdsURERMQFqEASkRxl0aJFeHt7M2vWLPLly8d7773HTz/9hJeXl93RRERExAWon4mI5BhbtmzhscceA6B27dpMmzaNBx54wOZUIiIi4kpUIIlIjuHn50e/fv2oXLkyffv2xd3d3e5IIiIi4mLUxU5EXNaxY8fo2LEja9euda4bO3Ys/fv3V3EkIiIiN8U1C6SBK+xOICI2mz9/Pt7e3syePZvnnnsOY4zdkURERCQHcM0C6dMddicQEZscPXqUtm3b0qZNG+Lj42nQoAHz5s3Dsiy7o4mIiEgO4JoFkojkOsYY5s6di8PhYN68eRQsWJCJEyeybNkyKleubHc8ERERySE0SYOIuISEhAT69OnD8ePHCQ8PZ+rUqVSqVMnuWCIiIpLDuGaB9F59uxOIyB1gjMEYg5ubG0WLFuXjjz/mxIkT9OzZU13qREREJEtYrjawuWTFABO/N9buGCKSxQ4fPsyzzz5LaGgow4YNszuOiIiIuBDLsqKNMcE3s6/GIIlItmKM4dNPP8XhcPD111/zwQcfcPbsWbtjiYiISC6hAklEso2DBw/SokULOnXqxMmTJ3n44YeJiYnh7rvvtjuaiIiI5BIqkETEdsYYZsyYgcPhYPHixRQpUoTp06ezePFiypUrZ3c8ERERyUVcc5IGEclRjDHMnDmThIQEmjdvzscff0zZsmXtjiUiIiK5kAokEbGFMYYzZ85QuHBh3Nzc+OSTT/j555/517/+pRnqRERExDau2cWu5Hi7E4jILdi3bx/NmjXjiSee4OJMmpUrV+app55ScSQiIiK2cs0CSURckjGGyZMn4+Pjww8//MCmTZv47bff7I4lIiIi4qQCSUTuiLi4OBo3bszTTz/NmTNnaNmyJdu3b6dKlSp2RxMRERFxUoEkIlluypQp+Pj4sHz5ckqUKMGcOXNYsGABpUuXtjuaiIiISCauOUlDfF+7E4jIP3D48GHOnj1LmzZtGD9+PKVKlbI7koiIiMgVuWaBJCLZWnp6Or/99htVq1YF4KWXXiI4OJhHHnnE5mQiIiIi16YudiJyW/366680aNCAWrVqER8fD4CHh4eKIxEREXEJKpBE5LZIT09n7Nix+Pn5sXr1atzc3Pj111/tjiUiIiLyj6hAEpFbtnv3burWrcuAAQM4d+4cTz75JDt27CAsLMzuaCIiIiL/iMYgicgtmTlzJs888wzJycmULl2aSZMmERERYXcsERERkZvimi1Is7bZnUBE/lK5cmXOnz9Pp06d2L59u4ojERERcWmuWSAN+tHuBCK5VlpaGj/88INzuU6dOmzbto2ZM2dyzz332JhMRERE5Na5ZoEkIrbYsWMHtWrVomnTpixfvty53tvb28ZUIiIiIrePCiQRua7U1FTefvttAgMD2bhxI+XKlcOyLLtjiYiIiNx2rjlJw1P6tlrkTtm2bRtdu3YlKioKgB49ejBmzBiKFCliczIRERGR2881C6T3G9qdQCRXWLRoEa1btyYlJYXy5cszdepUmjRpYncsERERkSzjmgWSiNwRDz30ECVKlCAiIoLRo0dTuHBhuyOJiIiIZCkVSCLidOHCBSZNmkSvXr3Imzcv99xzD9u3b6dYsWJ2RxMRERG5IzRJg4gAsGnTJkJDQ+nXrx8jR450rldxJCIiIrmJCiSRXO7ChQu8+uqrhIaGsnnzZjw9PQkPD7c7loiIiIgt1MVOJBeLjo6ma9eubN26FYDnnnuOt956i4IFC9qcTERERMQerlkghc+F5e3sTiHi0jZt2kTNmjVJS0vj/vvvZ9q0adStW9fuWCIiIiK2cs0CaUu83QlEXF5AQADNmjWjatWqvPnmmxQoUMDuSCIiIiK2c80CSUT+seTkZEaMGEGXLl144IEHsCyLr7/+Gnd3d7ujiYiIiGQbKpBEcoH169fTtWtXdu3axZo1a1i1ahWWZak4EhEREfkb15zFbllbuxOIuIRz584xePBgateuza5du6hWrRqjRo3Csiy7o4mIiIhkS65ZIPmXsjuBSLa3du1aAgICGDNmDAAvvvgimzZtIiwszOZkIiIiItmXutiJ5EDHjx+ncePGJCUl4e3tzfTp0wkNDbU7loiIiEi2pwJJJAcqXrw4b775JkePHuXVV18lX758dkcSERERcQmWMcbuDP9IyYoBJn5vrN0xRLKVs2fPMmzYMIKCgujcubPdcURERERsZVlWtDEm+Gb2VQuSiItbtWoV3bp14/fff6dEiRK0adNG9zQSERERuUmuOUnD5qN2JxCxXWJiIn379qV+/fr8/vvv+Pn5sXTpUhVHIiIiIrfANQukRl/YnUDEVitWrMDX15cJEyaQJ08ehg8fTmRkJEFBQXZHExEREXFp6mIn4mLS0tLo378/cXFxBAQEMGPGDPz9/e2OJSIiIpIjqEAScRFpaWm4u7vj7u7OtGnT+P777xk6dCgeHh52RxMRERHJMVyzQPIraXcCkTsmISGBwYMHc/78eWbOnAlASEgIISEhNicTERERyXk0zbdINvb999/Ts2dPDhw4wF133cXOnTupXLmy3bFEREREsrVbmebbNSdpEMnhTp06Rbdu3Xj44Yc5cOAAISEhxMTEqDgSERERyWIqkESymcWLF+NwOJg+fTp58+Zl1KhRrF27FofDYXc0ERERkRzPNccgieRg33zzDYcOHeLBBx9k2rRpVK9e3e5IIiIiIrmGCiSRbODUqVMULVoUgNGjR+Pr68szzzyDu7u7zclEREREchd1sROx0YkTJ3jqqacICQkhKSkJgMKFC9OnTx8VRyIiIiI2cM0CaeAKuxOI3LKFCxfi7e3NZ599xsGDB4mMjLQ7koiIiEiu55oF0qc77E4gctOOHTtGx44dadmyJUeOHKFOnTps3ryZevXq2R1NREREJNdzzQJJxEV9++23OBwOZs+eTYECBfjwww/58ccfqVq1qt3RRERERARN0iByRyUlJXH06FHq16/P1KlTuf/+++2OJCIiIiKXcM0C6b36dicQuSHGGHbt2uWcqrtNmzYULFiQZs2a4eamBlwRERGR7MY1P6F18rE7gch1HTlyhDZt2uDv78/WrVsBsCyLRx55RMWRiIiISDalT2kit5kxhtmzZ+NwOFiwYAF58+Zlz549dscSERERkRugAknkNvrzzz954okn6NixI8ePH6dx48Zs27aNJ554wu5oIiIiInIDXHMMkkg2tGzZMtq2bcvJkycpVKgQ77//Pt27d8eyLLujiYiIiMgNUoEkcptUqVKFCxcu0KxZMyZPnkz58uXt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viYqKsruOCIikkPt2LEj84oS4zI/rmbm1szbPb88a4P+A+np6SYtLc2286ekpGTZsadPn2769OljjDHm2LFjpnjx4mbfvn3GGGO++eYbExQUZOLj440xxkRHR5vy5cubw4cPG2OMGTJkiOnUqZNJTk42xhjz559/mrlz597WfKmpqbe0/7Fjx0zNmjX/0T5Zeb2vJCQkxKxbt86kp6ebZs2ame++++6ybV544QUzfPhwY4wxO3fuNA0bNjTGGLN161bjcDjM2bNnTUpKigkPDzd79uy5bP+BAwea119/3RiT8fp8fX1NbGysMSbjGl28zjNmzDBvvPHGdTNf9ndujAGizE3WG67ZgiQuafv27c6fa9SowdKlS4mKiqJGjRo2phIREck6cXFxeHl50aVLFx544AGefPJJli1bRu3atalatSobN24EMlpO+vbtC8CRI0do2bIl/v7++Pv7s3btWuLi4qhWrRqdOnXCx8eH/fv3M3jwYHx8fPD19WXu3LlXPP/GjRsJCwsjMDCQWrVq8csvvwA4b8B+Uf369YmKiuLs2bN069aN0NBQAgMD+frrr535IiIiaNiwIeHh4SSYynRfAAAgAElEQVQmJhIeHk5QUBC+vr7O7QBGjhxJtWrVeOihh+jQoQNjxowB4LfffqNZs2bUqFGDOnXqsGvXrmteu+LFi1OlShUOHz4MwKhRo3j33XcpUaIEAEFBQXTu3JkJEyaQlJTElClTGDduHHnz5gXg3nvvpW3btpcdNzIyklq1auHv709oaChnzpzJdP0Bmjdvzo8//ghAwYIFGTRoEP7+/rz99tu0adPGud2PP/5I8+bNAfjhhx8ICwsjKCiINm3akJiYeNm5FyxYQLNmzZzLI0aMICQkBB8fH3r16uVsralfvz4DBgwgODiYsWPHEh0dTb169ahRowZNmzZ1XpMpU6YQEhKCv78/rVq1Iikp6ZrX9HoOHz7M6dOnefDBB7Esi06dOrFw4cLLttuxYwcNGzYEwMvLi7i4OI4cOcLOnTupWbMmBQoUIE+ePNSrV48vv/wy077GGL744gs6dOjgvG5+fn74+/sDGb93d3d3ACIiIpg9e/Ytvaab4ZoFkl9JuxPIP3DmzBl69+6Nj49Ppv+BhoeHc9ddd9mYTEREJOv9+uuvDBo0iF27drFr1y7++9//smbNGsaMGcNbb711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aywWC7GxsQCcPn2a7t274+/vj5+fH199ZZu0a+TIkfj4+GC1WotMgho0aEBwcDBVq1Yt8jO5aO7cufTo0cOx/MADD9CmTRt8fX2ZMWOGY32tWrUYPnw4/v7+rF+/ni+++IK2bdsSEBDAU0895UiaBg8eTFBQEL6+vowePfqKbRdX165duemmm65YJjY2ln79+gHQu3dvli9fjogQGxvLI488QvXq1WnevDktW7Zk48aNbNy4kZYtW+Lu7k61atV45JFHiI2NRURYsWIFvXv3BqBfv358//33gO1abdasGRs3brwux1XRVM5JGiqJBg0aUKdOHVq2bMns2bPp2LFjeYeklFJKqXKSm5vL8uXLGThwIGAbXtemTZsCZVq0aEFWVhaZmZns3LmzWEPqxo0bh5ubGzt27ADg5MmTV93n8OHDrFu3DicnJ3Jzc4mJiWHAgAH89NNPNG3alIYNG/Loo48ybNgw7r77bg4ePEi3bt1ITk4uUM/06dMxxrBjxw52795NaGgoKSkpLFiwgPDwcBITEwu1PXToUDp37kxMTAy5ublkZWUV2O7i4kJMTAy1a9fm2LFjtG/fnoiICBYvXkyjRo1YuHAhABkZGRw/fpyYmBh2796NMaZAonet1q5dy7///W/H8uzZs6lXrx5nz54lODiYXr16Ub9+fU6fPk27du2YNGkSycnJTJgwgbVr11K1alWGDBnC3Llz6du3L//617+oV68eubm5dO3ale3bt2O1Wgu0OXHiRObOnVsolk6dOjF16tQSHUdqaiq33347AM7Ozri5uXH8+HFSU1Np3769o1yTJk0cyfrF8hfX//TTTxw/fpw6deo4HgabvzxAUFAQq1evpm3btiWKsyLTBOk627RpEw0bNuSOO+6gSpUqREdHU6dOHVxdXcs7NKWUUuqvbbhcvUwpOHv2LAEBAaSmpuLt7U1ISMh1rT8uLo7o6GjHct26da+6z0MPPYSTkxMAkZGRjB07lgEDBhAdHU1kZKSj3otDrQAyMzPJysoq0DO1Zs0annvuOQC8vLxo2rQpKSkpVxymtmLFCj777DPA1it26eNNRISXX36ZVatWUaVKFVJTU0lLS8NisTB8+HBeeuklwsPD6dixIzk5Obi4uDBw4EDCw8OveG/O1Zw4caJA78zUqVOJiYkB4NChQ+zZs4f69evj5OREr169AFi+fDmbN28mODgYsH3WDRrYRjp9/fXXzJgxg5ycHI4ePUpSUlKhBCkqKoqoqKgSx1yeGjRowO7du8s7jFJROYfYVUDZ2dmMHDmS9u3b8+STTzpusGzUqJEmR0oppdRf2MV7kA4cOICIOO5B8vHxYfPmzQXK7tu3j1q1alG7dm18fX0Lbb8Wxvxv+F92dnaBbTVr1nS879ChA3v37iU9PZ3vv/+eBx98EIC8vDw2bNhAYmIiiYmJpKamltpECvnNnTuX9PR0Nm/eTGJiIg0bNiQ7O5tWrVqxZcsWLBYLo0aNYuzYsTg7O7Nx40Z69+7NDz/8QFhYWInbdXZ2Ji8vD4CVK1cSFxfH+vXr2bZtG4GBgY5z6OLi4kguRYR+/fo5ztHPP//MmDFj2L9/P++88w7Lly9n+/btdO/evdBnALYepICAgEKvoUOHlvg4GjduzKFDhwDbPWYZGRnUr1+/wHqw9SI2btz4suvr16/PqVOnHPepXVx/UXZ2NjVq1ChxnBWZJkjXwYYNGwgMDGTChAmICFartdRuelRKKaVU5eTq6srUqVOZNGkSOTk5PPbYY6xZs4a4uDjA1vswdOhQRowYAdh6F9544w1SUlIAW8Ly0UcfFao3JCTEkXTB/4bYNWzYkOTkZPLy8hw9IUUxxtCzZ09eeOEFvL29qV+/PmC7jyj/jfhFDZfr2LGjY4hYSkoKBw8exNPT84rnoWvXrnz44YeAbdhhRkZGge0ZGRk0aNCAqlWrEh8fz4EDBwA4cuQIrq6uPP7440RFRbFlyxaysrLIyMjgvvvuY/LkyWzbtu2KbV+Jp6cn+/btc8RQt25dXF1d2b17Nxs2bLjsscyfP98xO/GJEyc4cOAAmZmZ1KxZEzc3N9LS0li0aFGR+0dFRTmSq/yvkg6vA4iIiGDOnDmA7d6zLl26YIwhIiKC6Ohozp07x/79+9mzZw9t27YlODiYPXv2sH//fs6fP090dDQREREYY7j33nuZP38+AHPmzClwj1ZKSgp+fn4ljrNCE5FK9br5Dn+RxDSpCM6cOSMvvviiVKlSRQDx8vKSdevWlXdYSimllLJLSkoq7xCkZs2aBZbDw8Pls88+ExGR7du3S+fOnaVVq1bSokULGTNmjOTl5TnK/uc//5HWrVuLl5eXeHt7S1RUVKH6//jjD+nbt6/4+vqK1WqVb7/9VkREvvnmG3F3d5d27drJM888I/369RMRkX79+sk333xToI5NmzYJIJ9++qljXXp6ujz88MNisVjE29tbnnrqqUJtnz17Vvr37y9+fn4SEBAgK1asEBGR/fv3i6+vb5Hn47fffpOIiAjx8/MTf39/x3eni+cpPT1d2rdvL35+ftK/f3/x8vKS/fv3y+LFi8VisYi/v78EBQXJpk2b5MiRIxIcHCwWi0X8/PwKxH/R0aNHpXHjxnLTTTeJm5ubNG7cWDIyMgqVGzt2rMycOVNERLKzsyUsLEy8vLykR48e0rlzZ4mPjy8Q50XR0dHi7+8vFotFWrduLevXr3ecZw8PD+nSpYv07NlTPvnkkyLPx7W4++675eabbxYXFxdp3LixLF68WEREXn31VYmNjRUR22fSu3dvadGihQQHB8svv/zi2H/8+PHi7u4urVq1kh9//NGxfuHCheLh4SHu7u4yfvx4x/pffvlFgoODpUWLFtK7d2/Jzs52bAsMDJRjx4796WO6Hor6OwcSpIT5hhEpn/G4JXVL0wBJP/MkpD9brnFcuHCB1q1bs3PnTqpUqUJUVBRjxozBxcWlXONSSiml1P8kJyfj7e1d3mGoSuDo0aP07duXZcuWlXcoFd7WrVt59913rzrleFkp6u/cGLNZRIJKUp9O0lBCVatW5cEHHyQvL49PPvnkhpzBQymllFLqr+K2225j0KBBZGZmXtOzkP6Kjh07xrhx48o7jFKjPUjXYPXq1Zw+fdpxA+D58+cREapXr17msSillFLq6rQHSakb3/XuQaqckzRYbynT5k6fPs3zzz9P586d6devH8eOHQOgWrVqmhwppZRSSil1A6mcQ+yWR5ZZU//973954okn2LdvH05OTvzjH/+46hOMlVJKKaWUUpVT5UyQykBWVhYjR450TJtptVr55JNPaN26dTlHppRSSimllCotmiBdRs+ePYmLi8PZ2ZlXXnmFl19+mWrVqpV3WEoppZRSSqlSVDnvQSoDr7zyCq1bt2bTpk2MGTNGkyOllFJKlYiTkxMBAQH4+flx//33c+rUKce2Xbt20aVLFzw9PfHw8GDcuHHkn0Br0aJFBAUF4ePjQ2BgIMOHDy+PQyiRPn36YLVamTx5crHK16pVq1TimDt3LlarFYvFwp133nnZh8mKCF26dCEzM7NU4rge5syZg4eHBx4eHo6HwV5q27ZtdOjQAYvFwv333+84nvPnzzNgwAAsFgv+/v6sXLnSsc+8efOwWCxYrVbCwsIc99ufOHGCkJAQPDw8CAkJcTyE+IcffuC1114r3YMtTyV9gFJ5vW6+w//anx5VDMuWLZOxY8cWWJebm1sqbSmllFKqbFS0B8X27dvX8SDOM2fOiLu7uyxZskRERE6fPi1hYWEybdo0ERHZsWOHuLu7S3JysoiI5OTkyAcffHBdY7tw4cJ1re+io0ePSosWLa5pn0sfwHq9rF27Vk6cOCEiIj/++KO0bdu2yHI//PCD/POf/7ymunNycv50fMV1/Phxad68uRw/flxOnDghzZs3dxxXfkFBQbJy5UoREZk1a5aMGjVKRESmTZsm/fv3FxGRtLQ0ad26teTm5sqFCxfklltukfT0dBERiYqKktGjRzvev/nmmyIi8uabb8qIESNERCQvL08CAgLk9OnTpXrMxXW9HxT7lx9il5mZyYsvvsjMmTMB+Nvf/kaHDh0AqFJFO9iUUkqpG8WgD06USr0zh9QrdtkOHTqwfft2AL788kvuuusuQkNDAXB1dWXatGncc889PPPMM7z99tu88soreHl5AbaeqMGDBxeqMysri+eee46EhASMMYwePZpevXpRq1YtsrKyAJg/fz4//PADn376Kf3798fFxYWtW7dy11138d1335GYmEidOnUA8PDwYM2aNVSpUoWnn36agwcPAvDee+9x1113FWg7OzubwYMHk5CQgLOzM++++y733nsvoaGhpKamEhAQwPvvv0/Hjh0d+6SlpfH000+zb98+AD788EPuvPPOAsfTo0cPTp48yYULFxg/fjw9evTg9OnTPPzwwxw+fJjc3FxeffVVIiMjGTlyJAsWLMDZ2ZnQ0FDeeeedAjHmr7t9+/YcPny4yM9m7ty5/OMf/3AsP/DAAxw6dIjs7Gyef/55x7ZatWrx1FNPERcXx/Tp0/n111+ZOnUq58+fp127dnzwwQeOz2rTpk2cPXuW3r178/rrrxd9URTTkiVLCAkJoV492/UWEhLC4sWL6dOnT4FyKSkpdOrUyVGmW7dujBs3jqSkJLp06QJAgwYNqFOnDgkJCQQGBiIinD59mvr165OZmUnLli0BiI2NdfQ09evXj3vuuYcJEyZgjOGee+7hhx9+4OGHH/5Tx1URVc4E6YUV8G6XP13NkiVL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\n" | |
}, | |
"metadata": { | |
"needs_background": "light" | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"roc_auc_score(y_true, clf_lda.predict_proba(X_test), multi_class='ovr')" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "hR-vZGLr-Av0", | |
"outputId": "51cabe1a-7fa8-4d13-e61d-4e15ac78f9eb" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"0.9983165356446952" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 24 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"#QDA \n", | |
"clf_qda = QuadraticDiscriminantAnalysis()\n", | |
"clf_qda.fit(X_train,y_train)" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "DkUyDyTN2t1n", | |
"outputId": "e44ab814-2aa5-45c6-eb7f-2b2ac6693580" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"QuadraticDiscriminantAnalysis()" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 25 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"# Model performance metrics\n", | |
"y_true = y_test\n", | |
"y_pred = clf_qda.predict(X_test)\n", | |
"# precision, recall, f1, overall accuracy\n", | |
"print(classification_report(y_true,y_pred))\n", | |
"\n", | |
"y_true, y_pred" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "CytsxxAo3DTv", | |
"outputId": "50f446f7-8e2a-4ee2-ff95-1a722a5a855d" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
" precision recall f1-score support\n", | |
"\n", | |
" 1 0.95 0.86 0.90 22\n", | |
" 2 0.95 1.00 0.97 19\n", | |
" 3 0.92 0.96 0.94 25\n", | |
"\n", | |
" accuracy 0.94 66\n", | |
" macro avg 0.94 0.94 0.94 66\n", | |
"weighted avg 0.94 0.94 0.94 66\n", | |
"\n" | |
] | |
}, | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"(array([1, 3, 2, 2, 3, 3, 1, 3, 1, 3, 1, 2, 3, 3, 2, 1, 1, 2, 1, 2, 3, 3,\n", | |
" 1, 3, 1, 2, 3, 3, 2, 1, 1, 1, 2, 2, 1, 3, 3, 1, 3, 3, 3, 2, 1, 2,\n", | |
" 3, 1, 1, 2, 2, 3, 2, 3, 2, 2, 3, 1, 1, 2, 1, 1, 2, 3, 3, 1, 3, 3],\n", | |
" dtype=int32),\n", | |
" array([3, 3, 2, 2, 3, 3, 1, 3, 1, 3, 1, 2, 3, 3, 2, 2, 1, 2, 1, 2, 3, 3,\n", | |
" 1, 3, 1, 2, 3, 3, 2, 1, 1, 1, 2, 2, 3, 1, 3, 1, 3, 3, 3, 2, 1, 2,\n", | |
" 3, 1, 1, 2, 2, 3, 2, 3, 2, 2, 3, 1, 1, 2, 1, 1, 2, 3, 3, 1, 3, 3],\n", | |
" dtype=int32))" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 26 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"y_score = clf_qda.predict_proba(X_test)\n", | |
"\n", | |
"# Compute ROC curve and ROC area for each class\n", | |
"fpr = dict()\n", | |
"tpr = dict()\n", | |
"roc_auc = dict()\n", | |
"for i in range(n_classes):\n", | |
" fpr[i], tpr[i], _ = roc_curve(y[:, i], y_score[:, i])\n", | |
" roc_auc[i] = auc(fpr[i], tpr[i])\n", | |
"\n", | |
"# Compute micro-average ROC curve and ROC area\n", | |
"fpr[\"micro\"], tpr[\"micro\"], _ = roc_curve(y.ravel(), y_score.ravel())\n", | |
"roc_auc[\"micro\"] = auc(fpr[\"micro\"], tpr[\"micro\"])\n", | |
"\n", | |
"lw = 2\n", | |
"\n", | |
"# First aggregate all false positive rates\n", | |
"all_fpr = np.unique(np.concatenate([fpr[i] for i in range(n_classes)]))\n", | |
"\n", | |
"# Then interpolate all ROC curves at this points\n", | |
"mean_tpr = np.zeros_like(all_fpr)\n", | |
"for i in range(n_classes):\n", | |
" mean_tpr += np.interp(all_fpr, fpr[i], tpr[i])\n", | |
"\n", | |
"# Finally average it and compute AUC\n", | |
"mean_tpr /= n_classes\n", | |
"\n", | |
"fpr[\"macro\"] = all_fpr\n", | |
"tpr[\"macro\"] = mean_tpr\n", | |
"roc_auc[\"macro\"] = auc(fpr[\"macro\"], tpr[\"macro\"])\n", | |
"\n", | |
"# Plot all ROC curves\n", | |
"plt.figure(figsize=(14, 10))\n", | |
"plt.plot(\n", | |
" fpr[\"micro\"],\n", | |
" tpr[\"micro\"],\n", | |
" label=\"micro-average ROC curve (area = {0:0.4f})\".format(roc_auc[\"micro\"]),\n", | |
" color=\"deeppink\",\n", | |
" linestyle=\":\",\n", | |
" linewidth=4,\n", | |
")\n", | |
"\n", | |
"plt.plot(\n", | |
" fpr[\"macro\"],\n", | |
" tpr[\"macro\"],\n", | |
" label=\"macro-average ROC curve (area = {0:0.4f})\".format(roc_auc[\"macro\"]),\n", | |
" color=\"navy\",\n", | |
" linestyle=\":\",\n", | |
" linewidth=4,\n", | |
")\n", | |
"\n", | |
"colors = cycle([\"aqua\", \"darkorange\", \"cornflowerblue\"])\n", | |
"for i, color in zip(range(n_classes), colors):\n", | |
" plt.plot(\n", | |
" fpr[i],\n", | |
" tpr[i],\n", | |
" color=color,\n", | |
" lw=lw,\n", | |
" label=\"ROC curve of class {0} (area = {1:0.4f})\".format(i, roc_auc[i]),\n", | |
" )\n", | |
"\n", | |
"plt.plot([0, 1], [0, 1], \"k--\", lw=lw)\n", | |
"plt.xlim([0.0, 1.0])\n", | |
"plt.ylim([0.0, 1.05])\n", | |
"plt.xlabel(\"False Positive Rate\")\n", | |
"plt.ylabel(\"True Positive Rate\")\n", | |
"plt.title(\"Some extension of Receiver operating characteristic to multiclass\")\n", | |
"plt.legend(loc=\"lower right\")\n", | |
"plt.show()" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 621 | |
}, | |
"id": "YeTDiJOB-6Ch", | |
"outputId": "fbc19a9d-0837-401c-f513-e2ffa65ce16b" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/plain": [ | |
"<Figure size 1008x720 with 1 Axes>" | |
], | |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAAJcCAYAAADD14TiAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdeZyNdf/H8ddnxjAMshNCG1mylxIlVFJ3aaMUWUqFIlrcqUSlVaWFpMFNpdItv9wplVJZCimypChbwth3hvn+/rgu4xizYc5cc2bez8fjPJxrf1/XOWdcn/O9ru8x5xwiIiIiIiICUUEHEBERERERySlUIImIiIiIiPhUIImIiIiIiPhUIImIiIiIiPhUIImIiIiIiPhUIImIiIiIiPhUIIlInmFmn5nZ7QFs9ykz22Rm67N726kxs6ZmtizoHDmBme0yszOyeZvOzM7Kzm2Gy4l+pnLDe9DMmpnZ2nSmV/LfX9Ensx4RyX4qkEQikJk1MbNZZrbdzLaY2UwzOy/oXCfKzFaaWctwb8c5d6Vz7j/h3k4oM6sE9AVqOOfKpTK9mZkl+SdSO81smZl1Dmcm59z3zrlq4dxGTmRm083sjtBxzrnCzrk/g8oUpKz43GX2M5WyKDzR96CZPWFm7xzvctkh5fF0zq3231+HgswlIsdPBZJIhDGzosD/gNeAEkAFYCCwP8hckqZKwGbn3MZ05lnnnCsMFAXuB0aaWcQVMGaWLy9uOygBH28zM51DiEiupD9uIpGnKoBzbrxz7pBzbq9z7gvn3EIAM4sys0fNbJWZbTSzsWZ2ij+tiv9NbmczW2NmW83sbjM7z8wWmtk2M3s9dGNm1sXMlvrzTjWzymkFM7ML/JatbWa2wMya+eMb+5eYneYP1/HXd46ZjcMrIib7rSgPpbcuf9p0M3vSbznbaWZfmFkpf1qsmb1jZpv9ZeeaWdmQ5e44juN0u5mt9rP3T2e/T/GXT/DX96i//pbAl0B5f9/GpPfCOs8UYAtQOyRnPzNb4e/Th2ZWImTbh1sTt/mvaSd/fAEze9HPv8HM3jSzgv605Et6zOxhM/soxf4MNbNXQ/Yt3sz+MbO/zbtcMNqf1sl/DV42s83AE6kcmwJm9oqZrfMfr5hZgdAcZvaIf4xXmtmtKZZNdx/8/OuB0WZW3Mz+578OW/3nFf35nwaaAq/7r8Xr/vjklg0zG2Nmb5jZp/776kczOzMkz+XmtfBtN7NhZvatpWiRCpk32t+vFf66fjL//e9raWZ/+K/bG2Zm/nJnmtnX/mu9yczeNbNiIetd6e/zQmC3meULeX/sNLMlZnZdiix3mvcZPjy9vp345+5pM5sJ7AHOsKM/U2f5x2S7n/0Df/x3/ioW+NtqZykuKzOz08xsov/abbYUf4f8eVoBjwDt/PUs8MeXN7NPzGtNX25md6b2moS8xsPMuzRwl//+Lee/L7ea2W9mVi9k/qNavvzln0plvcccTzvydySfP08JMxtt3udgq5lNSiNjmq9nOsfYzPscbjSzHWb2q5nVSus4iEgGnHN66KFHBD3wWhk2A/8BrgSKp5jeBVgOnAEUBiYC4/xpVQAHvAnEApcD+4BJQBm81qiNwCX+/Nf666oO5AMeBWalkauCn6s13pcvl/nDpf3pTwNfAwWBX4GeIcuuBFoex7qmAyvwisWC/vCz/rS7gMlAISAaaAAUDVnujuM4TiP99dfBa6Grnsa+jwX+DyjiL/s70NWf1gxYm87rmTzd39drgCSgnj+uF/ADUBEoAIwAxvvTKgM7gVuAGKAkUNef9jLwCV4rYxH/mDyTyjYr453sFvGHo4F/gAv84Y/9bcbhvUfmAHf50zoBB4F78d4fBVPZv0F+/jJAaWAW8GRIjoPAS/6+XQLsBqplch8OAs/5yxb09/8G/7UvAkwAJoVkSX79Q8Y54Cz/+Ri899n5/v68C7zvTysF7ACu96f1AhJTri9kvQ/ivc+rAYb3HioZss3/AcXwTqoTgFb+tLPw3u8F/OP1HfBKis/KL8Bph483cBNQHu/9084/hqeGTPsbOM/PcRZQ+SQ+d6uBmv4xiOHoz9R4oL+/bCzQJLXjnMp7MBpY4L/ecSmXTXFcnwDeSTHuO2CYv1xd/3g2T2P5McAmvL8LsXh/k/4COvo5ngK+SSf3GOCp1D7bqRzPKv7y+fzhT4EPgOL+sbskjfWk93qmeoyBK4Cf8N5Thvc3+9Ss/v9HDz3yyiPwAHroocfxP/z//MYAa/FOEj8ByvrTpgHdQ+athncily/kP+wKIdM3A+1Chv8L9Paff4Z/ou8PR+GdTFdOJdPD+AVGyLipwO3+8xj/P/Bfgc8BC5kv5YlFRuuaDjwaMq078Ln/vAveSXjtVDJO58jJXGaOU8WQ6XOAm1NZZzRwAO8eo8Pj7gKm+8+POvlJZflmeAXRNrwi7NDh4+9PXwq0CBk+NSTnv4GPU1mn+SdVZ4aMuxD4K7VMwAygo//8MmCF/7ysn6lgyLy34J9A4hVIqzN4r64AWocMXwGsDMlxEIgLmf4h8Fgm9+EAEJvOtusCW1N7/UPGpSyQ3g6Z1hr4zX/eEZid4hivSbm+kOnLgGvTmOY4unj4EOiXxrxtgJ9TfFa6ZHDMfzm8bbzPTa805lvJ8X/uBqXzmRoLvEXI5ya145zyPei/rgn4hUQG+/YEIQUSXqF4CL/A98c9A4xJY/kxwMiQ4XuBpSHD5wLb0sk9hhMokPA+t0mk+EIrtfVk8HqmeoyB5nhfzFwARGV0HPXQQ4/0H7rETiQCOeeWOuc6OecqArXwvm18xZ9cHlgVMvsqvP+gy4aM2xDyfG8qw4X955WBof7lNtvwLv0yvG+aU6oM3HR4Xn/+JngnBjjnEvFOLmoBQ5xzLp1dTHddvtAe4faEZB6Hd1L3vn8py/NmFpPKNjJznNLaRqhSeMVfynWldozSss45VwyvdfBVvJOdwyoDH4cch6V4J4Rl8U4OV6SyvtJ4rSg/hSz3uT8+Ne/hFT4A7f3hw9uOAf4JWc8IvNagw9ZksG+pHefyIcNbnXO7U5memX1IcM7tOzxgZoXMbIR5lznuwGtZKGYZ9CKWQlqveXlC9tV//6bX81har0262zGzsmb2vnmXM+4A3sF7j4U66pibWUcz+yXkONUKWSajHKEy87lL7/V+CO/vwxwzW2xmXTK53dOAVc65g5mcP1R5YItzbmfIuIw+f5n9+5eVTsPLuTWjGTN4PVM9xs65r4HXgTeAjWb2lnn3q4rICVCBJBLhnHO/caTwAFiHd6JzWCW8b+k3cPzW4F1OVSzkUdA5NyuNecelmDfOOfcsgJlVAAYAo4Eh5t+Hcng3jmdd6XHOJTrnBjrnagCNgavxvv1PKauO0ya8Fp2U6/r7ONeDc24/3rf455pZG3/0GuDKFMci1jn3tz/tzFRWtQnvRK9myDKnOK8jiNRMAJqZd7/OdRwpkNbgtSCVCllPUedczdDYGexWasd5XchwcTOLS2V6ZvYh5bb74rUENnLOFQUu9sdbJrOm5x+8yxy9FZpZ6HAq0nptMjIYL+e5/j7cxpH8hyXvh3n3BI4EeuJdwlcMWBSyTHo5TuRzl+YxdM6td87d6Zwrj9eKOswy1535GqCSZa7TiZTbXweUMLMiIeNO6POXhj14hfphx/REmU62UGvwchZLZ54MX8/0jrFz7lXnXAOgBt7lxw+mu2cikiYVSCIRxryODfrakZvPT8P79v8Hf5bxwP1mdrqZFcY74frgBL+dfRP4t5nV9Ld1ipndlMa87wD/MrMrzLtBPda8G7Er+ieTY4B4oCveyeaTIctuwLsXKMN1ZRTYzC41s3P9VoMdeMVLUiqzZslxcl4Xvh8CT5tZEf8Ep4+/D8fNOXcAGAI87o960193ZQAzK21m1/rT3sW72b+teTfrlzSzus65JLyTrJfNrIy/XAUzuyKNbSbgXSo1Gu8StqX++H+AL/AK2qLmdRhxppldchy7NB541M9dyt+vlMdmoJnlN7OmeAXthOPdB18RvKJqm3kdWQxIMT3l++x4fIpfuPon8j1I/2T5beBJMzvbv4G+tpmVzMR2igC7gO3+lwoZneTG4Z2YJwCY10V86M35bwMPmFkDP8dZdqSjlSz73Pnbvilk3q1+rsOfvfSO/Ry8vwnPmlmcv92L0ph3A1DF/B70nHNr8C6pfcZfrjbe35is6gr8F6C9fzxa4d0nl5Y099H/LH2GV9AUN7MYM7s4lVnTfT3TOsbmdbTTyLzW8t1495am9ndPRDJBBZJI5NkJNAJ+NLPdeIXRIrxvzwFG4V1m9h3ezcf78K6zP27OuY/xboJ/37zLfRbhdQyR2rxr8Dp1eATvP/c1eCd3UcB9eJdlPeZfmtQZ6OyfEIN3z8Cj/iUlD2SwroyUAz7CK46WAt/iHY+Usuw4+cvtBv7Eu5/nPX/9J2oU3jfq/wKG4t1j9oWZ7cR7vRuB9zsrePfJ9MW7/PEXvM4AwGuJWg784L92X+G1rqTlPaAlR1qPDusI5AeW4J2QfcTRl1xl5ClgHrAQ7/6z+f64w9b7612HV/Dd7beKnsg+vILXWcMmvOP0eYrpQ4EbzetB7NXj2Aecc5vwbp5/Hu++vRr+fqXVvf5LeIXzF3jvxXg/W0YGAvWB7XhF2cQMci3BK6hn452gnwvMDJk+Aa+DlPfw/nZMwuv0ArL2cwdeRxA/mtkuvPdsL3fkN6aeAP7jb6ttin04BPwLrwOJ1XiXLrZLYxsT/H83m9l8//ktePf7rMPrVGSAc+6rTGbOSC8/2zbgVrzjl5ajjmcq0zvgfWHzG15nOL1TzpDR60nax7go3hcKW/EuMdwMvJD53RSRUJb+bQAiIiLhYV4X0u/499JFFL8FYy1wq3Pum6DziIhI1lELkoiISCb4l54VM+/+uUfw7gv5IYPFREQkwqhAEhERyZwL8XqE24R32VUb59zeYCOJiEhW0yV2IiIiIiIiPrUgiYiIiIiI+DLzmwM5SqlSpVyVKlWCjiEiIiIiIjnUTz/9tMk5l9YPpKcr4gqkKlWqMG/evKBjiIiIiIhIDmVmq050WV1iJyIiIiIi4lOBJCIiIiIi4lOBJCIiIiIi4lOBJCIiIiIi4lOBJCIiIiIi4lOBJCIiIiIi4lOBJCIiIiIi4lOBJCIiIiIi4lOBJCIiIiIi4lOBJCIiIiIi4lOBJCIiIiIi4lOBJCIiIiIi4lOBJCIiIiIi4lOBJCIiIiIi4lOBJCIiIiIi4lOBJCIiIiIi4lOBJCIiIiIi4lOBJCIiIiIi4lOBJCIiIiIi4lOBJCIiIiIi4lOBJCIiIiIi4gtbgWRmo8xso5ktSmO6mdmrZrbczBaaWf1wZREREREREcmMfGFc9xjgdWBsGtOvBM72H42A4f6/kpMt2AgtPzwyXLs0TGuX+rx9vqbBq7NYk5TkDRfOz7xF91Cp0inHzPrNKS/TbufO5OFmN1bnww9vOnadYxfRudv/+PTAAW84Nh+jPryRq6+uesysWy5+j3NmLE8eLl6pKMtW9k51n1656D8M3rPXG84XRa8BF9O//8XaJ+2T9kn7pH3SPmmftE/ap9ywT8fBnHMntYJ0V25WBfifc65WKtNGANOdc+P94WVAM+fcP+mts2HDhm7evHknHmriVfDXlBNfPoK8mn88v0ZfHnQMEREREZFscWDvDhZ8+SoLpr78k3Ou4YmsI5wtSBmpAKwJGV7rjzumQDKzbkA3gEqVKp3cVvNIcQSoOBIRERGRPGPN4mnMeK83u7etO6n1BFkgZZpz7i3gLfBakLJkpX3D13KWYwzbAsDI7iWybp3+JXY7kpJ4Zd8+huzfz4231yY+/tqjZjP/38rRT7LqcJMr8NdfvahSpdgxq516yku02nGkyfXyy89k6tTbjt3+2EXccOdkJh5ucgU++ugmbrihxjGzbr74PUp9/0fycIlTCrB5W79U92lw4zH0P9yMDPz7300YPLjFsfP2+ZoqQ2dqn7RP2iftk/ZJ+6R90j5pn3LUPn0O/ADAeeedx9y5c49dbyblvUvshvin7nmgQLozHAUSsHjxRi6+eAxbtngfmuhoY8mSHlStWjJ5nsMFUsKmPSQlHTnWJUsWJDr62L5B9u8/yPbt+5OH8+ePplix2FS3v337PvbvP5Q8XLRoAWJjj631k5IcmzbtOZLJoHTpuFTXuXv3AXbvTkweLlQohsKF86c67ybtk/ZJ+6R90j5pn7RP2iftU47ap/Hjx/Hww7156KFHefzxfsTExJzwJXZBFkhXAT2B1nidM7zqnDs/o3WqQMq8cBVIBw8mUavWMJYt25w87uabazF+/A3Jw4cLpNx/lEVEREQku23dupUff/yRVq1aAeCcY/Xq1VSuXBkAMzvhAimc3XyPB2YD1cxsrZl1NbO7zexuf5YpwJ/AcmAk0D1cWeQkLdh41CNfvigGDbo0eXKJEgVp0OBUwllsi4iIiIgAfPLJJ9SsWZPrrruO33//HQAzSy6OTlbY7kFyzt2SwXQH9AjX9uXkHDqUxJdf/skVV5yJhXbrDZDQkxtvrMHFF1emefMq3H//hRQtWiCYoCIiIiKSJ2zevJlevXrx7rvvAnDRRRcRHR2d5duJiE4axDd9NTwwHVbtgCHNoOMxVy56Sr/u/TuwffrrG7sI+k4/MtyhBm7IpXz88W88/vg3LF6cwJdfdqBlKotGRRnTp9+OmaUyVUREREQk60yaNIm7776bDRs2ULBgQQYPHsy9994blgIpbJfYSRgcLo7CqHfvz7nhhg9ZvDgBgP79v8Y90ND7QdgUVByJiIiISLg9/fTTXHfddWzYsIGmTZuycOFCevfuHZbiCFQgRZbQ4uj5OWHZxG231T5qeM6cv5lcvfiREZWLhmW7IiIiIiKpufHGGylZsiSvvfYa06dP56yzzgrr9lQgRaoNezKe5wScd14F2rQ5B/C6fuzQoTa1apXxJlYuCi82C8t2RUREREQANm7cyPPPP5/cAVi1atVYtWoVPXv2JCoq/OWL7kGKJB2O/XGsVCX09P71u/lO6Zdf1rN+/S5adayV6n1MgwY1I1++KAYObEaNGv6lddPanUBgEREREZHMcc7x4Ycf0rNnTzZt2kS5cuXo2LEjAHFxqf9eUzioQIokLzU/qcV/+20TAwZM58MPF1OhQhGWL78v1R/cOvfcskyYcNNJbUtEREREJLM2bNhA9+7dmThxIgDNmzfn4osvDiSLLrHLI3bs2E/Dhm/x4YeLAfj77528+eZJ/OCuiIiIiMhJcs4xfvx4atSowcSJEylcuDAjRozgq6++okqVKoFkUoGURxQtWoC77mpw1LjBg79n9+4DASUSERERkbzunXfeoX379mzZsoXLLruMRYsW0a1bt0B7S1aBlIs451i4cAO7dqVe9PTr14S4uBgA6tYtx+jR11KoUEx2RhQRERERSda2bVsuvPBC3n77baZOnUrlypWDjqR7kHKDmTNXM378IiZP/p3Vq7fz/vs30K7dsZ0vlC4dxwsvXEbp0nFcf311oqL0O0YiIiIikn3WrVtH//79GTJkCCVKlKBAgQLMnDkzR/2+pgqkXOD//m8Zb7wxN3l48uTfUy2QAO6557zsiiUiIiIiAnhXOo0dO5bevXuzbds2ChQowJtvvgmQo4oj0CV2EcE5x9KlCbjm70OLD448fP/6V9Wj5p8y5Q8OHkzK7pgiIiIiIsdYu3YtV111FZ06dWLbtm1cddVVPPbYY0HHSpNakHKw6dNXMnHiUv73v9/5669t/FrsFGrlO/Ylu/DC0yhRoiBbtuwlNjYfjRufxubN4fkhWRERERGRzHDOMWrUKPr06cOOHTsoVqwYQ4cOpUOHDjmu1SiUCqQc7IUXZjFlyh/Jw5MPJKZaIOXLF8Xzz7ekdOk4WrY8I6TjhdR/KFZEREREJNx++ukn7rjjDgCuueYa3nzzTU499dSAU2XMnHNBZzguDRs2dPPmncTv9wzxq9W+Wbffr/5vJ7+uTsyy9WW1kd1LZPs2D38nEFnvLhERERHJSg8//DC1a9emffv22dpqZGY/OecansiyugcpC+Tk4ujcSurGW0RERETCb+XKlVxxxRV8//33yeOee+45br311hx9SV1KusQuC6XZUjN9NTwwHVbtINE57t29m/gDBziY5LWv/N//3cw111Q7Mn+LD2BhAgBP7N5DvcGX0PLOesTF5Q/zHoiIiIiIHJ+kpCRGjBjBQw89xK5du9i5c2eO67r7eKgFKTv4xRFAjBl/HUpKLo4AJk9eluaiT8QV4tpLT1dxJCIiIiI5zl9//UXLli3p3r07u3bt4sYbb2TSpEkRWxyBWpCyx331jzx/fg5PJR7ki+3bk0ctX74V51xEv5FEREREJO9ISkpi+PDhPPzww+zevZvSpUvzxhtvcNNNNwUd7aSpBSlMdu7cz4EDh7yBjrW8x/rdsGEP58Xko82ZJTnjjOKMG3cdX32Vs7s6FBEREREJtXXrVp544gl2795Nu3btWLx4ca4ojkAtSFlu795E3nhjLs8+O4OnnmrO3XeHdJ7xUCPvAbyVsJtixWKJiYk+diXT2mVTWhERERGRzElKSiIpKYl8+fJRsmRJRo4cyaFDh7jhhhuCjpal1IKUhb77bhVnnvkqDz74JZs37+XJJ79j797Ue7grXTou9eJIRERERCSH+f3337n44ot59tlnk8e1adMm1xVHoAIpS511Vgm2bt2XPLxu3U7efPMkfrNJRERERCRAhw4d4qWXXqJOnTrMnDmTkSNHsm/fvowXjGAqkA6bvhoajoXSr3vdbKelz9fePIcfYxclTypfvgjdux+5pK6IGTw248i8IiIiIiIRYtmyZTRt2pS+ffuyb98+OnbsyM8//0xsbGzQ0cJKBdJhIV1xp8Y5xy+/rKfvt3/yr+1pz9evXxNKly7Egw825s/ixbi/YMEwhBURERERCY9Dhw7x4osvUqdOHWbPnk358uWZPHky//nPfyhRIo3f/cxF1EnDYaHFkf8jrYft33+QRo3eZsGCDcnjlh48SPV8xx6+0qXjWL36fmJj88HotH/fSEREREQkJzIzPvvsM/bv30+nTp146aWXKF68eNCxso0KpEwoUCAfpUoVOmrcuP0HGJxKgQR4xZGIiIiISIQ4ePAg27Zto1SpUkRFRfH222+zdOlSWrduHXS0bKczeV/iZzfw28ptnHt2yVSnd+hQm2nT/koe/uSMwgxe1N0bGLYl9ZUm9MzqmCIiIiIiWWrRokV07tyZwoULM23aNKKiojj99NM5/fTTg44WiDx9D5Jzjnnz1tGr12dUaP0OTbr+H3urFoc6ZY6Z9/rrq1O0aAFatz6b8eNvYM6cOwNILCIiIiKSNRITE3n66aepX78+8+bNY8WKFaxduzboWIHL0y1Ihw45rr76PTZs2J08bvLk32nbtuYx8xYpUoB16/oQF5c/OyOKiIiIiGS5hQsX0qlTJ37++WcA7rrrLp5//nmKFi0acLLg5ekWpHz5orjlllpHjRs3bmGa86s4EhEREZFI9+yzz9KwYUN+/vlnKleuzJdffsmbb76p4siXpwskgA4d6iQ/P+WUApx2WlGccwEmEhEREREJn4MHD5KYmEj37t359ddfadmyZdCRcpQ8fYkdQL165ejevSHNmlXhX/+qph7oRERERCRXOXDgAL/99hu1a9cG4OGHH6Z58+Y0btw44GQ5U56vBsyMN964ChZshGUhvdGl0lGDiIiIiEgkmT9/Pp06dWLdunUsWbKEMmXKEBMTo+IoHXm+QErW8sOjh9VFt4iIiIhEqP379/Pkk0/y7LPPcujQIc4880zWr19PmTJqBMhIni2QXv3fTn5dnXhkxMD2R8+Q1m8biYiIiIjkYHPnzqVz584sXrwYM6N37948/fTTFCpUKOhoESHPFkhHFUdZ4NxKMVm6PhERERGR4/Xqq69y//33k5SUxNlnn83o0aO56KKLgo4VUfJsgXRYoWU/MnToldDig6MnTGsXTCARERERkRNUv359oqKiuP/++xk0aJBajU5Ani+QypUr7D1RQSQiIiIiEWbv3r18+umn3HjjjQA0adKEFStWUKlSpYCTRa48/ztIyQWSiIiIiEgEmTVrFnXr1uWmm27iiy++SB6v4ujk5PkCqX79UwPd/lWA5cKHiIiIiITHnj176Nu3L02aNOH333+nevXqFC9ePOhYuUaeL5Dq1CkX6PanBLr18GoddAARERGRXGbGjBnUrVuXl156CTPj3//+N/Pnz+e8884LOlqukefvQcopXNABRERERCRHGz9+PLfeeivOOWrVqsXo0aNp2LBh0LFyHRVIIiIiIiIRoFWrVlSsWJHbb7+dRx99lAIFCgQdKVdSgXRYn6+PHn6peTA5RERERESAXbt28dJLL/HQQw8RGxtL8eLF+e2339R1d5ipQDps3JKjh1UgiYiIiEhAvv76a7p27crKlSvZt28fgwcPBlBxlA3yVCcNBw4cCjqCiIiIiEiadu7cSffu3WnRogUrV66kbt26tG3bNuhYeUqeKpCmTfsz6AgiIiIiIqn66quvOPfccxk+fDgxMTEMGjSIOXPmULdu3aCj5SmRd4ndhp9gyIn90s6V6U0c0uyE1ikiIiIicrJmz57NZZddBkD9+vUZPXo0tWvXDjhV3hR5BVIW+HTp2VA/xciOtQLJIiIiIiJywQUXcP3119OgQQMefPBBYmJigo6UZ0VmgdT3xH416O2359O79+fs3p3IHSkLJBERERGRbLJ9+3YefvhhevfuzTnnnIOZ8dFHH2F2YldKSdbJU/cg3XFHfXbteoRDhx4POoqIiIiI5FFTpkyhZs2ajBgxgnvuuSd5vIqjnCFPFUiHRUXpzSciIiIi2Wvr1q107tyZq666ir///ptGjRoxbNiwoGNJCnmyQBIRERERyU6TJ0+mZs2ajBkzhtjYWF544QVmzpxJ9erVg44mKUTmPUgiIiIiIhFiw4YNtGvXjr1799K4cWNGjRpFtWrVgo4laVCBdFjp148eTugZTA4RERERyRWcc5gZZcuW5YUXXuDAgQPcd999REdHBzLvUhoAACAASURBVB1N0qECSUREREQkC23evJn77ruPli1b0rlzZwB69OgRcCrJrDxVII0e/TPbtu2jcOH8wOlpz1i5aLZlEhEREZHcY+LEidxzzz1s3LiR6dOn0759ewoUKBB0LDkOeapAeuWVH1m4cAMAd7xxb+ozVS4KLzbLvlAiIiIiEvESEhK49957+eCDDwC45JJLiI+PV3EUgfJUgbRr14G0J+qeIxERERE5ARMmTKBHjx4kJCQQFxfH888/z913301UlDqMjkQqkERERERETlBiYiKDBg0iISGBSy+9lPj4eE4/PZ1bOSTHy1MFUo8e57HlmR/Y6VzQUUREREQkQjnnOHDgAAUKFCAmJoYxY8Ywd+5cunXrplajXCBPFUiPP34JvPYrAHcGnEVEREREIs/69evp3r07hQoV4p133gGgQYMGNGjQIOBkklXyVIEEQIcaQScQERERkQjjnOO9997jvvvuY8uWLRQpUoS1a9dSsWLFoKNJFst7bYAvNeeql5onD1rADxERERHJ2datW8e1117LbbfdxpYtW2jVqhWLFy9WcZRL5b0CCZgSdIAUWgcdQERERERSNW7cOGrWrMnkyZM55ZRTGDVqFFOmTOG0004LOpqESd67xC4FddcgIiIiImmZPXs227Zto3Xr1owYMUKtRnlAnimQtm/fR/780RQsGBN0FBERERHJoZxzbNiwgXLlygHw3HPP0bRpU26++WbMdINEXpAnCqR9+w5y6aX/YcuWvRQunB8WdQ86koiIiIjkMGvWrOHOO+9k+fLlLFiwgLi4OIoUKcItt9wSdDTJRrn+HqRDh5K45Zb/8vPP61m1ajuLFycEHUlEREREchDnHCNHjqRmzZpMnTqV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IiIiudysWbOoW7cuL774IklJScyZMyfoSCKSDSKzQHqpedAJREREJJfas2cPffv2pUmTJvz+++9Ur16dWbNm0bt376CjiUg2yBd0ABEREZGc4tdff+WGG27gjz/+ICoqin79+vH4448TGxsbdDQRySYqkERERER8ZcqUYfPmzdSsWZPRo0dz3nnnBR1JRLKZCiQRERHJ03788Ufq169PTEwMZcuWZdq0aVSvXp0CBQoEHU1EAhCZ9yCJiIiInKRdu3bRs2dPLrjgAl544YXk8XXr1lVxJJKHqQVJRERE8pyvv/6arl27snLlSvLl0+mQiBwRmS1ILT4IOoGIiIhEoJ07d9K9e3datGjBypUrqVu3LnPnzuWRRx4JOpqI5BCR+ZXJwoSgE4iIiEiEWbNmDU2bNmXVqlXExMTw2GOP0a9fP2JiYoKOJiI5SGQWSCIiIiLHqUKFClSpUoWSJUsyevRoateuHXQkEcmBVCCJiIhIrjV16lSqVatGlSpViIqKYsKECRQrVkytRiKSpsi8B+mrtkEnEBERkRxs+/bt3HHHHbRq1Yo77rgD5xwApUuXVnEkIumKzBakOmWCTiAiIiI51JQpU+jWrRt///03+fPn57LLLiMpKYno6Oigo4lIBIjMAklEREQkha1bt9KnTx/GjBkDQKNGjRg9ejTVq1cPNpiIRBQVSCIiIhLx9u3bR/369Vm5ciWxsbE8+eST3H///Wo1EpHjpgJJREREIl5sbCydO3dm6tSpjBo1imrVqgUdSUQilB2+aTFSlK5c1yWs+iXoGCIiIhKwSZMmERUVxTXXXAPAwYMHMTO1GokIZvaTc67hiSwbmb3YLdgYdAIREREJyKZNm2jfvj3XXXcdXbt2ZfPmzQDky5dPxZGInLTILJBafhh0AhEREQnAxIkTqVmzJuPHj6dQoUI89thjFC9ePOhYIpKL6B4kERERyfESEhK49957+eCDDwC45JJLiI+P58wzzww4mYjkNiqQREREJMdr06YNs2bNIi4ujueee4577rmHqKjIvBBGRHK2yPzLUrt00AlEREQkGz3zzDO0aNGChQsX0qNHDxVHIhI26sVOREREchTnHO+//z4LFy7kmWeeOWq8mQWYTEQixcn0YqdL7ERERCTHWL9+Pffccw+TJk0C4Prrr+e8884DUHEkItlC7dMiIiISOOcc7777LjVq1GDSpEkUKVKEkSNH0rDhCX0BLCJywtSCJCIiIoFat24dd999N5MnTwbgiiuu4K233qJSpUoBJxORvEgtSCIiIhKoQYMGMXnyZIoWLUp8fDyfffaZiiMRCYxakERERCTbhXa4MHjwYPbs2cPgwYOpWLFiwMlEJK+LzBakPl8HnUBEREROgHOOUaNG0bRpU/bv3w9AiRIlGDt2rIojEckRIrNAGrck6AQiIiJynNasWcOVV15J165dmTlzJh988EHQkUREjhGZBZKIiIhEDOccI0eOpGbNmkydOpXixYvzzjvv0KFDh6CjiYgcQ/cgiYiISNisWrWKO++8ky+//BKANm3aMHz4cMqVKxdwMhGR1EVmC9KQZkEnEBERkUz45ptv+PLLLylZsiTjx49n4sSJKo5EJEeLzBakjrWCTiAiIiJp2Lt3LwULFgTg9ttv559//qFLly6ULVs24GQiIhmLzBYkERERyXGSkpIYNmwYlStX5vfffwfAzPj3v/+t4khEIoYKJBERETlpK1asoEWLFvTo0YOEhAT1UCciESsyL7ETERGRHCEpKYk33niDfv36sWfPHsqUKcOwYcO44YYbgo4mInJCVCCJiIjICfnzzz/p1KkT33//PQDt27dn6NChlCpVKuBkIiInTgWSiIiInJDExETmzJlD2bJlefPNN2nTpk3QkURETlpk3oNU+vWgE4iIiORJq1evxjkHQLVq1Zg4cSJLlixRcSQiuUZkFkgiIiKSrQ4dOsSQIUOoVq0aY8eOTR7funVrSpQoEWAyEZGspQJJRERE0rV06VKaNGnCAw88wL59+5g/f37QkUREwkYFkoiIiKTq4MGDPPfcc9SrV48ffviBChUq8OmnnzJ06NCgo4mIhE1kdtKQ0DPoBCIiIrna33//zXXXXcfcuXMB6NKlC0OGDKFYsWIBJxMRCa/ILJBEREQkrEqVKsXu3bupWLEib7/9NldccUXQkUREsoUKJBEREQHg119/pUKFCpQoUYICBQrw8ccfU7ZsWU455ZSgo4mIZJtM34NkZoXCGURERESCkZiYyJNPPkmDBg24//77k8dXrVpVxZGI5DkZFkhm1tjMlgC/+cN1zGxYZlZuZq3MbJmZLTezfmnM09bMlpjZYjN777jSi4iIyElZsGABjRo14vHHHycxMZG4uDgOHToUdCwRkcBkpgXp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JTFy5EgGDBiAl5cX27dvp0iRInh6eqociYiIyx1XsbMsq6plWTmufP8vy7I+sSyraOpHExERuT/27NlD9erV6d27NxcuXKBRo0Zky5bN7lgiIpIGpWSZ7zFAnGVZAUAf4A/g61RNJSIich8kJiby8ccfExAQwG+//UbBggWZO3cu33zzjUaNRETkplJSkC6b5BOVngVGGWNGA7lSN9Yd6PwjERFJga5du/L6669z8eJF2rZty/bt2wkLC7M7loiIpGEpKUjnLcsaALwALLAsywPwSt1YIiIi96579+4UK1aM+fPnM3nyZB5+WIuwiojI7aWkILUELgEdjTHHgSLAR6maSkRE5C7s2LGD9957z3W7QoUK7N27lwYNGtiYSkRE3MkdC9KVUvQtkMeyrIbARWPMlFRPJiIikkKXL1/mgw8+oHz58gwaNIj58+e7HvPy0qQHERFJuZSsYtcCWAc0B1oAay3LapbawURERFJi27ZthISEMHDgQOLj4+ncuTPVqlWzO5aIiLipW14H6RpvAhWNMScBLMvyBpYAM1MzmIiIyO0kJCQwbNgw3nnnHRISEihatCjjx4+nbt26dkcTERE3lpJzkDyulqMrTqXwealnyjZbDy8iIvb76KOP+Pe//01CQgLdunVj69atKkciInLPUlJ0FlmWtdiyrPaWZbUHFgA/pW6sO+jzi62HFxER+7388svUrFmTJUuWMGbMGHLnzm13JBERSQdSskhDX2As4H/la5wxpl9qBxMREblWREQEjRs3JjY2FoBcuXKxfPlyQkNDbU4mIiLpyS0LkmVZpS3LmmtZ1jaSF2j42BjzmjFm9oOLJyIiGV18fDxvvfUWFStWZM6cOXz0ka40ISIiqed2izRMAKYAK4FGwEigyYMIdUcvlLM7gYiIPADh4eF06NCBrVu3AsnT6vr27WtzKhERSc9uV5ByGWPGX/l+t2VZGx9EoBT5pLbdCUREJBVdunSJwYMHM3ToUBITEylZsiQTJkygevXqdkcTEZF07nYFKatlWeUB68rtbNfeNsakncIkIiLpypIlS3j//fexLIvevXszZMgQsmfPbncsERHJACxjzM0fsKzlt3meMcbYMozjXSzQRB2IsOPQIiKSiowxWJbluv3GG2/w7LPPUrVqVRtTiYiIO7IsK9wYE3xXz71VQUqrVJBERNKftWvX0rVr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h4O5c+fy6aefEhsba3csERERySBUkEQkzThy5AiNGjWibdu2nDlzhqeffpqNGzeSI0cOu6OJiIhIBqGCJCK2M8YwadIkHA4HCxYsIE+ePEycOJEFCxZQpEgRu+OJiIhIBuKeizSISLpijGHy5MlER0fTsGFDvvjiCwoXLmx3LBEREcmAVJBExBbGGM6fP0/u3Lnx8PDgq6++4rfffuNf//qXVqgTERER27jnFDvvUXYnEJF7cPDgQerXr0+TJk24upJmiRIleOGFF1SORERExFbuWZBExC0ZYxg3bhxOp5Off/6ZTZs28ccff9gdS0RERMRFBUlEHojIyEjq1KnDiy++yPnz52ncuDHbt2+nVKlSdkcTERERcVFBEpFUN378eJxOJ0uXLiV//vxMmzaNWbNmUbBgQbujiYiIiFzHPRdpiOppdwIR+QeOHTtGbGwszZs3Z9SoURQoUMDuSCIiIiI35Z4FSUTStKSkJP744w9Kly4NwIABAwgODuaZZ56xOZmIiIjI7WmKnYjcV/v27aNWrVpUqVKFqKgoALy8vFSORERExC2oIInIfZGUlMSIESPw9/dn5cqVeHh4sG/fPrtjiYiIiPwjKkgics/27NlD9erV6d27NxcuXKBNmzbs2LGDkJAQu6OJiIiI/CM6B0lE7snkyZPp1q0bFy9epGDBgowdO5awsDC7Y4mIiIjcFfccQZqyze4EInJFiRIluHTpEm3btmX79u0qRyIiIuLW3LMg9fnF7gQiGVZiYiI///yz63a1atXYtm0bkydP5uGHH7YxmYiIiMi9c8+CJCK22LFjB1WqVKFevXosXbrUdX+5cuVsTCUiIiJy/6ggicgdXb58mQ8++IDy5cuzbt06ihQpgmVZdscSERERue/cc5GGF/TbapEHZdu2bXTo0IENGzYA0LlzZ4YPH06ePHlsTiYiIiJy/7lnQfqktt0JRDKEefPm0axZMxISEnjsscf48ssvqVu3rt2xRERERFKNexYkEXkgnnzySfLnz09YWBjDhg0jd+7cdkcSERERSVUqSCLiEh8fz9ixY+natStZsmTh4YcfZvv27eTNm9fuaCIiIiIPhBZpEBEANm3aRKVKlejVqxfvvvuu636VIxEREclIVJBEMrj4+Hj+85//UKlSJTZv3oyPjw+hoaF2xxIRERGxhabYiWRg4eHhdOjQga1b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d8dylBrc8xPsa8vgk9p33k5S1fz583nxxRc5evQoWbJkoVixYnZHEhEREZt99913dkdI0ypXrmx3BLeQOXNm2rZta8ux3XME6esb5+LKg3P69Gnatm1Lo0aNOHr0KCEhIURERNCnTx+7o4mIiIiI3BP3HEES25w4cYLAwECOHz9O1qxZGTJkCK+88kqK1rgXEREREUnrVJDkH3nkkUeoXr06R48e5auvvrJlXqiIiIiISGpxz4L0cU27E2QoP/zwAyVKlCAwMBCAr776iuzZs+Ph4Z4zNEVEREREbsU9P+Hepytby+1FRUXRqlUrmjZtSvv27UlISAAgZ86cKkciIiKSqiIjI8mWLRuBgYGUK1eOtm3buj6LQPL1cypVqoSvry++vr6MGzfuuudPmTIFp9OJn58f5cuXZ/jw4Q/6JdzRnDlzGDx4sN0xbun06dPUqVOH0qVLU6dOHc6cOXPT7fr164fT6cTpdDJ9+nTX/cuWLSMoKAin00m7du1c1+L69ttv8ff3x8/PjypVqlx30eBFixZRpkwZSpUqxYcffui6v1WrVuzduzeVXun19ClXbmrGjBk4HA6mT59Ojhw56NKli84zEhERt2dZ71z3dSvjxoVft13Xrj8+wJT/TGJiom3HNsaQlJSUavsvWbIkERERbN26lcOHD/P9998DcPz4cVq3bs0XX3zBrl27WLVqFWPHjmXBggUALFy4kE8//ZSff/6ZrVu3smbNGtcFa++Xv194924MGzaM7t27P9Bj/hMffvghoaGh7N27l9DQ0OsKy1ULFixg48aNREREsHbtWoYPH865c+dISkqiXbt2TJs2jW3btlGsWDEmT54MgI+PDytWrGDr1q0MGjSIrl27Ask/yz169GDhwoXs2LGDqVOnui6U/NJLLzFs2LAH8rpVkOQ6J0+epHnz5rRo0YKoqChq1arFli1b6NGjh0aNRERE/qHIyEh8fX1p3749jz/+OG3atGHJkiVUrVqV0qVLs27dOgDWrVtHSEgI5cuXp0qVKuzevRtI/sD4+uuv43Q68ff3Z+TIkQAUL16cfv36ERQUxIwZM5g6dSp+fn44nU769et30ywxMTGEhoYSFBSEn58fc+fOBaB///6MHj3atd3bb7/tGm356KOPqFixIv7+/rz11luu11SmTBnatm2L0+nk0KFDvPTSSwQHB+NwOFzb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\n" | |
}, | |
"metadata": { | |
"needs_background": "light" | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"roc_auc_score(y_true, clf_qda.predict_proba(X_test),multi_class=\"ovr\")" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "uGKN6dkl3K-o", | |
"outputId": "8ab6026e-4f3b-40ce-a266-1e1d32803706" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"0.9904534796571903" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 28 | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"# Кросс-валидация и выбор модели" | |
], | |
"metadata": { | |
"id": "qkpkew5EC2wM" | |
} | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"# data preparation\n", | |
"X = DATA.loc[:, DATA.columns != 'class'].to_numpy()\n", | |
"y = DATA[\"class\"].to_numpy()\n", | |
"X, y" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "Yz49AkUCEPJc", | |
"outputId": "df3314c5-b61a-437f-d76a-7df2b1db2c57" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"(array([[15.26 , 14.84 , 0.871 , ..., 3.312 , 2.221 , 5.22 ],\n", | |
" [14.88 , 14.57 , 0.8811, ..., 3.333 , 1.018 , 4.956 ],\n", | |
" [14.29 , 14.09 , 0.905 , ..., 3.337 , 2.699 , 4.825 ],\n", | |
" ...,\n", | |
" [13.2 , 13.66 , 0.8883, ..., 3.232 , 8.315 , 5.056 ],\n", | |
" [11.84 , 13.21 , 0.8521, ..., 2.836 , 3.598 , 5.044 ],\n", | |
" [12.3 , 13.34 , 0.8684, ..., 2.974 , 5.637 , 5.063 ]]),\n", | |
" array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", | |
" 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", | |
" 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", | |
" 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n", | |
" 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n", | |
" 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n", | |
" 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n", | |
" 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n", | |
" 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n", | |
" 3], dtype=int32))" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 29 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"model_1 = LogisticRegression(penalty='none', multi_class='ovr', solver='newton-cg')\n", | |
"scores = cross_val_score(model_1, X, y, cv=10, scoring='roc_auc_ovr')\n", | |
"print(\"Logit has %0.4f OvR AUC with a standard deviation of %0.2f\" % (scores.mean(), scores.std()))\n", | |
"\n", | |
"model_2 = LinearDiscriminantAnalysis()\n", | |
"scores = cross_val_score(model_2, X, y, cv=10, scoring='roc_auc_ovr')\n", | |
"print(\"LDA has %0.4f OvR AUC with a standard deviation of %0.2f\" % (scores.mean(), scores.std()))\n", | |
"\n", | |
"model_3 = QuadraticDiscriminantAnalysis()\n", | |
"scores = cross_val_score(model_3, X, y, cv=10, scoring='roc_auc_ovr')\n", | |
"print(\"QDA has %0.4f OvR AUC with a standard deviation of %0.2f\" % (scores.mean(), scores.std()))" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "VNp9eVsOCS3c", | |
"outputId": "9f3d3634-f942-4dff-9130-4402aaa50c22" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stderr", | |
"text": [ | |
"/usr/local/lib/python3.7/dist-packages/sklearn/utils/optimize.py:212: ConvergenceWarning: newton-cg failed to converge. Increase the number of iterations.\n", | |
" ConvergenceWarning,\n", | |
"/usr/local/lib/python3.7/dist-packages/sklearn/utils/optimize.py:212: ConvergenceWarning: newton-cg failed to converge. Increase the number of iterations.\n", | |
" ConvergenceWarning,\n" | |
] | |
}, | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"Logit has 0.9957 OvR AUC with a standard deviation of 0.01\n", | |
"LDA has 0.9954 OvR AUC with a standard deviation of 0.01\n", | |
"QDA has 0.9879 OvR AUC with a standard deviation of 0.02\n" | |
] | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"" | |
], | |
"metadata": { | |
"id": "OohWzlq1EGxK" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
} | |
] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment