Конвейеры
Часть раздела Обучение с учителем путешествия по Machine Learning на Coddy. Урок 45 из 58.
В реальных таблицах есть пропуски, слова и данные в разных масштабах. В этой главе мы создадим один объект, который очищает данные и делает предсказания, — конвейер:
Начни с малого: make_pipeline объединяет масштабировщик и модель:
from sklearn.pipeline import make_pipeline
pipe = make_pipeline(StandardScaler(), KNeighborsClassifier())
pipe.fit(X_train, y_train)
print(pipe.score(X_test, y_test))Для 200 тестовых сварных швов, прочных или слабых, это выводит 0.86 по сравнению с 0.74 без масштабирования.
fit учится масштабировать данные на обучающих строках, а затем обучает модель. Каждая последующая строка автоматически масштабируется таким же образом.
Задание
СреднеКомпания по полётам на воздушных шарах каждый вечер решает, будет ли завтра лётный день. Новичок масштабирует данные вручную: точность на тестовой выборке хорошая, но прогноз никогда не масштабируется, поэтому программа говорит yes при любой погоде.
- Замени это конвейером: сначала масштабировщик, затем k-NN; обучи его на строках обучающей выборки.
- Выведи точность на тестовой выборке и оцени с его помощью прогноз.
Другая компания, день 20, 32, 7000, 9:
Test accuracy: 0.880
Flying day: noПопробуйте сами
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.pipeline import make_pipeline
# Прошлые дни в компании воздушных шаров: лётный день (1) или нет (0)
days = pd.read_csv("balloons.csv")
X = days[["wind_kmh", "gusts_kmh", "visibility_m", "passengers"]].to_numpy()
y = days["flying_day"].to_numpy()
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
# Прогноз на завтра: ветер, порывы ветра, видимость, число забронировавших пассажиров
day = np.array([[float(input()), float(input()), float(input()), float(input())]])
# Масштабирование вручную: оценка выглядит хорошей, но данные прогноза не масштабируются
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
model = KNeighborsClassifier()
model.fit(X_train_scaled, y_train)
print(f"Test accuracy: {model.score(X_test_scaled, y_test):.3f}")
if model.predict(day)[0] == 1:
print("Flying day: yes")
else:
print("Flying day: no")
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Обучение с учителем
1Ваша первая модель
Обучение на примерахОбучающая и тестовая выборкиОбучение и предсказаниеОценка моделиПовторение: сортировщик семян4Логистическая регрессия
Предсказания «да» или «нет»Порог принятия решенияВеса как свидетельстваНесколько классовПовторение: спам-фильтр2Метод ближайших соседей
Как работает k-NNВыбор kГраницы принятия решенийМасштабирование признаков для поиска соседейПовторение: соседи для вин5Оценка классификаторов
Матрица ошибокТочность и полнотаF1-мераНесбалансированные классыROC-кривыеПовторение: скрининговый тест8Кросс-валидация
K-блочная проверкаСправедливое сравнение моделейПоиск по сеткеПовторение: ремонт скейтбордов11Проект: виды пингвинов
Знакомство с пингвинамиПодготовка данныхВыбор моделиНастройка лучшей моделиЗапуск моделиПотренируйтесь самостоятельно: Онлайн-компилятор Python