Выбор k
Часть раздела Обучение с учителем путешествия по Machine Learning на Coddy. Урок 7 из 58.
Какое значение k подходит для перцев чили? Попробуй несколько вариантов и дважды оцени каждую модель: на строках, которые она изучала, — точность на обучающей выборке, и на скрытых строках — точность на тестовой выборке.
При k = 1 каждый перец чили является своим ближайшим соседом, поэтому модель запоминает данные: идеальный результат на своих строках, хуже — на новых. Очень большое значение k размывает группы.
ks = range(1, 120, 6)
train_acc = []
test_acc = []
for k in ks:
model = KNeighborsClassifier(n_neighbors=k)
model.fit(X_train, y_train)
train_acc.append(model.score(X_train, y_train))
test_acc.append(model.score(X_test, y_test))Пока что выбери k, при котором точность на тестовой выборке достигает максимума: в главе 7 будет показан более беспристрастный способ оценки.
Задание
ЛегкоФутбольный клуб записывает удары в shots.csv: расстояние, угол и goal или miss. При каком k прогнозы лучше всего? Стартовый код разделяет данные, перечисляет ks и задаёт подписи графика.
- Для каждого k обучи модель и сохрани точность на обучающей и тестовой выборках.
- Выведи лучшее k по точности на тестовой выборке, как показано ниже.
- Построй оба списка в зависимости от
ks, добавив подписиtrainиtestи легенду.
Для другого клуба:
Best k: 9 (test accuracy 0.783)Затем Coddy опишет твой график.
Попробуйте сами
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
# Одна строка на каждый удар: расстояние до ворот (м), угол по отношению к створу ворот (в градусах), гол или промах
shots = pd.read_csv("shots.csv")
X = shots[["distance_m", "angle_deg"]]
y = shots["result"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
ks = range(1, 42, 4) # k = 1, 5, 9, ..., 41
fig, ax = plt.subplots()
ax.set_title("Shots: Accuracy by k")
ax.set_xlabel("k (neighbors)")
ax.set_ylabel("Accuracy")
# Напишите свой код ниже
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Обучение с учителем
1Ваша первая модель
Обучение на примерахОбучающая и тестовая выборкиОбучение и предсказаниеОценка моделиПовторение: сортировщик семян4Логистическая регрессия
Предсказания «да» или «нет»Порог принятия решенияВеса как свидетельстваНесколько классовПовторение: спам-фильтр2Метод ближайших соседей
Как работает k-NNВыбор kГраницы принятия решенийМасштабирование признаков для поиска соседейПовторение: соседи для вин5Оценка классификаторов
Матрица ошибокТочность и полнотаF1-мераНесбалансированные классыROC-кривыеПовторение: скрининговый тест8Кросс-валидация
K-блочная проверкаСправедливое сравнение моделейПоиск по сеткеПовторение: ремонт скейтбордов11Проект: виды пингвинов
Знакомство с пингвинамиПодготовка данныхВыбор моделиНастройка лучшей моделиЗапуск моделиПотренируйтесь самостоятельно: Онлайн-компилятор Python