1. ホーム
  2. python

[解決済み] sklearn.pipeline.Pipelineって何?

2022-05-15 23:32:17

質問

をどのように使用するのかがわかりません。 sklearn.pipeline.Pipeline が正確に動作するのかがわかりません。

にはいくつかの説明があります。 doc . 例えば、彼らは何を意味するのでしょうか。

最終的な推定値を持つ変換のパイプライン。

私の質問をより明確にするために、何が steps ? それらはどのように機能するのですか?

編集

回答のおかげで、私の質問を明確にすることができます。

パイプラインを呼び出し、ステップとして2つのトランスフォーマーと1つのエスティメータを渡すと、例えば、次のようになります。

pipln = Pipeline([("trsfm1",transformer_1),
                  ("trsfm2",transformer_2),
                  ("estmtr",estimator)])

これを呼び出すとどうなるのでしょうか?

pipln.fit()
OR
pipln.fit_transform()

推定器が変換器となり、変換器がフィットする仕組みがわかりません。

どのように解決するのですか?

トランスフォーマー scikit-learnでは、fitとtransformメソッド、またはfit_transformメソッドを持ついくつかのクラスがあります。

予測器 - fitメソッドとpredictメソッドを持つクラス、またはfit_predictメソッド。

パイプライン は単なる抽象的な概念であり、既存のMLアルゴリズムではありません。MLタスクではしばしば、最終的な推定値を適用する前に、生のデータセットに対して一連の異なる変換(特徴のセットを見つける、新しい特徴を生成する、いくつかの良い特徴だけを選択する)を実行する必要があります。

ここで はPipelineの良い使用例です。 Pipelineは変換とその結果の推定という3つのステップを一つのインターフェースで実現します。変換器と予測器を内部にカプセル化し、次のようなことができるようになります。

    vect = CountVectorizer()
    tfidf = TfidfTransformer()
    clf = SGDClassifier()

    vX = vect.fit_transform(Xtrain)
    tfidfX = tfidf.fit_transform(vX)
    predicted = clf.fit_predict(tfidfX)

    # Now evaluate all steps on test set
    vX = vect.fit_transform(Xtest)
    tfidfX = tfidf.fit_transform(vX)
    predicted = clf.fit_predict(tfidfX)

だけで。

pipeline = Pipeline([
    ('vect', CountVectorizer()),
    ('tfidf', TfidfTransformer()),
    ('clf', SGDClassifier()),
])
predicted = pipeline.fit(Xtrain).predict(Xtrain)
# Now evaluate all steps on test set
predicted = pipeline.predict(Xtest)

パイプラインを使えば、このメタ推定器の各段階のパラメータをグリッド検索することが簡単にできます。上のリンクで説明されている通りです。最後のステップを除くすべてのステップはtransformsでなければならず、最後のステップはtransformerまたはpredictorにすることができます。 編集する回答 : を呼び出すと pipln.fit() - を呼び出すと、パイプライン内の各変換器は、前の変換器の出力にフィットします(最初の変換器は生のデータセットで学習されます)。 最後の推定値がtransformerであってもpredictorであっても、パイプライン上でfit_transform()を呼び出せるのは、最後の推定値がtransformer(fit_transform、またはtransformとfitメソッドを別々に実装)の場合のみで、パイプライン上でfit_predict()やpredict()を呼び出せるのは、最後の推定値がpredictorであるときのみです。つまり、最後のステップがpredictorであるパイプライン上では、fit_transformやtransformを呼び出すことができないのです。