在將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