如何在 sklearn 的管道中腌制各个步骤?



我使用sklearn中的Pipeline对文本进行分类。

在这个例子Pipeline中,我有一个TfidfVectorizer和一些用FeatureUnion和分类器包装的自定义特征作为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.

在这里,我需要pickle TfidfVectorizer步骤,并保持custom_features未pickle,因为我仍然使用它们进行实验。这个想法是通过酸洗tfidf步骤使管道更快。

我知道我可以用joblib.dump腌制整个Pipeline,但我如何腌制各个步骤?

要pickle 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中的更改:启用将管道组件设置为参数,您将能够进行合并!

相关内容

  • 没有找到相关文章

最新更新