http://scikit-learn.org/0.18/modules/pipeline.html をgoogle翻訳した
scikit-learn 0.18 ユーザーガイド 4. データセット変換 より
4.1. パイプラインとFeatureUnion:推定器の組み合わせ
4.1.1. パイプライン:連鎖推定
パイプライン を使用すると、複数の推定器を1つにまとめることができます。特徴選択、正規化、分類など、データを処理するステップは固定されていることが多いため、便利です。パイプラインはここで2つの目的を果たします。
-
利便性:推定器のシーケンス全体に合わせるためには、
fit
を呼び出してデータを一度predict
するだけです。 - ジョイントパラメータの選択 :パイプライン内のすべての推定器のパラメータを一度にグリッドで検索できます。
最後のパイプラインを除くパイプラインのすべての推定器は、変換器でなければなりません(transform
メソッドが必要です)。 最後の推定器は、任意のタイプ(変換器、分類器など)であってよい。
4.1.1.1. 使用法
パイプラインは (key, value)
のペアのリストを使用して作成されます。key
はこのステップに付ける名前の文字列で、value
は推定器インスタンスです。
>>> 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
Pipeline(steps=[('reduce_dim', PCA(copy=True, iterated_power='auto',
n_components=None, random_state=None, svd_solver='auto', tol=0.0,
whiten=False)), ('clf', SVC(C=1.0, cache_size=200, class_weight=None,
coef0=0.0, decision_function_shape=None, degree=3, gamma='auto',
kernel='rbf', max_iter=-1, probability=False, random_state=None,
shrinking=True, tol=0.001, verbose=False))])
ユーティリティ関数 make_pipeline は、パイプラインを構築するための省略形です。複数の推定器を引数に、パイプラインを返ます。名前は自動的に決まります:
>>> from sklearn.pipeline import make_pipeline
>>> from sklearn.naive_bayes import MultinomialNB
>>> from sklearn.preprocessing import Binarizer
>>> make_pipeline(Binarizer(), MultinomialNB())
Pipeline(steps=[('binarizer', Binarizer(copy=True, threshold=0.0)),
('multinomialnb', MultinomialNB(alpha=1.0,
class_prior=None,
fit_prior=True))])
パイプライン中の推定器は、 steps
属性にリストとして格納されています。
>>> pipe.steps[0]
('reduce_dim', PCA(copy=True, iterated_power='auto', n_components=None, random_state=None,
svd_solver='auto', tol=0.0, whiten=False))
あと dict
として named_steps
にも:
>>> pipe.named_steps['reduce_dim']
PCA(copy=True, iterated_power='auto', n_components=None, random_state=None,
svd_solver='auto', tol=0.0, whiten=False)
パイプラインの推定パラメータは、<estimator>__<parameter>
構文を使用してアクセスできます。
>>> pipe.set_params(clf__C=10)
Pipeline(steps=[('reduce_dim', PCA(copy=True, iterated_power='auto',
n_components=None, random_state=None, svd_solver='auto', tol=0.0,
whiten=False)), ('clf', SVC(C=10, cache_size=200, class_weight=None,
coef0=0.0, decision_function_shape=None, degree=3, gamma='auto',
kernel='rbf', max_iter=-1, probability=False, random_state=None,
shrinking=True, tol=0.001, verbose=False))])
これは、グリッド検索を行う場合に特に重要です。
>>> from sklearn.model_selection import GridSearchCV
>>> params = dict(reduce_dim__n_components=[2, 5, 10],
... clf__C=[0.1, 10, 100])
>>> grid_search = GridSearchCV(pipe, param_grid=params)
個々のステップもパラメータとして置き換えられ、非最終ステップは無視され、None
に設定されます。
>>>
>>> from sklearn.linear_model import LogisticRegression
>>> params = dict(reduce_dim=[None, PCA(5), PCA(10)],
... clf=[SVC(), LogisticRegression()],
... clf__C=[0.1, 10, 100])
>>> grid_search = GridSearchCV(pipe, param_grid=params)
- 例:
- 参照:
4.1.1.2. ノート
パイプライン上で fit
を呼び出すことは、各推定器に順番に fit
を呼び出し、入力を変換して次のステップに渡すのと同じです。 パイプラインは、パイプライン中の最後の推定器が有するすべてのメソッドを有する。すなわち、最後の推定器が分類器である場合、パイプラインは分類器として使用され得る。 最後の推定器が変換器であれば、パイプラインも同様です。
4.1.2. FeatureUnion:複合フィーチャスペース
FeatureUnion は、いくつかの変換器オブジェクトを、それらの出力を組み合わせた新しい変換器に結合します。 FeatureUnionは変換器オブジェクトのリストを取ります。 フィッティング中は、これらのそれぞれがデータに個別にフィットします。 データを変換するために、変換は並列に適用され、それらが出力するサンプルベクトルは、エンドツーエンドで連結されて大きなベクトルになります。
FeatureUnionは、Pipelineと同じ目的を果たします - 利便性と共同パラメータの推定と検証。
FeatureUnionとパイプラインを組み合わせて複雑なモデルを作成することができます。
(FeatureUnionは2つの変換が同じフィーチャを生成するかどうかをチェックする方法がなく、フィーチャセットがばらばらになっている場合にのみユニオンを生成し、コール元の責任であることを確認します)。
4.1.2.1. 使用法
FeatureUnionは (key, value)
のペアのリストを使用して構築されます。ここで、key
は変換に与える名前です(任意の文字列、識別子としてのみ機能します)。value
は推定器オブジェクトです。
>>> 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)
>>> combined
FeatureUnion(n_jobs=1, transformer_list=[('linear_pca', PCA(copy=True,
iterated_power='auto', n_components=None, random_state=None,
svd_solver='auto', tol=0.0, whiten=False)), ('kernel_pca',
KernelPCA(alpha=1.0, coef0=1, copy_X=True, degree=3,
eigen_solver='auto', fit_inverse_transform=False, gamma=None,
kernel='linear', kernel_params=None, max_iter=None, n_components=None,
n_jobs=1, random_state=None, remove_zero_eig=False, tol=0))],
transformer_weights=None)
パイプラインと同様、フィーチャユニオンには、コンポーネントの明示的な命名を必要としない、make_union という簡潔なコンストラクタがあります。
>>> combined.set_params(kernel_pca=None)
FeatureUnion(n_jobs=1, transformer_list=[('linear_pca', PCA(copy=True,
iterated_power='auto', n_components=None, random_state=None,
svd_solver='auto', tol=0.0, whiten=False)), ('kernel_pca', None)],
transformer_weights=None)
パイプラインと同様に、個々のステップは set_params
を使用して置き換えられ、 None
に設定されると無視されます。
scikit-learn 0.18 ユーザーガイド 4. データセット変換 より
©2010 - 2016、scikit-learn developers(BSDライセンス)。