前処理パイプラインの構築
sklearn Pipeline、ColumnTransformer、トランスフォーマーを組み合わせた前処理ワークフローを扱います。
「前処理パイプラインの構築」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。
パイプラインを使う理由
scikit-learnのPipelineは、前処理の手順とモデルを1つのオブジェクトに連結します。トレーニングデータとテストデータに同じ変換が適用されることを保証し、リーケージや複雑なコードを防ぎます。
基本的なパイプライン
Pipelineは、(name, step)タプルのリストを受け取ります。fitを呼び出すと各ステップが順番に実行され、最後のステップは通常、推定器になります。
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
pipe = Pipeline([
("scale", StandardScaler()),
("model", LogisticRegression()),
])パイプライン全体をfitしてpredictする
パイプラインを1つのモデルとして扱ってください。fitはスケーラーの学習とモデルのトレーニングを行い、predictはスケーラーを適用してからモデルを実行します。これらは自動的かつ一貫して行われます。
pipe.fit(X_train, y_train)
preds = pipe.predict(X_test) # scaling applied automatically設計によってリーケージを防ぐ
パイプラインはfitの間(トレーニングデータに対して)だけスケーラーを学習し、predictの間は変換だけを行います。そのため、テストデータでfitしてしまうミスを自動的に排除できます。
異なる型の列を混在させる
実際のデータセットでは、異なる前処理が必要な数値列とカテゴリ列が混在します。ColumnTransformerを使うと、列の各部分集合に異なる変換器を適用できます。
ColumnTransformer
(name, transformer, columns)のタプルを指定します。数値列にはスケーリングを、カテゴリ列にはワンホットエンコーディングを適用する処理を、1つのステップで行えます。
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
pre = ColumnTransformer([
("num", StandardScaler(), ["age", "income"]),
("cat", OneHotEncoder(handle_unknown="ignore"), ["city"]),
])完全なパイプラインにネストする
ColumnTransformerをPipelineの最初のステップに配置し、その後にモデルを続けると、リーケージのない完全なワークフローになります。
full = Pipeline([
("prep", pre),
("model", LogisticRegression()),
])
full.fit(X_train, y_train)ステップ内で欠損値を処理する
数値処理の分岐(それ自体を小さなパイプラインにすることもよくあります)にSimpleImputerを追加し、スケーリング前に欠損値を補完します。これにより、すべての処理をパイプライン内に収められます。
from sklearn.impute import SimpleImputer
num_pipe = Pipeline([
("impute", SimpleImputer(strategy="median")),
("scale", StandardScaler()),
])トレーニングではfit_transform、テストではtransform
パイプライン全体にも同じ鉄則が適用されます。fitの間にトレーニングデータからすべてのパラメータを学習し、その後はpredictまたはtransformの間にテストデータを変換するだけにします。
full.fit(X_train, y_train) # learns imputer, scaler, encoder, model
full.predict(X_test) # transform-only pathパイプラインを保存する
前処理とモデルを含むfit済みのパイプライン全体を、joblibでディスクに保存します。後で読み込めば、本番環境でも同じ前処理が適用され、手作業で処理を再現する必要がありません。
import joblib
joblib.dump(full, "model.joblib")
loaded = joblib.load("model.joblib")
loaded.predict(X_new) # same preprocessing guaranteed本番環境で重要な理由
保存したパイプラインを使うと、デプロイされたモデルは入力データをトレーニング時と完全に同じ方法で前処理します。この一貫性は、トレーニングとサービングの間の分布差によるバグを防ぐ最大の対策です。
理解度チェック
パイプラインに関する知識を確認しましょう。
まとめ
パイプラインのツールキット:
Pipelineは前処理とモデルを、fit/predictを行う1つのオブジェクトに連結します- リーケージを防ぎます:パラメータは
fitで学習し、predictで適用します ColumnTransformerは数値列とカテゴリ列の混在に対応します- パイプライン内の欠損値には
SimpleImputerを使用します - 一貫した本番環境での前処理のために、
joblibで保存します
よくある質問
「前処理パイプラインの構築」レッスンは無料ですか?
はい。「前処理パイプラインの構築」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。
「前処理パイプラインの構築」で何を学びますか?
sklearn Pipeline、ColumnTransformer、トランスフォーマーを組み合わせた前処理ワークフローを扱います。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Learn AI with Pythonを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「前処理パイプラインの構築」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLearn AI with Pythonレッスンでコードを書いて実行できますか?
はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 外れ値の検出と除去
- カテゴリ変数のエンコーディング
- 特徴量スケーリング:正規化と標準化
- 前処理パイプラインの構築