算法鏈與管道

一、用預處理進行參數選擇

image.png

建模過程中,交叉驗證中的劃分無法正確地反映新數據的特征,已經將這部分數據的信息泄露給建模過程。
在交叉驗證過程中,應該在進行任何預處理之前完成數據集的劃分。任何從數據集中提取信息的處理過程都應該僅應用于數據集的訓練部分,因此,任何交叉驗證都應該位于處理過程的“最外層循環”。
Pipeline 類:

  • 可以將多個處理步驟合并為單個 scikit-learn 估計器
  • Pipeline 類具有 fit、predict、score 方法。
  • Pipeline 類最常見的用例是將預處理步驟與一個監督模型鏈接在一起。

二、構建管道、在網格搜索中使用管道

image.png
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
# 加載數據
cancer=load_breast_cancer()
X_train,X_test,y_train,y_test=train_test_split(cancer.data,cancer.target,random_state=0)
# 計算數據的最小值和最大值
scaler=MinMaxScaler().fit(X_train)
#對訓練數據進行縮放
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_))

三、通用的管道接口

管道中的估計器的唯一要求:除了最后一步之外的所有步驟都需要具有 transform 方法,這樣就可以生成新的數據表示,以供下一個步驟使用。
調用 Pipeline.fit 的過程,管道內部依次對每個步驟調用 fit 和 transform,其輸入是前一個步驟中 transform 方法的輸出。對于管道中的最后一步,僅調用 fit。


image.png

四、總結

Pipeline 可以將許多算法模型串聯起來,比如將特征提取、歸一化、分類組織在一起形成一個典型的機器學習問題工作流。主要帶來兩點好處:

  • 直接調用 fit 和 predict 方法來對 pipeline 中的所有算法模型進行訓練和預測。
  • 可以結合 grid search 對參數進行選擇。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容