sklearn 中的 Pipeline 機制

2021-10-01 23:58:09 字數 3547 閱讀 4487

sklearn 中的 pipeline 機制

from sklearn.pipeline import pipeline

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

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

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

1 載入資料集

import 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)

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)

2. 構思演算法的流程

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

特徵標準化是需要的,可作為第乙個環節

既然是分類器,classifier也是少不了的,自然是最後乙個環節

中間可加上比如資料降維(pca)

……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))

pipeline物件接受二元tuple構成的list

3. pipeline執行流程的分析

流水線的輸入為一連串的資料探勘步驟,其中最後一步必須是估計器(estimator),可理解成分類器前幾步是轉換器(transformer)。輸入的資料集經過轉換器的處理後,輸出的結果作為下一步的輸入。最後,用位於流水線最後一步的估計器對資料進行分類。

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

下面再舉乙個例子:

sklean提供的pipeline來將多個學習器組成流水線,通常流水線的形式為:

將資料標準化的學習器---特徵提取的學習器---執行**的學習器

除了最後乙個學習器之外,前面的所有學習器必須提供transform方法,該方法用於資料轉化(例如:歸一化,正則化,以及特徵提取)

from sklearn.datasets import load_digits

from sklearn import cross_validation

from sklearn.svm import linearsvc

from sklearn.linear_model import logisticregression

from sklearn.pipeline import pipeline

def test_pipeline(data):

x_train,x_test,y_train,y_test=data

steps=[('linear_svm',linearsvc(c=1,penalty='l1',dual=false)),

('logisticregression',logisticregression(c=1))]

pipeline=pipeline(steps)

pipeline.fit(x_train,y_train)

print('name steps:',pipeline.named_steps)

print('pipeline score:',pipeline.score(x_test,y_test))

if __name__=='__main__':

data=load_digits()

x=data.data

y=data.target

test_pipeline(cross_validation.train_test_split(x,y,test_size=0.25,

random_state=0,stratify=y))

from sklearn.datasets import load_digits

from sklearn import cross_validation

from sklearn.linear_model import logisticregression

from sklearn.pipeline import pipeline

from sklearn.decomposition import pca

'''工作流程:先進行pca降為,然後使用logistic回歸,來分類

'''def test_pipeline(data):

x_train,x_test,y_train,y_test=data

steps=[('pca',pca()),

('logisticregression',logisticregression(c=1))]

pipeline=pipeline(steps)

pipeline.fit(x_train,y_train)

print('name steps:',pipeline.named_steps)

print('pipeline score:',pipeline.score(x_test,y_test))

if __name__=='__main__':

data=load_digits()

x=data.data

y=data.target

test_pipeline(cross_validation.train_test_split(x,y,test_size=0.25,

random_state=0,stratify=y))

sklearn 中的 Pipeline 機制

管道機制在機器學習 演算法中得以應用的根源在於,引數集在新資料集 比如測試集 上的重複使用。管道機制實現了對全部步驟的流式化封裝和管理 streaming workflows with pipelines 注意 管道機制更像是程式設計技巧的創新,而非演算法的創新。接下來我們以乙個具體的例子來演示sk...

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...