溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

pipeline處理機(jī)制是什么

發(fā)布時(shí)間:2021-12-27 15:10:04 來(lái)源:億速云 閱讀:339 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容主要講解“pipeline處理機(jī)制是什么”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“pipeline處理機(jī)制是什么”吧!

why Pipeline?

你有沒有遇到過這種情況:在機(jī)器學(xué)習(xí)項(xiàng)目中,對(duì)訓(xùn)練集的各種數(shù)據(jù)預(yù)處理操作,比如:特征提取、標(biāo)準(zhǔn)化、主成分分析等,在測(cè)試集上要重復(fù)使用這些參數(shù)。

為了避免重復(fù)操作,這里就要用到機(jī)器學(xué)習(xí)中的pipeline機(jī)制

按照sklearn官網(wǎng)的解釋 pipeline 有以下妙用:

1、便捷性和封裝性:直接調(diào)用fit和predict方法來(lái)對(duì)pipeline中的所有算法模型進(jìn)行訓(xùn)練和預(yù)測(cè)。 

2、聯(lián)合的參數(shù)選擇:你可以一次grid search管道中所有評(píng)估器的參數(shù)。 

3、安全性:訓(xùn)練轉(zhuǎn)換器和預(yù)測(cè)器使用的是相同樣本,管道有助于防止來(lái)自測(cè)試數(shù)據(jù)的統(tǒng)計(jì)數(shù)據(jù)泄露到交叉驗(yàn)證的訓(xùn)練模型中。

Pipeline的原理

pipeline可以將許多算法模型串聯(lián)起來(lái),形成一個(gè)典型的機(jī)器學(xué)習(xí)問題工作流。

pipeline處理機(jī)制是什么  

Pipeline處理機(jī)制就像是把所有模型塞到一個(gè)管子里,然后依次對(duì)數(shù)據(jù)進(jìn)行處理,得到最終的分類結(jié)果,

例如模型1可以是一個(gè)數(shù)據(jù)標(biāo)準(zhǔn)化處理,模型2可以是特征選擇模型或者特征提取模型,模型3可以是一個(gè)分類器或者預(yù)測(cè)模型(模型不一定非要三個(gè),根據(jù)自己實(shí)際需要)。

Pipleline中最后一個(gè)之外的所有評(píng)估器都必須是變換器,最后一個(gè)評(píng)估器可以是任意類型(transformer,classifier,regresser),若最后一個(gè)評(píng)估器是分類器,則整個(gè)pipeline就可以作為分類器使用,如果最后一個(gè)estimator是個(gè)回歸器,則整個(gè)pipeline就可以作為回歸器使用。

注:

Estimator:估計(jì)器,所有的機(jī)器學(xué)習(xí)算法模型,都被稱為估計(jì)器。

Transformer:轉(zhuǎn)換器,比如標(biāo)準(zhǔn)化。轉(zhuǎn)換器的輸出可以放入另一個(gè)轉(zhuǎn)換器或估計(jì)器中作為輸入。

一個(gè)完整的Pipeline步驟舉例:

1.首先對(duì)數(shù)據(jù)進(jìn)行預(yù)處理,比如缺失值的處理

2.數(shù)據(jù)的標(biāo)準(zhǔn)化

3.降維

4.特征選擇算法

5.分類或者預(yù)測(cè)或者聚類算法(估計(jì)器,estimator)

pipeline處理機(jī)制是什么  

實(shí)際上,調(diào)用pipeline的fit方法,是用前n-1個(gè)變換器處理特征,之后傳遞給最后的estimator訓(xùn)練。pipeline繼承最后一個(gè)estimator的所有方法。 

Pipeline的用法

調(diào)用方法:

sklearn.pipeline.Pipeline(steps, memory=None, verbose=False)
 

參數(shù)詳解:

steps : 步驟:使用(key, value)列表來(lái)構(gòu)建,其中 key 是你給這個(gè)步驟起的名字, value 是一個(gè)評(píng)估器對(duì)象。

memory:內(nèi)存參數(shù),默認(rèn)None

Pipeline的function

Pipline的方法都是執(zhí)行各個(gè)學(xué)習(xí)器中對(duì)應(yīng)的方法,如果該學(xué)習(xí)器沒有該方法,會(huì)報(bào)錯(cuò)。假設(shè)該P(yáng)ipline共有n個(gè)學(xué)習(xí)器:

transform:依次執(zhí)行各個(gè)學(xué)習(xí)器的transform方法

fit:依次對(duì)前n-1個(gè)學(xué)習(xí)器執(zhí)行fit和transform方法,第n個(gè)學(xué)習(xí)器(最后一個(gè)學(xué)習(xí)器)執(zhí)行fit方法

predict:執(zhí)行第n個(gè)學(xué)習(xí)器的predict方法

score:執(zhí)行第n個(gè)學(xué)習(xí)器的score方法

set_params:設(shè)置第n個(gè)學(xué)習(xí)器的參數(shù)

get_param:獲取第n個(gè)學(xué)習(xí)器的參數(shù) 

Pipeline妙用:模塊化Feature Transform

以鳶尾花數(shù)據(jù)集分類任務(wù)為例

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.decomposition import PCA
from sklearn.datasets import load_iris
iris=load_iris()
pipe=Pipeline([('sc', StandardScaler()),('pca',PCA()),('svc',SVC())])
#('sc', StandardScaler()) sc為自定義轉(zhuǎn)換器名稱,StandardScaler()為執(zhí)行標(biāo)準(zhǔn)化任務(wù)的轉(zhuǎn)換器
pipe.fit(iris.data,iris.target)
 

