如何腌制sklearn管道中的各个步骤?
Posted
技术标签:
【中文标题】如何腌制sklearn管道中的各个步骤?【英文标题】:How to pickle individual steps in sklearn's Pipeline? 【发布时间】:2016-07-15 13:44:00 【问题描述】:我正在使用来自 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.
在这里,我需要腌制TfidfVectorizer
步骤并保留custom_features
未腌制,因为我仍在使用它们进行实验。这个想法是通过酸洗 tfidf 步骤使管道更快。
我知道我可以用joblib.dump
腌制整个Pipeline
,但是如何腌制各个步骤?
【问题讨论】:
【参考方案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)
很遗憾,您不能使用get_params
的倒数set_params
按名称插入估计器。如果 PR#1769: enable setting pipeline components as parameters 中的更改被合并,您将能够做到!
【讨论】:
如何从管道中加载它? 这么好用的功能居然不存在,简直难以置信。以上是关于如何腌制sklearn管道中的各个步骤?的主要内容,如果未能解决你的问题,请参考以下文章
如何为多标签分类器/一对休息分类器腌制 sklearn 管道?
重新加载腌制的 sklearn 管道时出现问题。未导入计数向量分析器功能
如何使用 XGboost 针对不同的“eval_metric”优化 sklearn 管道?