19

Pipeline ()partial_fit()内にラップされた scikit-learn 分類子をどのように呼び出しますか?

次のようなものを使用して、段階的にトレーニング可能なテキスト分類器を構築しようとしていますSGDClassifier:

from sklearn.linear_model import SGDClassifier
from sklearn.pipeline import Pipeline
from sklearn.feature_extraction.text import HashingVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.multiclass import OneVsRestClassifier

classifier = Pipeline([
    ('vectorizer', HashingVectorizer(ngram_range=(1,4), non_negative=True)),
    ('tfidf', TfidfTransformer()),
    ('clf', OneVsRestClassifier(SGDClassifier())),
])

しかし、私はAttributeError電話しようとしていますclassifier.partial_fit(x,y)

をサポートしているfit()ので、利用できない理由がわかりpartial_fit()ません。パイプラインをイントロスペクトし、データ トランスフォーマーを呼び出しpartial_fit()てから、分類子を直接呼び出すことは可能でしょうか?

4

4 に答える 4

17

これが私がやっていることです - 「マッパー」と「clf」は私のパイプラインオブジェクトの2つのステップです。

def partial_pipe_fit(pipeline_obj, df):
    X = pipeline_obj.named_steps['mapper'].fit_transform(df)
    Y = df['class']
    pipeline_obj.named_steps['clf'].partial_fit(X,Y)

分類子を調整/更新し続けるため、おそらくパフォーマンスを追跡したいと思うでしょう-しかし、それは二次的なポイントです

より具体的には、元のパイプラインは次のように構築されました

to_vect = Pipeline([('vect', CountVectorizer(min_df=2, max_df=.9, ngram_range=(1, 1), max_features = 100)),
                            ('tfidf', TfidfTransformer())])
full_mapper = DataFrameMapper([
            ('norm_text', to_vect),
            ('norm_fname', to_vect), ])

full_pipe = Pipeline([('mapper', full_mapper), ('clf', SGDClassifier(n_iter=15, warm_start=True,
                                                                n_jobs=-1, random_state=self.random_state))])

詳細については、Google DataFrameMapper を参照してください。ただし、ここでは、パンダとうまく連携する変換ステップを有効にするだけです。

于 2015-12-14T05:34:15.607 に答える
8

Pipeline は を使用しないためpartial_fit、公開しません。アウトオブコア計算にはおそらく専用のパイプライン方式が必要ですが、それは以前のモデルの機能にも依存します。

特にこの場合、パイプラインの各ステージに適合するように 1 つ、次にデータセットを次のステージに適合するように変換するために、データに対して複数のパスを実行することをお勧めします。データからのパラメーター。

それまでの間は、ニーズに合わせて独自のラッパー コードを作成する方がおそらく簡単です。

于 2013-07-29T19:18:43.627 に答える