Menu
CoddyTech

Конвейеры

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

В реальных таблицах есть пропуски, слова и данные в разных масштабах. В этой главе мы создадим один объект, который очищает данные и делает предсказания, — конвейер:

Диаграмма с заголовком «На входе — необработанные столбцы, на выходе — предсказания». Числа с пропусками идут по одной линии: SimpleImputer заполняет пропуски, затем применяется StandardScaler. Слова идут по другой линии: OneHotEncoder преобразует их в 0 и 1. Обе линии сходятся у модели. Пунктирная рамка вокруг шагов подписана «один конвейер: обучи его, затем делай предсказания»

Начни с малого: 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 учится масштабировать данные на обучающих строках, а затем обучает модель. Каждая последующая строка автоматически масштабируется таким же образом.

challenge icon

Задание

Средне

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

  1. Замени это конвейером: сначала масштабировщик, затем k-NN; обучи его на строках обучающей выборки.
  2. Выведи точность на тестовой выборке и оцени с его помощью прогноз.

Другая компания, день 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")
quiz iconПроверьте себя

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

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

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