sklearn中的Pipeline
在将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操作。
1 import numpy as np 2 3 from sklearn import linear_model, decomposition, datasets 4 from sklearn.pipeline import Pipeline 5 from sklearn.model_selection import GridSearchCV 6 from sklearn.metrics import accuracy_score 7 from sklearn.externals import joblib 8 9 logistic = linear_model.LogisticRegression() 10 11 pca = decomposition.PCA() 12 pipe = Pipeline(steps=[('pca', pca), ('logistic', logistic)]) 13 14 digits = datasets.load_digits() 15 X_digits = digits.data 16 y_digits = digits.target 17 18 # Parameters of pipelines can be set using ‘__’ separated parameter names: 19 params = { 20 'pca__n_components': [20, 40, 64], 21 'logistic__C': np.logspace(-4, 4, 3), 22 } 23 estimator = GridSearchCV(pipe, params) 24 estimator.fit(X_digits, y_digits) 25 26 # When "estimator" predicts, actually "estimator.best_estimator_" is predicting. 27 print(type(estimator.best_estimator_)) 28 29 y_pred = estimator.predict(X_digits) 30 print(accuracy_score(y_true=y_digits, y_pred=y_pred)) 31 32 # Save model 33 joblib.dump(estimator, 'models/pca_LR.pkl')
2.Pipeline中的memory参数
默认为None,当需要保存Pipeline中间的“transformer”时,才需要用到memory参数。
3.参考文献
Pipelining: chaining a PCA and a logistic regression
作者:wuliytTaotao
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。