sklearn 中的 Pipeline 機制

2021-07-25 22:15:43 字數 2197 閱讀 9945

管道機制在機器學習

演算法中得以應用的根源在於,引數集在新資料集(比如測試集)上的重複使用。

管道機制實現了對全部步驟的流式化封裝和管理(streaming workflows with pipelines)。

注意:管道機制更像是程式設計技巧的創新,而非演算法的創新。

接下來我們以乙個具體的例子來演示sklearn庫中強大的pipeline用法:

from pandas as pd

from sklearn.cross_validation import train_test_split

from sklearn.preprocessing import labelencoder

df = pd.read_csv(''

'breast-cancer-wisconsin/wdbc.data', header=none)

# breast cancer wisconsin dataset

x, 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)

可放在pipeline中的步驟可能有:

from sklearn.preprocessing import standardscaler

from sklearn.decomposition import pca

from sklearn.linear_model import logisticregression

from sklearn.pipeline import pipeline

pipe_lr = pipeline([('sc', standardscaler()),

('pca', pca(n_components=2)),

('clf', logisticregression(random_state=1))

])pipe_lr.fit(x_train, y_train)

print('test accuracy: %.3f' % pipe_lr.score(x_test, y_test))

# test accuracy: 0.947

pipeline物件接受二元tuple構成的list,每乙個二元 tuple 中的第乙個元素為 arbitrary identifier string,我們用以獲取(access)pipeline object 中的 individual elements,二元 tuple 中的第二個元素是 scikit-learn與之相適配的transformer 或者 estimator。

pipeline([('sc', standardscaler()), ('pca', pca(n_components=2)), ('clf', logisticregression(random_state=1))])
pipeline 的中間過程由scikit-learn相適配的轉換器(transformer)構成,最後一步是乙個estimator。比如上述的**,standardscaler和pca

transformer 構成intermediate steps,logisticregression 作為最終的estimator。

當我們執行pipe_lr.fit(x_train, y_train)時,首先由standardscaler在訓練集上執行 fit和transform方法,transformed後的資料又被傳遞給pipeline物件的下一步,也即pca()。和standardscaler一樣,pca也是執行fit和transform方法,最終將轉換後的資料傳遞給losigsticregression。整個流程如下圖所示:

只不過步驟(step)的概念換成了層(layer)的概念,甚至the last step 和 輸出層的含義都是一樣的。

只是丟擲乙個問題,是不是有那麼一丟丟的相似性?

sklearn 中的 Pipeline 機制

from sklearn.pipeline import pipelinefrom pandas as pd from sklearn.cross validation import train test split from sklearn.preprocessing import labelen...

sklearn中的Lasso函式

lasso alpha 1.0,fit intercept true,normalize false,precompute false,copy x true,max iter 1000,tol 1e 4,warm start false,positive false,random state no...

sklearn中GridSearch的使用

搞懂了k fold,就可以聊一聊gridsearch啦,因為gridsearch預設引數就是3 fold的,如果沒有不懂cross validation就很難理解這個.gridsearch是為了解決調參的問題.比如向量機svm的常用引數有kernel,gamma,c等,手動調的話太慢了,寫迴圈也只能...