0Pricing
Learn AI with Python · レッスン

前処理パイプラインの構築

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 外れ値の検出と除去
  2. カテゴリ変数のエンコーディング
  3. 特徴量スケーリング:正規化と標準化
  4. 前処理パイプラインの構築
← Learn AI with Pythonに戻る