パイプラインと複合推定器

Beginner

This tutorial is from open-source community. Access the source code

はじめに

scikit-learn では、パイプラインと複合推定器を使用して、複数の変換器と推定器を 1 つのモデルに結合します。これは、特徴選択、正規化、分類など、データを処理する固定されたステップのシーケンスがある場合に便利です。パイプラインは、共通のパラメータ選択にも使用でき、クロスバリデーション中にテストデータの統計情報が学習済みモデルに漏れないようにするためにも使用できます。

VM のヒント

VM の起動が完了したら、左上隅をクリックして ノートブック タブに切り替え、Jupyter Notebook を使用して練習します。

Jupyter Notebook の読み込みには数秒かかる場合があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。

学習中に問題が発生した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。

パイプライン - 推定器のチェーニング

scikit-learn の Pipeline クラスは、複数の推定器を 1 つにチェーニングするために使用されます。これにより、データに対して一度の fitpredict 呼び出しで、推定器の一連の全体を適合させることができます。また、共通のパラメータ選択も可能で、クロスバリデーションにおけるデータの漏洩を回避するのに役立ちます。

パイプラインを作成するには、(キー, 値) のペアのリストを提供する必要があります。ここで、キー は各ステップを識別するための文字列で、 は推定器オブジェクトです。以下は、PCA 変換器と SVM 分類器を持つパイプラインを作成する例です:

from sklearn.pipeline import Pipeline
from sklearn.svm import SVC
from sklearn.decomposition import PCA

estimators = [('reduce_dim', PCA()), ('clf', SVC())]
pipe = Pipeline(estimators)

パイプラインのステップには、インデックスまたは名前を使ってアクセスできます:

pipe.steps[0]  ## インデックスでアクセス
pipe[0]  ## 上記と同等
pipe['reduce_dim']  ## 名前でアクセス

また、make_pipeline 関数を使って、パイプラインの構築を省略形で行うこともできます:

from sklearn.pipeline import make_pipeline
from sklearn.naive_bayes import MultinomialNB
from sklearn.preprocessing import Binarizer

make_pipeline(Binarizer(), MultinomialNB())

ネストされたパラメータ

パイプライン内の推定器のパラメータには、<推定器>__<パラメータ> の構文を使ってアクセスできます。これは、パイプライン内のすべての推定器のパラメータに対してグリッドサーチを行う際に便利です。以下は例です:

pipe.set_params(clf__C=10)

トランスフォーマーのキャッシング

トランスフォーマーの適合は計算コストがかかる場合があります。繰り返しの計算を回避するために、memory パラメータを使用してパイプライン内でトランスフォーマーのキャッシングを有効にできます。このパラメータは、トランスフォーマーがキャッシュされるディレクトリ、または joblib.Memory オブジェクトに設定できます。以下は例です:

from sklearn.decomposition import PCA
from sklearn.svm import SVC
from sklearn.pipeline import Pipeline
from tempfile import mkdtemp
from shutil import rmtree

estimators = [('reduce_dim', PCA()), ('clf', SVC())]
cachedir = mkdtemp()
pipe = Pipeline(estimators, memory=cachedir)

## Clear the cache directory when no longer needed
rmtree(cachedir)

変換済みターゲット回帰器

TransformedTargetRegressor クラスは、回帰モデルを適合させる前に回帰問題のターゲット変数を変換するために使用されます。これは、対数を取るなど、ターゲット変数に変換を適用したい場合に便利です。予測は逆変換を介して元の空間にマッピングされます。以下は、線形回帰モデルと量子化変換器を使用した TransformedTargetRegressor の使用例です:

import numpy as np
from sklearn.datasets import fetch_california_housing
from sklearn.compose import TransformedTargetRegressor
from sklearn.preprocessing import QuantileTransformer
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split

X, y = fetch_california_housing(return_X_y=True)
transformer = QuantileTransformer(output_distribution='normal')
regressor = LinearRegression()
regr = TransformedTargetRegressor(regressor=regressor, transformer=transformer)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
regr.fit(X_train, y_train)
regr.score(X_test, y_test)

FeatureUnion - 複合特徴空間

FeatureUnion クラスは、複数のトランスフォーマーオブジェクトを結合して、それらの出力を組み合わせた新しいトランスフォーマーを作成するために使用されます。これは、データの異なる特徴に対して異なる変換を適用したい場合に便利です。たとえば、テキスト、浮動小数点数、日付をそれぞれ別々に前処理する場合などです。トランスフォーマーは並列に適用され、それらが出力する特徴行列は横並びに連結されてより大きな行列になります。以下は例です:

from sklearn.pipeline import FeatureUnion
from sklearn.decomposition import PCA
from sklearn.decomposition import KernelPCA

estimators = [('linear_pca', PCA()), ('kernel_pca', KernelPCA())]
combined = FeatureUnion(estimators)

まとめ

パイプラインと複合推定器は、scikit-learn における強力なツールであり、トランスフォーマーと推定器を単一のモデルに結合するために使用されます。これらは便利さ、パラメータ選択、およびデータの安全性を提供します。パイプラインは、推定器のチェーニング、ネストされたパラメータ、およびトランスフォーマーのキャッシングを可能にします。TransformedTargetRegressorFeatureUnion のような複合推定器は、それぞれ変換と特徴の組み合わせを提供します。これらの概念は、前処理と異種データを効果的に処理する複雑な機械学習モデルを構築するために不可欠です。