{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Пробное программирование"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.neighbors import KNeighborsClassifier\n",
"from sklearn.tree import DecisionTreeClassifier\n",
"\n",
"from sklearn.metrics import accuracy_score\n",
"from sklearn.model_selection import GridSearchCV, cross_val_score, train_test_split\n",
"from sklearn.utils import shuffle \n",
"\n",
"import pandas as pd\n",
"import numpy as np"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Загружаем и \"обрабатываем\" данные. Как видно, все признаки имеют тип float, а тип стекла - int."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/plain": [
"RI float64\n",
"Na float64\n",
"Mg float64\n",
"Al float64\n",
"Si float64\n",
"K float64\n",
"Ca float64\n",
"Ba float64\n",
"Fe float64\n",
"Type_of_glass int64\n",
"dtype: object"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = pd.read_csv('glass.csv')\n",
"\n",
"df.drop(['Id'], axis = 1, inplace = True)\n",
"\n",
"df.dtypes"
]
},
{
"cell_type": "code",
"execution_count": 406,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" RI | \n",
" Na | \n",
" Mg | \n",
" Al | \n",
" Si | \n",
" K | \n",
" Ca | \n",
" Ba | \n",
" Fe | \n",
" Type_of_glass | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1.52101 | \n",
" 13.64 | \n",
" 4.49 | \n",
" 1.10 | \n",
" 71.78 | \n",
" 0.06 | \n",
" 8.75 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 1 | \n",
"
\n",
" \n",
" 1 | \n",
" 1.51761 | \n",
" 13.89 | \n",
" 3.60 | \n",
" 1.36 | \n",
" 72.73 | \n",
" 0.48 | \n",
" 7.83 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 1 | \n",
"
\n",
" \n",
" 2 | \n",
" 1.51618 | \n",
" 13.53 | \n",
" 3.55 | \n",
" 1.54 | \n",
" 72.99 | \n",
" 0.39 | \n",
" 7.78 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 1 | \n",
"
\n",
" \n",
" 3 | \n",
" 1.51766 | \n",
" 13.21 | \n",
" 3.69 | \n",
" 1.29 | \n",
" 72.61 | \n",
" 0.57 | \n",
" 8.22 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 1 | \n",
"
\n",
" \n",
" 4 | \n",
" 1.51742 | \n",
" 13.27 | \n",
" 3.62 | \n",
" 1.24 | \n",
" 73.08 | \n",
" 0.55 | \n",
" 8.07 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 1 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" RI Na Mg Al Si K Ca Ba Fe Type_of_glass\n",
"0 1.52101 13.64 4.49 1.10 71.78 0.06 8.75 0.0 0.0 1\n",
"1 1.51761 13.89 3.60 1.36 72.73 0.48 7.83 0.0 0.0 1\n",
"2 1.51618 13.53 3.55 1.54 72.99 0.39 7.78 0.0 0.0 1\n",
"3 1.51766 13.21 3.69 1.29 72.61 0.57 8.22 0.0 0.0 1\n",
"4 1.51742 13.27 3.62 1.24 73.08 0.55 8.07 0.0 0.0 1"
]
},
"execution_count": 406,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 407,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" RI | \n",
" Na | \n",
" Mg | \n",
" Al | \n",
" Si | \n",
" K | \n",
" Ca | \n",
" Ba | \n",
" Fe | \n",
" Type_of_glass | \n",
"
\n",
" \n",
" \n",
" \n",
" 209 | \n",
" 1.51623 | \n",
" 14.14 | \n",
" 0.0 | \n",
" 2.88 | \n",
" 72.61 | \n",
" 0.08 | \n",
" 9.18 | \n",
" 1.06 | \n",
" 0.0 | \n",
" 7 | \n",
"
\n",
" \n",
" 210 | \n",
" 1.51685 | \n",
" 14.92 | \n",
" 0.0 | \n",
" 1.99 | \n",
" 73.06 | \n",
" 0.00 | \n",
" 8.40 | \n",
" 1.59 | \n",
" 0.0 | \n",
" 7 | \n",
"
\n",
" \n",
" 211 | \n",
" 1.52065 | \n",
" 14.36 | \n",
" 0.0 | \n",
" 2.02 | \n",
" 73.42 | \n",
" 0.00 | \n",
" 8.44 | \n",
" 1.64 | \n",
" 0.0 | \n",
" 7 | \n",
"
\n",
" \n",
" 212 | \n",
" 1.51651 | \n",
" 14.38 | \n",
" 0.0 | \n",
" 1.94 | \n",
" 73.61 | \n",
" 0.00 | \n",
" 8.48 | \n",
" 1.57 | \n",
" 0.0 | \n",
" 7 | \n",
"
\n",
" \n",
" 213 | \n",
" 1.51711 | \n",
" 14.23 | \n",
" 0.0 | \n",
" 2.08 | \n",
" 73.36 | \n",
" 0.00 | \n",
" 8.62 | \n",
" 1.67 | \n",
" 0.0 | \n",
" 7 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" RI Na Mg Al Si K Ca Ba Fe Type_of_glass\n",
"209 1.51623 14.14 0.0 2.88 72.61 0.08 9.18 1.06 0.0 7\n",
"210 1.51685 14.92 0.0 1.99 73.06 0.00 8.40 1.59 0.0 7\n",
"211 1.52065 14.36 0.0 2.02 73.42 0.00 8.44 1.64 0.0 7\n",
"212 1.51651 14.38 0.0 1.94 73.61 0.00 8.48 1.57 0.0 7\n",
"213 1.51711 14.23 0.0 2.08 73.36 0.00 8.62 1.67 0.0 7"
]
},
"execution_count": 407,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.tail()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Т.к. записи упорядочены по типу стекла, перемешаем строки."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" RI | \n",
" Na | \n",
" Mg | \n",
" Al | \n",
" Si | \n",
" K | \n",
" Ca | \n",
" Ba | \n",
" Fe | \n",
" Type_of_glass | \n",
"
\n",
" \n",
" \n",
" \n",
" 169 | \n",
" 1.51994 | \n",
" 13.27 | \n",
" 0.00 | \n",
" 1.76 | \n",
" 73.03 | \n",
" 0.47 | \n",
" 11.32 | \n",
" 0.00 | \n",
" 0.00 | \n",
" 5 | \n",
"
\n",
" \n",
" 51 | \n",
" 1.51926 | \n",
" 13.20 | \n",
" 3.33 | \n",
" 1.28 | \n",
" 72.36 | \n",
" 0.60 | \n",
" 9.14 | \n",
" 0.00 | \n",
" 0.11 | \n",
" 1 | \n",
"
\n",
" \n",
" 150 | \n",
" 1.51665 | \n",
" 13.14 | \n",
" 3.45 | \n",
" 1.76 | \n",
" 72.48 | \n",
" 0.60 | \n",
" 8.38 | \n",
" 0.00 | \n",
" 0.17 | \n",
" 3 | \n",
"
\n",
" \n",
" 15 | \n",
" 1.51761 | \n",
" 12.81 | \n",
" 3.54 | \n",
" 1.23 | \n",
" 73.24 | \n",
" 0.58 | \n",
" 8.39 | \n",
" 0.00 | \n",
" 0.00 | \n",
" 1 | \n",
"
\n",
" \n",
" 200 | \n",
" 1.51508 | \n",
" 15.15 | \n",
" 0.00 | \n",
" 2.25 | \n",
" 73.50 | \n",
" 0.00 | \n",
" 8.34 | \n",
" 0.63 | \n",
" 0.00 | \n",
" 7 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" RI Na Mg Al Si K Ca Ba Fe Type_of_glass\n",
"169 1.51994 13.27 0.00 1.76 73.03 0.47 11.32 0.00 0.00 5\n",
"51 1.51926 13.20 3.33 1.28 72.36 0.60 9.14 0.00 0.11 1\n",
"150 1.51665 13.14 3.45 1.76 72.48 0.60 8.38 0.00 0.17 3\n",
"15 1.51761 12.81 3.54 1.23 73.24 0.58 8.39 0.00 0.00 1\n",
"200 1.51508 15.15 0.00 2.25 73.50 0.00 8.34 0.63 0.00 7"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = shuffle(df) \n",
"df.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Разделим датасет на обучающую выборку и тест. Оставим на тест 30%."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"y = df['Type_of_glass']\n",
"X = df.copy()\n",
"X.drop('Type_of_glass', axis = 1, inplace = True)\n",
"\n",
"X_train, X_holdout, y_train, y_holdout = train_test_split(X.values, y, test_size = .3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Решающее дерево"
]
},
{
"cell_type": "code",
"execution_count": 410,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1.0"
]
},
"execution_count": 410,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dec_tree = DecisionTreeClassifier(criterion='entropy')\n",
"\n",
"dec_tree.fit(X_train, y_train)\n",
"\n",
"dec_tree.score(X_train, y_train)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Если строить дерево без ограничения глубины, то оно идеально подстроится под обучающую выборку."
]
},
{
"cell_type": "code",
"execution_count": 411,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.6153846153846154"
]
},
"execution_count": 411,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dec_tree.score(X_holdout, y_holdout)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Точность на отложеных данных - 61.5%."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Теперь будем использовать кросс-валидацию. Оптимизируем максимальную глубину дерева."
]
},
{
"cell_type": "code",
"execution_count": 412,
"metadata": {
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fitting 4 folds for each of 10 candidates, totalling 40 fits\n",
"Best params: {'max_depth': 7}\n",
"Best cross validaton score 0.6577181208053692\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[Parallel(n_jobs=4)]: Done 33 out of 40 | elapsed: 8.2s remaining: 1.7s\n",
"[Parallel(n_jobs=4)]: Done 40 out of 40 | elapsed: 8.2s finished\n"
]
}
],
"source": [
"tree_params = {'max_depth': range(1, 11, 1)}\n",
"\n",
"cv_best_tree = GridSearchCV(dec_tree, tree_params, cv = 4, n_jobs = 4, verbose = True)\n",
"\n",
"cv_best_tree.fit(X_train, y_train)\n",
"\n",
"print(\"Best params:\", cv_best_tree.best_params_)\n",
"print(\"Best cross validaton score\", cv_best_tree.best_score_)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Оптимальная глубина - 7."
]
},
{
"cell_type": "code",
"execution_count": 413,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.6307692307692307"
]
},
"execution_count": 413,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cv_best_tree.score(X_holdout, y_holdout)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Точность на отложенных данных - 63.1%."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Метод ближайших соседей"
]
},
{
"cell_type": "code",
"execution_count": 414,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.6778523489932886"
]
},
"execution_count": 414,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"knn = KNeighborsClassifier(n_neighbors = 10, n_jobs = 4) #10 ближайших соседей\n",
"\n",
"knn.fit(X_train, y_train)\n",
"\n",
"knn.score(X_train, y_train)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Метод ближайших соседей на обучающей выборке дает точность 67.8%."
]
},
{
"cell_type": "code",
"execution_count": 415,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.6461538461538462"
]
},
"execution_count": 415,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"knn.score(X_holdout, y_holdout)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"На отложенных данных - 64.6%."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Теперь будем оптимизировать количество ближайших соседей и их веса (одинаковые, либо то расстояния)."
]
},
{
"cell_type": "code",
"execution_count": 416,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fitting 4 folds for each of 40 candidates, totalling 160 fits\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[Parallel(n_jobs=4)]: Done 42 tasks | elapsed: 10.2s\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Best params: {'n_neighbors': 3, 'weights': 'distance'}\n",
"Best cross validaton score 0.6845637583892618\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[Parallel(n_jobs=4)]: Done 160 out of 160 | elapsed: 16.4s finished\n"
]
}
],
"source": [
"weights = ['uniform', 'distance']\n",
"knn_params = {'n_neighbors': range(1, 21, 1), 'weights': weights}\n",
"\n",
"cv_best_knn = GridSearchCV(knn, knn_params, cv = 4, n_jobs = 4, verbose = True)\n",
"\n",
"cv_best_knn.fit(X_train, y_train)\n",
"\n",
"print(\"Best params:\", cv_best_knn.best_params_)\n",
"print(\"Best cross validaton score\", cv_best_knn.best_score_)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Модель определила, что лучше всего использовать 3х соседей и веса, зависящие от расстояния."
]
},
{
"cell_type": "code",
"execution_count": 417,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.6923076923076923"
]
},
"execution_count": 417,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cv_best_knn.score(X_holdout, y_holdout)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Точность на тестовых данных - 69.2%."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Пробный анализ ошибки (метод ближайших соседей)"
]
},
{
"cell_type": "code",
"execution_count": 453,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"from sklearn.metrics import mean_squared_error\n",
"from sklearn.metrics import accuracy_score"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Мы хотим построить графики зависимости значений ошибки и ее стандартного отклонения от объема выборки на обучении и контроле."
]
},
{
"cell_type": "code",
"execution_count": 419,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(214, 10)"
]
},
"execution_count": 419,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.shape"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"В датасете 214 записей."
]
},
{
"cell_type": "code",
"execution_count": 425,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fitting 4 folds for each of 40 candidates, totalling 160 fits\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[Parallel(n_jobs=4)]: Done 42 tasks | elapsed: 10.6s\n",
"[Parallel(n_jobs=4)]: Done 160 out of 160 | elapsed: 16.8s finished\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fitting 4 folds for each of 40 candidates, totalling 160 fits\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[Parallel(n_jobs=4)]: Done 42 tasks | elapsed: 10.1s\n",
"[Parallel(n_jobs=4)]: Done 160 out of 160 | elapsed: 16.3s finished\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fitting 4 folds for each of 40 candidates, totalling 160 fits\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[Parallel(n_jobs=4)]: Done 42 tasks | elapsed: 10.9s\n",
"[Parallel(n_jobs=4)]: Done 160 out of 160 | elapsed: 17.1s finished\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fitting 4 folds for each of 40 candidates, totalling 160 fits\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[Parallel(n_jobs=4)]: Done 42 tasks | elapsed: 11.4s\n",
"[Parallel(n_jobs=4)]: Done 160 out of 160 | elapsed: 17.6s finished\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fitting 4 folds for each of 40 candidates, totalling 160 fits\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[Parallel(n_jobs=4)]: Done 42 tasks | elapsed: 10.6s\n",
"[Parallel(n_jobs=4)]: Done 160 out of 160 | elapsed: 16.9s finished\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fitting 4 folds for each of 40 candidates, totalling 160 fits\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[Parallel(n_jobs=4)]: Done 42 tasks | elapsed: 10.6s\n",
"[Parallel(n_jobs=4)]: Done 160 out of 160 | elapsed: 16.8s finished\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fitting 4 folds for each of 40 candidates, totalling 160 fits\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_split.py:605: Warning: The least populated class in y has only 3 members, which is too few. The minimum number of members in any class cannot be less than n_splits=4.\n",
" % (min_groups, self.n_splits)), Warning)\n",
"[Parallel(n_jobs=4)]: Done 42 tasks | elapsed: 11.0s\n",
"[Parallel(n_jobs=4)]: Done 160 out of 160 | elapsed: 17.2s finished\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fitting 4 folds for each of 40 candidates, totalling 160 fits\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[Parallel(n_jobs=4)]: Done 42 tasks | elapsed: 10.7s\n",
"[Parallel(n_jobs=4)]: Done 160 out of 160 | elapsed: 16.9s finished\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fitting 4 folds for each of 40 candidates, totalling 160 fits\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[Parallel(n_jobs=4)]: Done 42 tasks | elapsed: 11.4s\n",
"[Parallel(n_jobs=4)]: Done 160 out of 160 | elapsed: 17.6s finished\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fitting 4 folds for each of 40 candidates, totalling 160 fits\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_split.py:605: Warning: The least populated class in y has only 3 members, which is too few. The minimum number of members in any class cannot be less than n_splits=4.\n",
" % (min_groups, self.n_splits)), Warning)\n",
"[Parallel(n_jobs=4)]: Done 42 tasks | elapsed: 10.0s\n",
"[Parallel(n_jobs=4)]: Done 160 out of 160 | elapsed: 16.3s finished\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fitting 4 folds for each of 40 candidates, totalling 160 fits\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_split.py:605: Warning: The least populated class in y has only 3 members, which is too few. The minimum number of members in any class cannot be less than n_splits=4.\n",
" % (min_groups, self.n_splits)), Warning)\n",
"[Parallel(n_jobs=4)]: Done 42 tasks | elapsed: 10.0s\n",
"[Parallel(n_jobs=4)]: Done 160 out of 160 | elapsed: 16.2s finished\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fitting 4 folds for each of 40 candidates, totalling 160 fits\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_split.py:605: Warning: The least populated class in y has only 3 members, which is too few. The minimum number of members in any class cannot be less than n_splits=4.\n",
" % (min_groups, self.n_splits)), Warning)\n",
"[Parallel(n_jobs=4)]: Done 42 tasks | elapsed: 10.7s\n",
"[Parallel(n_jobs=4)]: Done 160 out of 160 | elapsed: 16.9s finished\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fitting 4 folds for each of 40 candidates, totalling 160 fits\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_split.py:605: Warning: The least populated class in y has only 2 members, which is too few. The minimum number of members in any class cannot be less than n_splits=4.\n",
" % (min_groups, self.n_splits)), Warning)\n",
"[Parallel(n_jobs=4)]: Done 42 tasks | elapsed: 10.8s\n",
"[Parallel(n_jobs=4)]: Done 153 out of 160 | elapsed: 16.0s remaining: 0.6s\n",
"[Parallel(n_jobs=4)]: Done 160 out of 160 | elapsed: 16.2s finished\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fitting 4 folds for each of 40 candidates, totalling 160 fits\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_split.py:605: Warning: The least populated class in y has only 2 members, which is too few. The minimum number of members in any class cannot be less than n_splits=4.\n",
" % (min_groups, self.n_splits)), Warning)\n",
"[Parallel(n_jobs=4)]: Done 42 tasks | elapsed: 10.4s\n",
"[Parallel(n_jobs=4)]: Done 160 out of 160 | elapsed: 14.4s finished\n"
]
}
],
"source": [
"test_size = np.linspace(0.2, 0.8, 14)\n",
"\n",
"test_acc_error = []\n",
"test_squ_error = []\n",
"\n",
"train_acc_error = []\n",
"train_squ_error = []\n",
"\n",
"for i in test_size:\n",
" X_train, X_holdout, y_train, y_holdout = train_test_split(X.values, y, test_size = i)\n",
" cv_best_knn.fit(X_train, y_train)\n",
"\n",
" cv_best_knn_prediction_train = cv_best_knn.predict(X_train)\n",
" cv_best_knn_prediction_test = cv_best_knn.predict(X_holdout)\n",
"\n",
" train_acc_error.append(1 - accuracy_score(cv_best_knn_prediction_train, y_train))\n",
" train_squ_error.append(mean_squared_error(cv_best_knn_prediction_train, y_train))\n",
"\n",
" test_acc_error.append(1 - accuracy_score(cv_best_knn_prediction_test, y_holdout))\n",
" test_squ_error.append(mean_squared_error(cv_best_knn_prediction_test, y_holdout))"
]
},
{
"cell_type": "code",
"execution_count": 452,
"metadata": {},
"outputs": [],
"source": [
"data_acc_err = pd.DataFrame(data=[test_size, test_acc_error, train_acc_error]).transpose()\n",
"data_acc_err.columns = ['объем тестовых данных', 'средняя ошибка на тестовых данных', 'средняя ошибка на обучающей выборке']\n",
"\n",
"data_squ_err = pd.DataFrame(data=[test_size, test_squ_error, train_squ_error]).transpose()\n",
"data_squ_err.columns = ['объем тестовых данных', 'среднеквадратичная ошибка на тестовых данных', 'среднеквадратичная ошибка на обучающей выборке']"
]
},
{
"cell_type": "code",
"execution_count": 454,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 454,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"