如何腌制 sklearn 管道中的各个步骤?
How to pickle individual steps in sklearn's Pipeline?
我正在使用 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
unpickle,因为我仍在对它们进行实验。这个想法是通过酸洗 tfidf 步骤来使管道更快。
我知道我可以用 joblib.dump
腌制整个 Pipeline
,但如何腌制个别步骤?
要腌制 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_params
(get_params
的逆函数)按名称插入估算器。如果合并 PR#1769: enable setting pipeline components as parameters 中的更改,您将能够做到!
我正在使用 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
unpickle,因为我仍在对它们进行实验。这个想法是通过酸洗 tfidf 步骤来使管道更快。
我知道我可以用 joblib.dump
腌制整个 Pipeline
,但如何腌制个别步骤?
要腌制 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_params
(get_params
的逆函数)按名称插入估算器。如果合并 PR#1769: enable setting pipeline components as parameters 中的更改,您将能够做到!