Menu
CoddyTech

パイプライン

CoddyのMachine Learningジャーニー「教師あり学習」セクションの一部。レッスン 45/58。

実際のテーブルには欠損値や単語、尺度の異なるデータが含まれています。この章では、それらをクリーニングして予測する1つのオブジェクト、パイプラインを作成します。

「入力は生の列、出力は予測」と題された図。欠損値のある数値は一方の経路を進み、SimpleImputerが欠損値を補完し、その後StandardScalerに進みます。単語はもう一方の経路を進み、OneHotEncoderがそれらを0と1に変換します。2つの経路はモデルのところで合流します。各ステップを囲む破線の枠には「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.74に対し、0.86と出力されます。

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オンラインコンパイラ