lv

管道模型Pipeline《Python機器學習》之十九

發布時間 2018年09月16日 18:44    編輯:landyliao    來源:陸洪春曉

1.導入

前面有過這樣的比方,首要對數據進行縮放,然后手動兼并特征,再運用無監督機器學習來學習特征。因而,大多數機器學習運用不只需求運用單個算法,而且還需求將許多不同的處理進程和機器學習模型鏈接在一起。接下來將介紹怎樣運用Pipeline 類來簡化構建改換和模型鏈的進程,將要點介紹怎樣將Pipeline 和GridSearchCV 結合起來,然后一起查找一切處理進程中的參數。

舉一個比方來闡明模型鏈的重要性。咱們知道,能夠經過運用MinMaxScaler 進行預處理來大大提高核SVM 在cancer 數據集上的功能。下面這些代碼完成了區分數據、核算最小值和最大值、縮放數據與練習SVM:

上面的代碼第11行,是在x_train數據中找到最大值、最小值,然后用它別離縮放練習集和測驗集,如第13、15行所示。這是所要求的正確的做法。

現看下面的比方:練習集和驗證集卻沒有遵從這個要求。

!!! 問題所在 : 穿插驗證的數據集是已經在外面進行縮放處理的練習集,在穿插驗證內部將其格外 練習集和驗證集如圖 6-1所示。

謹記一條準則:先區分數據集,再進行縮放處理或其它預處理。

那么,在穿插驗證內部,怎樣做到呢?

在scikit-learn 中,要想運用cross_val_score 函數和GridSearchCV 函數完成這一點,能夠運用Pipeline 類。Pipeline 類能夠將多個處理進程兼并(glue)為單個scikit-learn 估量器。Pipeline 類自身具有fit、predict 和score 辦法,其行為與scikit-learn 中的其他模型相同。Pipeline 類最常見的用例是將預處理進程(比方數據縮放)與一個監督模型(比方分類器)鏈接在一起。2.構建管道的辦法

咱們來看一下怎樣運用Pipeline 類來表明在運用MinMaxScaler 縮放數據之后再練習一個SVM 的作業流程(對應本文最初的第一個比方)。首要,咱們構建一個由進程列表組成的管道目標。每個進程都是一個元組,其間包含一個稱號和一個估量器的實例。

這兒創立了兩個進程:第一個叫作"scaler",是MinMaxScaler 的實例;第二個叫作"svm",是SVC 的實例?,F在來擬合這個管道,pipe.fit 首要對第一個進程(縮放器)調用fit,然后運用該縮放器對練習數據進行改換,最終用縮放后的數據來擬合SVM。要想在測驗數據上進行評價,咱們只需調用pipe.score,代碼如下:

在對管道調用score 辦法時,首要運用縮放器對測驗數據進行改換,然后運用縮放后的測驗數據對SVM 調用score 辦法。如你所見,這個成果與咱們從本章最初的第一個比方中的代碼得到的成果是相同的。運用管道,咱們削減了“預處理+ 分類”進程所需求的代碼量。

運用管道的首要長處在于,現在咱們能夠在cross_val_score 或GridSearchCV 中運用這個估量器,針對本文最初的第二比方運用管道:3.解決問題:在網絡查找中運用管道

咱們界說一個需求查找的參數網格,并運用管道和參數網格構建一個GridSearchCV。不過在指定參數網格時存在一處纖細的改變。咱們需求為每個參數指定它在管道中所屬的進程。咱們要調理的兩個參數C 和gamma 都是SVC 的參數,歸于第二個進程。咱們給這個進程的稱號是"svm"。為管道界說參數網格的語法是為每個參數指定進程稱號,后邊加上__(雙下劃線),然后是參數稱號。因而,要想查找SVC 的C 參數,有必要運用"svm__C" 作為參數網格字典的鍵,對gamma 參數也是同理:

與本文最初的第二比方中所做的網格查找不同,現在關于穿插驗證的每次區分來說,僅運用練習部分對MinMaxScaler 進行擬合。將圖6-2 與圖6-1 進行比照。

圖6-2: 運用管道在穿插驗證循環內部進行預處理時的數據運用情況4.簡析管道的作業流程

Pipeline 類不光可用于預處理和分類,實踐上還能夠將恣意數量的估量器銜接在一起。例如,你能夠構建一個包含特征提取、特征挑選、縮放和分類的管道,總共有4 個進程。相同,最終一步能夠是回歸或聚類等。

關于管道中估量器的僅有要求就是,除了最終一步之外的一切進程都需求具有transform辦法,這樣它們能夠生成新的數據表明,以供下一個進程運用。在調用Pipeline.fit 的進程中,管道內部順次對每個進程調用fit 和transform,其輸入是前一個進程中transform 辦法的輸出。關于管道中的最終一步,則僅調用fit。

疏忽某些細枝末節,其完成辦法如下所示。請記住,pipeline.steps 是由元組組成的列表,所以pipeline.steps[0][1] 是第一個估量器,pipeline.steps[1][1] 是第二個估量器,以此類推:

4.1 用make_pipline辦法創立管道?

咱們一般不需求為每一個進程供給用戶指定的稱號。有一個很便利的函數make_pipeline,能夠創立管道并依據每個進程所屬的類為其主動命名。make_pipeline 的語法如下所示:

