はじめに
ML プロジェクトが多くの前処理ステップから始まる場合、各ステップを手書きすると間違いが起こりやすくなります。 Pipeline と ColumnTransformer を使用すると、すべての前処理とモデルを 1 つの統合フローに結合でき、再現とデバッグが容易になり、リークのリスクを軽減できます。
レッスンの目標
- 個別処理ではなくパイプラインを使用する必要がある理由を理解します。
- 多くの列タイプのデータに対して ColumnTransformer を使用する方法を理解します。
- 一貫したトレーニング/予測ワークフローを構築します。
パイプラインが重要なのはなぜですか?
パイプラインは、トレーニングとテストの両方でスケーラーをフィッティングしたり、新しいデータを予測するときに同じ変換を適用するのを忘れたり、モデルを保存したが前処理ロジックを忘れたりするなど、よくある間違いを回避するのに役立ちます。
標準構造
- 数値: 入力してからスケーリングします。
- カテゴリカル: インピュートしてからワンホット。
- ColumnTransformer を使用してマージします。
- 最後のステップで分類子またはリグレッサーを設定します。
コード例
sklearn.compose からインポート ColumnTransformer
sklearn.pipeline からパイプラインをインポート
sklearn.preprocessing からインポート OneHotEncoder、StandardScaler
sklearn.impute から SimpleImputer をインポート
sklearn.ensemble からのインポート RandomForestClassifier
実際のメリット
- 相互検証が簡単です。
- joblib で保存/読み込みが簡単。
- バッチ推論を展開する際のエラーが少なくなります。
よくある間違い
- 列リストの間違った使用。
- 新しい機能を追加しましたが、ColumnTransformer を更新するのを忘れていました。
- パイプラインの外で fit_transform を呼び出してから、パイプライン内で再度 Fit_transform を呼び出します。
練習問題を練習する
- チャーン データまたはハウジング データ用の完全なパイプラインを構築します。
- パイプラインを使用したコードと手動で処理されたコードを比較します。
- 5 行書いてください: パイプラインが最も削減に役立つのはどの種類のエラーですか?
完了基準
- Pipeline と ColumnTransformer を自分で構築できます。
- パイプラインが漏洩の防止にどのように役立つかを理解します。
- 完全なワークフローを保存/ロードできます。
段階的に練習する (上級)
- 前処理 + モデルを含む完全なパイプラインを作成します。
- 数値/カテゴリカルを 2 つの変換ブランチに分割します。
- 同じパイプラインを使用して、新しいサンプルをトレーニング、検証、予測します。
- joblib を使用してパイプラインを保存し、予測のために再ロードします。
- 入力スキーマが壊れていないことを確認するための小さなテストを作成します。
アーティファクトを送信する必要があります
- ファイルパイプラインは再利用できます。
- 1 レコードの最小予測スクリプト。
- パイプラインに基づいた漏洩防止のためのチェックリスト。
セルフテストの質問
- 手動の Fit_transform はパイプラインよりもエラーが発生しやすいのはなぜですか?
- 新しい機能を追加する場合、ColumnTransformer の何を更新する必要がありますか?
- 導入時のパイプラインの最大のメリットは何ですか?