首頁 > 軟體

sklearn Pipeline使用

2020-06-16 17:12:11

簡介

Pipeline按順序構建一系列轉換和一個模型,最後的一步是模型。Pipeline中間的步驟必須是轉換過程,它們必須包含fit和transform方法。最後一步模型只要有fit方法。

Pipeline的目的是能組合好幾個步驟,當設定不同引數的時候,可以在一起做交叉驗證。可以通過【pipeline的名稱+ “__” + 引數名稱】(注意是兩個下劃線)的方式設定多個步驟的引數。

引數

名稱型別說明
steps list 包含(name,transform)元組的list型別,按照元組的順序形成一個鏈,最後一步是模型。
named_steps dict 唯讀的屬性,使用者通過設定的名稱可以讀取相應步驟的引數,keys是步驟名稱,values是步驟引數

上手使用

from sklearn import svm
from sklearn.datasets import samples_generator
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import f_regression
from sklearn.pipeline import Pipeline

 

產生一些測試資料

X, y = samples_generator.make_classification(n_informative=5, n_redundant=0, random_state=42)

 

選擇特徵

# ANOVA SVM-C
anova_filter = SelectKBest(f_regression, k=5)

 

SVM模型

clf = svm.SVC(kernel='linear')

 

構建pipeline

anova_svm = Pipeline([('anova', anova_filter), ('svc', clf)])

 

模型有兩步,一步是最特徵選擇,一步是模型

設定引數

anova_svm.set_params(anova__k=10, svc__C=.1)

 

Pipeline(steps=[('anova', SelectKBest(k=10, score_func=<function f_regression at 0x4a0f0c8>)), ('svc', SVC(C=0.1, cache_size=200, class_weight=None, coef0=0.0,
  decision_function_shape=None, degree=3, gamma='auto', kernel='linear',
  max_iter=-1, probability=False, random_state=None, shrinking=True,
  tol=0.001, verbose=False))])

訓練模型

anova_svm.fit(X,y)

 

Pipeline(steps=[('anova', SelectKBest(k=10, score_func=<function f_regression at 0x4a0f0c8>)), ('svc', SVC(C=0.1, cache_size=200, class_weight=None, coef0=0.0,
  decision_function_shape=None, degree=3, gamma='auto', kernel='linear',
  max_iter=-1, probability=False, random_state=None, shrinking=True,
  tol=0.001, verbose=False))])

預測結果

prediction = anova_svm.predict(X)
anova_svm.score(X,y)
0.77000000000000002

檢視pipeline裡的引數

anova_svm.named_steps['anova']

 

SelectKBest(k=10, score_func=<function f_regression at 0x4a0f0c8>)
anova_svm.named_steps['svc']

 

SVC(C=0.1, cache_size=200, class_weight=None, coef0=0.0,
  decision_function_shape=None, degree=3, gamma='auto', kernel='linear',
  max_iter=-1, probability=False, random_state=None, shrinking=True,
  tol=0.001, verbose=False)
anova_svm.named_steps['anova'].get_support()
array([ True,  True,  True, False, False,  True, False,  True,  True,
        True, False, False,  True, False,  True, False, False, False,
       False,  True], dtype=bool)

本文永久更新連結地址http://www.linuxidc.com/Linux/2017-06/144939.htm


IT145.com E-mail:sddin#qq.com