Menu
CoddyTech

Поиск по сетке

Часть раздела Обучение с учителем путешествия по Machine Learning на Coddy. Урок 39 из 58.

Подбор параметров вручную означает вложенные циклы. GridSearchCV проверяет с помощью перекрёстной проверки каждую комбинацию настроек и выбирает лучшую. Для 300 поездок трамвая, с опозданием или вовремя:

Сетка 3 на 3 со средними значениями точности: глубина дерева 2, 4, 6 по вертикали, минимальное количество строк в листе 1, 5, 20 по горизонтали. Лучшая ячейка — глубина 4 и значение 5 для листа — показывает 0.876 и выделена рамкой

Словарь сопоставляет каждую настройку со значениями, которые нужно попробовать. min_samples_leaf — это минимальное количество строк, которое может содержать лист:

from sklearn.model_selection import GridSearchCV

grid = {"max_depth": [2, 4, 6], "min_samples_leaf": [1, 5, 20]}
search = GridSearchCV(DecisionTreeClassifier(random_state=0), grid, cv=5)
search.fit(X_train, y_train)
print(search.best_params_)
print(f"{search.best_score_:.3f}")
print(f"{search.score(X_test, y_test):.3f}")

Это выводит:

{'max_depth': 4, 'min_samples_leaf': 5}
0.876
0.813

Поиск повторно обучает победителя на всех обучающих строках, поэтому search.score проверяет его один раз. Сохраняй небольшие сетки: каждая ячейка требует 5 обучений.

challenge icon

Задание

Средне

Команда спутниковой съёмки классифицирует пиксели как облачность или ясное небо с помощью k-NN. Программа считывает наибольшее значение k для проверки; заготовка разделяет данные.

  1. Выполни поиск по сетке для каждого нечётного k от 1 до этого числа, используя weights "uniform" или "distance" (более близкие соседи имеют больший вес), cv=5.
  2. Выведи лучшие настройки, точность при перекрёстной проверке и точность на тестовой выборке с 3 знаками после запятой.

Для остальных пикселей и значения 7:

Best k: 7, weights: distance
Cross-validated accuracy: 0.885
Test accuracy: 0.800

Попробуйте сами

from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.neighbors import KNeighborsClassifier

max_k = int(input())

# Не изменяйте строки ниже: 360 спутниковых пикселей, по 4 измерения освещённости для каждого; метка 1 означает облако
X, y = make_classification(n_samples=360, n_features=4, n_informative=3, n_redundant=0,
                           flip_y=0.08, class_sep=0.7, random_state=1)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)

# Напишите свой код ниже
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Обучение с учителем

Потренируйтесь самостоятельно: Онлайн-компилятор Python