4.2 拜訪進程特點

一般來說,想拜訪管道中的進程,最簡略的辦法是經過named_steps 特點,它是一個字典,將進程稱號映射為估量器:

4.3 拜訪網格查找管道中的特點

運用管道的首要場景就是進行網格查找。一個常見的使命是在網格查找內拜訪管道的某些進程。咱們對cancer 數據集上的LogisticRegression 分類器進行網格查找,在將數據傳入LogisticRegression 分類器之前,先用Pipeline 和StandardScaler對數據進行縮放。首要,咱們用make_pipeline 函數創立一個管道:

5. 運用舉例一:網格查找預處理進程與模型參數

咱們能夠運用管道將機器學習作業流程中的一切處理進程封裝成一個scikit-learn 估量器。這么做的另一個優點在于,現在咱們能夠運用監督使命(比方回歸或分類)的輸出來調理預處理參數。在運用嶺回歸之前運用boston 數據集的多項式特征,下面咱們用一個管道來重復這個建模進程,管道包含3 個進程:縮放數據、核算多項式特征與嶺回歸:

咱們怎樣知道挑選幾回多項式,或許是否挑選多項式或交互項呢?抱負情況下,咱們期望依據分類成果來挑選degree 參數。咱們能夠運用管道查找degree 參數以及Ridge 的alpha參數。為了做到這一點,咱們要界說一個包含這兩個參數的param_grid,并用進程稱號作為前綴:

從穿插驗證的成果中能夠看出,運用二次多項式很有用,但三次多項式的作用比一次或二次都要差許多。從找到的最佳參數中也能夠看出這一點:

正與咱們調查圖6-4 中的網格查找成果所意料的那樣,不運用多項式特征得到了顯著更差的成果。

一起查找預處理參數與模型參數是一個十分強壯的戰略。可是要記住,GridSearchCV 會測驗指定參數的一切可能組合。因而,向網格中增加更多參數,需求構建的模型數量將呈指數增加。6.運用舉例二:網格查找挑選運用哪個模型

進一步將GridSearchCV 和Pipeline 結合起來:查找管道中正在履行的實踐進程。下面是一個比方:在iris 數據集上比較RandomForestClassifier 和SVC。咱們知道,SVC需求對數據進行縮放,運用StandardScaler。RandomForestClassifier 不需求預處理。先界說管道,顯式地對進程命名。咱們需求兩個進程,一個用于預處理,然后是一個分類器。咱們能夠用SVC 和StandardScaler 來將其實例化:

界說需求查找的parameter_grid。咱們期望classifier 是RandomForestClassifier或SVC。因為這兩種分類器需求調理不同的參數,而且需求不同的預處理,所以運用查找網格列表。為了將一個估量器分配給一個進程,運用進程稱號作為參數稱號。假如咱們想越過管道中的某個進程(例如,RandomForest 不需求預處理),則能夠將該進程設置為None:

網格查找的成果是SVC 與StandardScaler 預處理,在C=10 和gamma=0.01 時給出最佳成果。7.小結

Pipeline 類是一種通用東西,能夠將機器學習作業流程中的多個處理進程鏈接在一起。運用管道能夠將多個進程封裝為單個Python 目標,這個目標具有咱們了解的scikit-learn 接口fit、predict 和transform。特別是運用穿插驗證進行模型評價與運用網格查找進行參數挑選時,運用Pipeline 類來包含一切處理進程對正確的評價至關重要。

運用Pipeline 類還能夠讓代碼愈加簡練,并削減不必pipeline 類構建處理鏈時可能會犯的過錯(比方忘掉將一切改換器運用于測驗集,或許運用次序過錯)的可能性。挑選特征提取、預處理和模型的正確組合,這在某種程度上是一門藝術,一般需求一些試錯??墒怯辛斯艿?,這種“測驗”多個不同的處理進程是十分簡略的。在進行實驗時,要當心不要將處理進程復雜化,而且一定要評價一下模型中的每個組件是否必要。

全文完

步驟 管道 參數
FASHION GUIDE
  • McQueen: 表象之下 “McQueen: 表象之下” 沉浸式展覽于上海揭幕
    McQueen: 表象之下 “McQueen: 表象之下” 沉浸式展覽于上海揭幕
    中國上海McQueen于上海Fotografiska 影像藝術中心呈現沉浸式展覽McQueen:表象之下,深入探尋品牌獨特藝術表達的起源與靈感。本..
  • MICHAEL KORS北京國貿商城旗艦店盛大啟幕 呈現首家餐飲概念JET SET LOUNGE (MK旅行吧)
    MICHAEL KORS北京國貿商城旗艦店盛大啟幕 呈現首家餐飲概念JET SET LOUNGE (MK旅行吧)
    [2026年3月27日] MICHAEL KORS欣然宣布,位于北京國貿商城的全新旗艦店正式啟幕,以品牌最新零售設計理念打造,呈現精致而富有..
  • 2026 鋁面限量版瑞士軍刀:專注鑄就精準
    2026 鋁面限量版瑞士軍刀:專注鑄就精準
    Victorinox 維氏隆重推出 2026 鋁面限量版瑞士軍刀,這是備受贊譽的年度鋁面限量系列的第十二款作品。今年,該系列采用冰川藍..
  • 最新

    lv