パイプライン
CoddyのMachine Learningジャーニー「教師あり学習」セクションの一部。レッスン 45/58。
実際のテーブルには欠損値や単語、尺度の異なるデータが含まれています。この章では、それらをクリーニングして予測する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は訓練用の行からスケーリングを学習し、その後に訓練します。それ以降のすべての行は、自動的に同じ方法でスケーリングされます。
チャレンジ
中級ある気球会社では、毎晩、翌日が飛行日かどうかを判断します。最初のコードでは手作業でスケーリングしています。テスト精度は問題ありませんが、予報はスケーリングされないため、どんな天候でも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")
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
教師あり学習のすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