在将sklearn中的模型持久化时,使用sklearn.pipeline.
Pipeline
(steps, memory=None)将各个步骤串联起来可以很方便地保存模型。
例如,首先对数据进行了PCA降维,然后使用logistic regression进行分类,如果不使用pipeline,那么我们将分别保存两部分内容,一部分是PCA模型,一部分是logistic regression模型,稍微有点不方便。(当然,这么做也完全可以,使用Pipeline只是提供个方便罢了)
1.Pipeline中的steps
Pipeline的最后一步是一个“estimator”(sklearn中实现的各种机器学习算法实例,或者实现了estimator必须包含的方法的自定义类实例),之前的每一步都是“transformer”(必须实现fit和transform方法,比如MinMaxScaler、PCA、one-hot)。在Pipeline调用fit方法时,Pipeline中的每一步依次进行fit操作。
import numpy as np from sklearn import linear_model, decomposition, datasets
from sklearn.pipeline import Pipeline
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import accuracy_score
from sklearn.externals import joblib logistic = linear_model.LogisticRegression() pca = decomposition.PCA()
pipe = Pipeline(steps=[('pca', pca), ('logistic', logistic)]) digits = datasets.load_digits()
X_digits = digits.data
y_digits = digits.target # Parameters of pipelines can be set using ‘__’ separated parameter names:
params = {
'pca__n_components': [20, 40, 64],
'logistic__C': np.logspace(-4, 4, 3),
}
estimator = GridSearchCV(pipe, params)
estimator.fit(X_digits, y_digits) # When "estimator" predicts, actually "estimator.best_estimator_" is predicting.
print(type(estimator.best_estimator_)) y_pred = estimator.predict(X_digits)
print(accuracy_score(y_true=y_digits, y_pred=y_pred)) # Save model
joblib.dump(estimator, 'models/pca_LR.pkl')
2.Pipeline中的memory参数
默认为None,当需要保存Pipeline中间的“transformer”时,才需要用到memory参数。
3.参考文献
Pipelining: chaining a PCA and a logistic regression