先用 StandardScaler 對(duì)數(shù)據(jù)集每一列做標(biāo)準(zhǔn)化處理(transformer)

再用 PCA 主成分分析進(jìn)行特征降維(transformer)

最后再用 SVC 模型(Estimator)

輸出結(jié)果:

Pipeline(memory=None,
         steps=[('sc',
                 StandardScaler(copy=True, with_mean=True, with_std=True)),
                ('pca',
                 PCA(copy=True, iterated_power='auto', n_components=None,
                     random_state=None, svd_solver='auto', tol=0.0,
                     whiten=False)),
                ('svc',
                 SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
                     decision_function_shape='ovr', degree=3,
                     gamma='auto_deprecated', kernel='rbf', max_iter=-1,
                     probability=False, random_state=None, shrinking=True,
                     tol=0.001, verbose=False))],
         verbose=False)
 

訓(xùn)練得到的是一個(gè)模型,可直接用來(lái)預(yù)測(cè),預(yù)測(cè)時(shí),數(shù)據(jù)會(huì)從step1開始進(jìn)行轉(zhuǎn)換,避免了模型用來(lái)預(yù)測(cè)的數(shù)據(jù)還要額外寫代碼實(shí)現(xiàn)。還可通過pipe.score(X,Y)得到這個(gè)模型在X訓(xùn)練集上的正確率。

array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])
  

Pipeline妙用:自動(dòng)化 Grid Search

Pipeline可以結(jié)合GridSearch來(lái)對(duì)參數(shù)進(jìn)行選擇:

from sklearn.datasets import fetch_20newsgroups
import numpy as np
news = fetch_20newsgroups(subset='all')
from sklearn.cross_validation import train_test_split
X_train,X_test,y_train,y_test = train_test_split(news.data[:3000],news.target[:3000],test_size=0.25,random_state=33)
from sklearn.feature_extraction.text import TfidfVectorizer
vec = TfidfVectorizer()
X_count_train = vec.fit_transform(X_train)
X_count_test = vec.transform(X_test)
from sklearn.svm import SVC
from sklearn.pipeline import Pipeline
#使用pipeline簡(jiǎn)化系統(tǒng)搭建流程,將文本抽取與分類器模型串聯(lián)起來(lái)
clf = Pipeline([
    ('vect',TfidfVectorizer(stop_words='english')),('svc',SVC())
])
# 注意,這里經(jīng)pipeline進(jìn)行特征處理、SVC模型訓(xùn)練之后,得到的直接就是訓(xùn)練好的分類器clf
 
parameters = {
    'svc__gamma':np.logspace(-2,1,4),
    'svc__C':np.logspace(-1,1,3),
    'vect__analyzer':['word']
}
 
#n_jobs=-1代表使用計(jì)算機(jī)的全部CPU
from sklearn.grid_search import GridSearchCV
gs = GridSearchCV(clf,parameters,verbose=2,refit=True,cv=3,n_jobs=-1)
 
gs.fit(X_train,y_train)
print (gs.best_params_,gs.best_score_)
print (gs.score(X_test,y_test))
 

輸出

{'svc__C': 10.0, 'svc__gamma': 0.1, 'vect__analyzer': 'word'} 0.7906666666666666
0.8226666666666667
   

Pipeline其他用法

Pipeline 還有一些其他用法,這里只簡(jiǎn)單介紹最最常用的兩個(gè)make_pipeline

pipeline.make_pipeline(\*steps, \*\*kwargs)
 

make_pipeline函數(shù)是Pipeline類的簡(jiǎn)單實(shí)現(xiàn),只需傳入每個(gè)step的類實(shí)例即可,不需自己命名,自動(dòng)將類的小寫設(shè)為該step的名。

make_pipeline(StandardScaler(),GaussianNB())
 

輸出

Pipeline(steps=[('standardscaler', StandardScaler(copy=True, with_mean=
True, with_std=True)), ('gaussiannb', GaussianNB(priors=None))])
p=make_pipeline(StandardScaler(),GaussianNB())
p.steps
 

輸出

[('standardscaler', StandardScaler(copy=True, with_mean=True, with_std=True)),
 ('gaussiannb', GaussianNB(priors=None))]
 

FeatureUnion

pipeline.FeatureUnion(transformer_list[, …])
 

FeatureUnion,同樣通過(key,value)對(duì)來(lái)設(shè)置,通過set_params設(shè)置參數(shù)。不同的是,每一個(gè)step分開計(jì)算,F(xiàn)eatureUnion最后將它們計(jì)算得到的結(jié)果合并到一塊,返回的是一個(gè)數(shù)組,不具備最后一個(gè)estimator的方法。有些數(shù)據(jù)需要標(biāo)準(zhǔn)化,或者取對(duì)數(shù),或onehot編碼最后形成多個(gè)特征項(xiàng),再選擇重要特征,這時(shí)候FeatureUnion非常管用。

from sklearn.pipeline import FeatureUnion
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import FunctionTransformer
from numpy import log1p

step1=('Standar',StandardScaler())
step2=('ToLog',FunctionTransformer(log1p))
steps=FeatureUnion(transformer_list=[step1,step2])
 
steps.fit_transform(iris.data)
data=steps.fit_transform(iris.data)

到此,相信大家對(duì)“pipeline處理機(jī)制是什么”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI