0

私はテキストを分類するためにsklearnのPipelineを使用しています。この例ではsklearnのパイプラインで個々のステップをピクルする方法は?

Pipeline、私はPipelineのステップとしてTfidfVectorizerFeatureUnionで包まれたいくつかのカスタム機能と分類器を持って、私は、トレーニングデータをフィットし、予測を行います。

ここ
from sklearn.pipeline import FeatureUnion, Pipeline 
from sklearn.feature_extraction.text import TfidfVectorizer 
from sklearn.svm import LinearSVC 

X = ['I am a sentence', 'an example'] 
Y = [1, 2] 
X_dev = ['another sentence'] 

# classifier 
LinearSVC1 = LinearSVC(tol=1e-4, C = 0.10000000000000001) 

pipeline = Pipeline([ 
    ('features', FeatureUnion([ 
     ('tfidf', TfidfVectorizer(ngram_range=(1, 3), max_features= 4000)), 
     ('custom_features', CustomFeatures())])), 
    ('clf', LinearSVC1), 
    ]) 

pipeline.fit(X, Y) 
y_pred = pipeline.predict(X_dev) 

# etc. 

私がする必要がありますTfidfVectorizerのステップをpickleし、custom_featuresをunpickledのままにしておきます。なぜなら私はまだ実験をしているからです。この考え方は、tfidfステップを酸洗してパイプラインを速くすることです。

私はPipelineで全体を漬け込むことができると知っていますが、joblib.dumpで個々のステップをどのようにピケットするのですか?

答えて

1

TfidfVectorizerをpickle化するには、使用することができます:

joblib.dump(pipeline.steps[0][1].transformer_list[0][1], dump_path) 

かを:

joblib.dump(pipeline.get_params()['features__tfidf'], dump_path) 

がダンプされたオブジェクトをロードするには、使用することができます。

pipeline.steps[0][1].transformer_list[0][1] = joblib.load(dump_path) 

を不幸にすることができます」 set_params(逆数:get_params)を使用して、推定値を名前で挿入します。 PR#1769: enable setting pipeline components as parametersの変更がマージされた場合、あなたはできるようになります!

+0

にはどうすればパイプラインの中からそれをロードしていますか? –

+0

私は答えようとしました。 – joeln

+0

このような便利な機能が存在しないことは、ほとんど信じられないほどです。 –

関連する問題