本篇內(nèi)容主要講解“pipeline處理機(jī)制是什么”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“pipeline處理機(jī)制是什么”吧!
創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站建設(shè)、做網(wǎng)站、白河網(wǎng)絡(luò)推廣、小程序制作、白河網(wǎng)絡(luò)營(yíng)銷、白河企業(yè)策劃、白河品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供白河建站搭建服務(wù),24小時(shí)服務(wù)熱線:028-86922220,官方網(wǎng)址:www.cdcxhl.com
你有沒(méi)有遇到過(guò)這種情況:在機(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可以將許多算法模型串聯(lián)起來(lái),形成一個(gè)典型的機(jī)器學(xué)習(xí)問(wèn)題工作流。
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)
實(shí)際上,調(diào)用pipeline的fit方法,是用前n-1個(gè)變換器處理特征,之后傳遞給最后的estimator訓(xùn)練。pipeline繼承最后一個(gè)estimator的所有方法。
調(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í)器沒(méi)有該方法,會(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ù)
以鳶尾花數(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開(kāi)始進(jìn)行轉(zhuǎn)換,避免了模型用來(lái)預(yù)測(cè)的數(shù)據(jù)還要額外寫(xiě)代碼實(shí)現(xiàn)。還可通過(guò)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可以結(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 還有一些其他用法,這里只簡(jiǎn)單介紹最最常用的兩個(gè)make_pipeline
pipeline.make_pipeline(\*steps, \*\*kwargs)
make_pipeline函數(shù)是Pipeline類的簡(jiǎn)單實(shí)現(xiàn),只需傳入每個(gè)step的類實(shí)例即可,不需自己命名,自動(dòng)將類的小寫(xiě)設(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,同樣通過(guò)(key,value)對(duì)來(lái)設(shè)置,通過(guò)set_params設(shè)置參數(shù)。不同的是,每一個(gè)step分開(kāi)計(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í)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!