一、用預(yù)處理進(jìn)行參數(shù)選擇
建模過(guò)程中忿项,交叉驗(yàn)證中的劃分無(wú)法正確地反映新數(shù)據(jù)的特征蓉冈,已經(jīng)將這部分?jǐn)?shù)據(jù)的信息泄露給建模過(guò)程。
在交叉驗(yàn)證過(guò)程中轩触,應(yīng)該在進(jìn)行任何預(yù)處理之前完成數(shù)據(jù)集的劃分寞酿。任何從數(shù)據(jù)集中提取信息的處理過(guò)程都應(yīng)該僅應(yīng)用于數(shù)據(jù)集的訓(xùn)練部分,因此脱柱,任何交叉驗(yàn)證都應(yīng)該位于處理過(guò)程的“最外層循環(huán)”伐弹。
Pipeline 類(lèi):
- 可以將多個(gè)處理步驟合并為單個(gè) scikit-learn 估計(jì)器
- Pipeline 類(lèi)具有 fit、predict榨为、score 方法惨好。
- Pipeline 類(lèi)最常見(jiàn)的用例是將預(yù)處理步驟與一個(gè)監(jiān)督模型鏈接在一起。
二随闺、構(gòu)建管道日川、在網(wǎng)格搜索中使用管道
from sklearn.svm import SVC
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from sklearn.pipeline import Pipeline
from sklearn.model_selection import GridSearchCV
import mglearn
import matplotlib.pyplot as plt
# 加載數(shù)據(jù)
cancer=load_breast_cancer()
X_train,X_test,y_train,y_test=train_test_split(cancer.data,cancer.target,random_state=0)
# 計(jì)算數(shù)據(jù)的最小值和最大值
scaler=MinMaxScaler().fit(X_train)
#對(duì)訓(xùn)練數(shù)據(jù)進(jìn)行縮放
X_train_scaled=scaler.transform(X_train)
X_test_scaled=scaler.transform(X_test)
svm=SVC()
svm.fit(X_train_scaled,y_train)
print('Test score:{:.2f}'.format(svm.score(X_test_scaled,y_test)))
pipe=Pipeline([('scaler',MinMaxScaler()),('svm',SVC())])
pipe.fit(X_train,y_train)
print('Test score:{:.2f}'.format(pipe.score(X_test,y_test)))
param_grid={'svm__C': [0.001, 0.01, 0.1, 1, 10, 100],
'svm__gamma': [0.001, 0.01, 0.1, 1, 10, 100]}
grid=GridSearchCV(pipe,param_grid=param_grid,cv=5)
grid.fit(X_train,y_train)
print('Best cross-validation accuracy:{:.2f}'.format(grid.best_score_))
print('Test set score:{:.2f}'.format(grid.score(X_test,y_test)))
print('Best parameters:{}'.format(grid.best_params_))
三、通用的管道接口
管道中的估計(jì)器的唯一要求:除了最后一步之外的所有步驟都需要具有 transform 方法矩乐,這樣就可以生成新的數(shù)據(jù)表示龄句,以供下一個(gè)步驟使用。
調(diào)用 Pipeline.fit 的過(guò)程散罕,管道內(nèi)部依次對(duì)每個(gè)步驟調(diào)用 fit 和 transform分歇,其輸入是前一個(gè)步驟中 transform 方法的輸出。對(duì)于管道中的最后一步欧漱,僅調(diào)用 fit职抡。
四、總結(jié)
Pipeline 可以將許多算法模型串聯(lián)起來(lái)误甚,比如將特征提取缚甩、歸一化、分類(lèi)組織在一起形成一個(gè)典型的機(jī)器學(xué)習(xí)問(wèn)題工作流靶草。主要帶來(lái)兩點(diǎn)好處:
- 直接調(diào)用 fit 和 predict 方法來(lái)對(duì) pipeline 中的所有算法模型進(jìn)行訓(xùn)練和預(yù)測(cè)蹄胰。
- 可以結(jié)合 grid search 對(duì)參數(shù)進(jìn)行選擇。