sklearn中的Pipeline


  在將sklearn中的模型持久化時,使用sklearn.pipeline.Pipeline(stepsmemory=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

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM