sklearn中的Pipline(流水线学习器)
簡介
管道機制實現了對全部步驟的流式化封裝和管理(streaming workflows with pipelines)。
管道機制(也有人翻譯為流水線學習器?這樣翻譯可能更有利于后面內容的理解)在機器學習算法中得以應用的根源在于,參數集在新數據集(比如測試集)上的重復使用。使用管道機制可以大幅度減少代碼量.總的來說這是一個非常實用而有趣的方法
注意:管道機制更像是編程技巧的創新,而非算法的創新。
通常流水線學習器的通常步驟
數據標準化學習器=>特征選取學習器=>執行預測的學習器
除了最后一個學習器之外,所有學習器必須提供transform算法,該方法用于數據轉換
常用方法與屬性
sklearn官方文檔
Parameters
steps : 步驟:列表(list)
被連接的(名稱,變換)元組(實現擬合/變換)的列表,按照它們被連接的順序,最后一個對象是估計器(estimator)。memory:內存參數,Instance of sklearn.external.joblib.Memory or string, optional (default=None)
- 屬性,name_steps:bunch object,具有屬性訪問權限的字典
只讀屬性以用戶給定的名稱訪問任何步驟參數。鍵是步驟名稱,值是步驟參數。或者也可以直接通過”.步驟名稱”獲取
funcution
- Pipline的方法都是執行各個學習器中對應的方法,如果該學習器沒有該方法,會報錯
假設該Pipline共有n個學習器
transform,依次執行各個學習器的transform方法
inverse_transform,依次執行各個學習器的inverse_transform方法
fit,依次對前n-1個學習器執行fit和transform方法,第n個學習器(最后一個學習器)執行fit方法
- predict,執行第n個學習器的predict方法
score,執行第n個學習器的score方法
set_params,設置第n個學習器的參數
- get_param,獲取第n個學習器的參數
例子
一般步驟
- 首先對數據進行預處理,比如缺失值的處理
- 數據的標準化
- 降維
- 特征選擇算法
- 分類或者預測算法(估計器,estimator)
流程圖
加載數據
import pandas as pd from sklearn.model_selection import train_test_split from sklearn.preprocessing import LabelEncoderdf = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/''breast-cancer-wisconsin/wdbc.data', header=None)# Breast Cancer Wisconsin datasetX, y = df.values[:, 2:], df.values[:, 1]# y為字符型標簽# 使用LabelEncoder類將其轉換為0開始的數值型encoder = LabelEncoder() y = encoder.fit_transform(y) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.2, random_state=0)利用Pipline合并算法流程
Pipline
def Examples_SklearnOrg_Pipline(X_train, X_test, y_train, y_test):from sklearn import svmfrom sklearn.feature_selection import SelectKBestfrom sklearn.feature_selection import f_regressionfrom sklearn.pipeline import Pipelinefrom sklearn.preprocessing import StandardScalerfrom sklearn.decomposition import PCAanova_filter = SelectKBest(f_regression, k=5)# clf = svm.LinearSVR(kernel='linear')clf = svm.LinearSVC()anova_svm = Pipeline([('sc', StandardScaler()),('pca', PCA(n_components=2)),('anova', anova_filter), ('svc', clf)])# You can set the parameters using the names issued# For instance, fit using a k of all in the SelectKBest# Because the PCA,we only have 2 features# and a parameter 'C' of the svmanova_svm.set_params(anova__k="all", svc__C=.1).fit(X_train, y_train)# prediction_trian = anova_svm.predict(X_train)# prediction_test = anova_svm.predict( X_test)score_train = anova_svm.score(X_train, y_train)score_test = anova_svm.score(X_test, y_test)# print("prediction_train :", prediction_trian)# print("prediction_test :", prediction_test)print("score_train :", score_train)print("score_test :", score_test)# getting the selected features chosen by anova_filterPri_nameed_steps00 = anova_svm.named_steps['anova'].get_support()print(Pri_nameed_steps00)# Another way to get selected features chosen by anova_filterPri_nameed_steps01 = anova_svm.named_steps.anova.get_support()print(Pri_nameed_steps01)UCI_sc_pca_logisticRe(X_train, X_test, y_train, y_test) Examples_SklearnOrg_Pipline(X_train, X_test, y_train, y_test)輸出:
score_train : 0.964835164835 score_test : 0.921052631579 [ True True] [ True True]參考
- sklearn 中的 Pipeline 機制 - Inside_Zhang
- << Python 大戰機器學習 數據科學家的一個小目標 >> 華校專,王正林 2017.03
- sklearn:官方網站:http://scikit-learn.org/stable/modules/generated/sklearn.pipeline.Pipeline.html#sklearn.pipeline.Pipeline
總結
以上是生活随笔為你收集整理的sklearn中的Pipline(流水线学习器)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据科学-通过数据探索了解我们的特征
- 下一篇: Deap: python中的遗传算法工具