0

我使用sklearn中的Pipeline來分類文本。如何在sklearn的管道中醃製各個步驟?

在這個例子中Pipeline,我有包裹着FeatureUnion一個TfidfVectorizer和一些自定義的功能和分類爲Pipeline步驟,那麼我適合訓練數據做預測:

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一步,並留下custom_features unickled,因爲我仍然在做他們的實驗。這個想法是通過酸洗tfidf步驟來加快管道。

我知道我可以醃製整個Pipelinejoblib.dump,但我如何醃各個步驟?

回答

1

,以酸洗TfidfVectorizer,你可以使用:

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_paramsget_params的倒數)來插入估計量。如果PR#1769: enable setting pipeline components as parameters中的更改合併,您將可以使用!

+0

如何從管道內加載它? –

+0

我試着回答。 – joeln

+0

這種有用的功能不存在幾乎令人難以置信。 –