Поиск по сетке
Часть раздела Обучение с учителем путешествия по Machine Learning на Coddy. Урок 39 из 58.
Подбор параметров вручную означает вложенные циклы. GridSearchCV проверяет с помощью перекрёстной проверки каждую комбинацию настроек и выбирает лучшую. Для 300 поездок трамвая, с опозданием или вовремя:
Словарь сопоставляет каждую настройку со значениями, которые нужно попробовать. 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 обучений.
Задание
СреднеКоманда спутниковой съёмки классифицирует пиксели как облачность или ясное небо с помощью k-NN. Программа считывает наибольшее значение k для проверки; заготовка разделяет данные.
- Выполни поиск по сетке для каждого нечётного k от 1 до этого числа, используя
weights"uniform"или"distance"(более близкие соседи имеют больший вес),cv=5. - Выведи лучшие настройки, точность при перекрёстной проверке и точность на тестовой выборке с 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)
# Напишите свой код ниже
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Обучение с учителем
1Ваша первая модель
Обучение на примерахОбучающая и тестовая выборкиОбучение и предсказаниеОценка моделиПовторение: сортировщик семян4Логистическая регрессия
Предсказания «да» или «нет»Порог принятия решенияВеса как свидетельстваНесколько классовПовторение: спам-фильтр2Метод ближайших соседей
Как работает k-NNВыбор kГраницы принятия решенийМасштабирование признаков для поиска соседейПовторение: соседи для вин5Оценка классификаторов
Матрица ошибокТочность и полнотаF1-мераНесбалансированные классыROC-кривыеПовторение: скрининговый тест8Кросс-валидация
K-блочная проверкаСправедливое сравнение моделейПоиск по сеткеПовторение: ремонт скейтбордов11Проект: виды пингвинов
Знакомство с пингвинамиПодготовка данныхВыбор моделиНастройка лучшей моделиЗапуск моделиПотренируйтесь самостоятельно: Онлайн-компилятор Python