Menu
CoddyTech

Настройка конвейера

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

Конвейер можно настраивать, как и любую модель, включая шаги очистки. Каждый параметр задаётся названием шага, двумя символами подчёркивания, а затем названием параметра:

pipe = make_pipeline(SimpleImputer(), DecisionTreeClassifier(random_state=0))
grid = {"simpleimputer__strategy": ["mean", "median", "most_frequent"],
        "decisiontreeclassifier__max_depth": [2, 4, 6, 8]}
search = GridSearchCV(pipe, grid, cv=5)
search.fit(X_train, y_train)

make_pipeline называет каждый шаг по имени его класса, в нижнем регистре. Для 200 запусков модельной ракеты, достигавшей высоты 300 м или нет, оценки для 12 настроек:

Сетка средних показателей точности CV: строки соответствуют заполнению средним, медианой и most_frequent, столбцы — глубине дерева 2, 4, 6 и 8. Оценки варьируются от 0.733 до 0.820, а лучшим отмечено значение для заполнения медианой при глубине 6 — 0.820

На каждом фолде заново обучается весь конвейер, в том числе и заполнение пропусков, поэтому ни один фолд не заглядывает в строки, на которых его проверяют.

challenge icon

Задание

Средне

Музыкальная школа хочет узнать, какие ученики, изучающие игру на скрипке, сдадут экзамен на класс. Стартовый код считывает три значения k, а поиск по сетке параметров для конвейера останавливается с ошибкой.

  1. Исправь два ключа сетки, чтобы поиск подбирал стратегию заполнителя пропусков и число соседей k-NN.
  2. Выведи лучшие настройки, точность при перекрёстной проверке и точность на тестовой выборке, как показано ниже.

Другая школа, со значениями 2, 4, 6:

Best: mean fills, 6 neighbors
Cross-validated accuracy: 0.720
Test accuracy: 0.820

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

import pandas as pd
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.pipeline import make_pipeline

# Ученики-скрипачи: сдали экзамен на уровень (1) или нет (0); некоторые журналы занятий
# и оценки чтения с листа отсутствуют
students = pd.read_csv("violins.csv")
X = students.drop(columns="passed")
y = students["passed"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
ks = [int(input()), int(input()), int(input())]

# Этот поиск завершается ошибкой: исправьте сетку параметров
pipe = make_pipeline(SimpleImputer(), StandardScaler(), KNeighborsClassifier())
grid = {
    "strategy": ["mean", "median"],
    "n_neighbors": ks,
}
search = GridSearchCV(pipe, grid, cv=5)
search.fit(X_train, y_train)

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

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

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

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