Stacking 模型融合詳解(附python代碼)

2021-02-13 機器學習AI算法工程


向AI轉型的程式設計師都關注了這個號👇👇👇

機器學習AI算法工程  公眾號: datayx

集成學習

  Ensemble learning 中文名叫做集成學習,它並不是一個單獨的機器學習算法,而是將很多的機器學習算法結合在一起,我們把組成集成學習的算法叫做「個體學習器」。在集成學習器當中,個體學習器都相同,那麼這些個體學習器可以叫做「基學習器」。

  個體學習器組合在一起形成的集成學習,常常能夠使得泛化性能提高,這對於「弱學習器」的提高尤為明顯。弱學習器指的是比隨機猜想要好一些的學習器。

  在進行集成學習的時候,我們希望我們的基學習器應該是好而不同,這個思想在後面經常體現。 「好」就是說,你的基學習器不能太差,「不同」就是各個學習器儘量有差異。

  集成學習有兩個分類,一個是個體學習器存在強依賴關係、必須串行生成的序列化方法,以Boosting為代表。另外一種是個體學習器不存在強依賴關係、可同時生成的並行化方法,以Bagging和隨機森林(Random Forest)為代表。

 

Stacking 的基本思想

  將個體學習器結合在一起的時候使用的方法叫做結合策略。對於分類問題,我們可以使用投票法來選擇輸出最多的類。對於回歸問題,我們可以將分類器輸出的結果求平均值。

  上面說的投票法和平均法都是很有效的結合策略,還有一種結合策略是使用另外一個機器學習算法來將個體機器學習器的結果結合在一起,這個方法就是Stacking。

  在stacking方法中,我們把個體學習器叫做初級學習器,用於結合的學習器叫做次級學習器或元學習器(meta-learner),次級學習器用於訓練的數據叫做次級訓練集。次級訓練集是在訓練集上用初級學習器得到的。

過程1-3 是訓練出來個體學習器,也就是初級學習器。

過程5-9是 使用訓練出來的個體學習器來得預測的結果,這個預測的結果當做次級學習器的訓練集。

過程11 是用初級學習器預測的結果訓練出次級學習器,得到我們最後訓練的模型。

如果想要預測一個數據的輸出,只需要把這條數據用初級學習器預測,然後將預測後的結果用次級學習器預測便可。

 

訪問AI圖譜 技術分享社區 

https://loveai.tech

Stacking的實現

  最先想到的方法是這樣的,

  1:用數據集D來訓練h1,h2,h3...,

  2:用這些訓練出來的初級學習器在數據集D上面進行預測得到次級訓練集。

  3:用次級訓練集來訓練次級學習器。

  但是這樣的實現是有很大的缺陷的。在原始數據集D上面訓練的模型,然後用這些模型再D上面再進行預測得到的次級訓練集肯定是非常好的。會出現過擬合的現象。

Stacking是模型融合的一個重要的方法,幾乎每個數據科學競賽的前幾名都會使用,接下來我主要是介紹stacking的原理。

相信大家看很多stacking的資料都會看到下面的這個圖:


這個圖很形象,他具體是這樣做的,

首先我們將訓練集使用kfold切分為k分,每一分包括一個驗證集和測試集,每次取其中k-1分訓練,另外的1分用來驗證,stacking是這樣做的,比如對於集成的第一個模型,clf1,我們使用kfold交叉驗證,那麼可以得到k個clf1模型,模型的類型是一樣的,但是模型裡面學到的參數不一樣,因為他們的訓練集是不一樣的,對與每一折的訓練,我們還有一個驗證集啊,那麼我們用訓練得到的模型在驗證集合上做一次預測,你想,因為這個時候我們的驗證集是不是只有1分,也就是只有train_set_number/k個樣本(train_set_number表示訓練樣本的個數),但是這只是一折啊,我們還有k折,每一折我們都會在驗證集上預測,所以最終對於clf1在驗證集上得到是不是train_set_number個結果,不用擔心是沒有重複的,因為你是kflod啊

是不是每一折的驗證集樣本都不會相同,也就是沒有哪個樣本同時出現在兩個驗證集上,這樣下來,我們就得到第一級的結果,也是train_set_number個結果。然後在每一折上,我們在測試集上做一次預測,那麼k個clf1模型預測k次得到了k個結果,也就是每一個樣本預測結果有k個,我們就取一下平均,看到是取平均,這樣取完平均以後每一個樣本在clf1模型上就得到一個預測結果。這只是一個模型的過程,因為我們需要集成很多個模型,那麼我重複n個模型,做法和上面是一樣的,假設我們有n個模型,那麼請問我們stacking第一層出來,在驗證集上得到的結果特徵是什麼維度?應該就是訓練樣本的個數行(train_set_number),列數就是n吧,因為n個模型啊,這就是我們對第一層結果的一個特徵堆疊方法,這樣第一層出來的結果又可以作為特徵訓練第二層,第二層任然可以使用stacking多個模型,或者直接接一個模型用於訓練,然後直接預測。那麼同樣,對於測試集第一層出來的維度是不是(test_set_number,n),也就是測試集樣本的行數,這樣是不是可以用第二層訓練的模型在這個上面預測,得到我們最後的結果。這個就是stacking的整個過程。

然後我們看一段stacking的代碼:

構造stacking類

事實上還可以構造一個stacking的類,它擁有fit和predict方法

閱讀過本文的人還看了以下:


分享《深度學習入門:基於Python的理論與實現》高清中文版PDF+原始碼

《21個項目玩轉深度學習:基於TensorFlow的實踐詳解》完整版PDF+附書代碼

《深度學習之pytorch》pdf+附書源碼

將機器學習模型部署為REST API

FashionAI服裝屬性標籤圖像識別Top1-5方案分享

重要開源!CNN-RNN-CTC 實現手寫漢字識別

yolo3 檢測出圖像中的不規則漢字

同樣是機器學習算法工程師,你的面試為什麼過不了?

前海徵信大數據算法:風險概率預測

【Keras】完整實現『交通標誌』分類、『票據』分類兩個項目,讓你掌握深度學習圖像分類

VGG16遷移學習,實現醫學圖像識別分類工程項目

特徵工程(一)

特徵工程(二) :文本數據的展開、過濾和分塊

特徵工程(三):特徵縮放,從詞袋到 TF-IDF

特徵工程(四): 類別特徵

特徵工程(五): PCA 降維

特徵工程(六): 非線性特徵提取和模型堆疊

特徵工程(七):圖像特徵提取和深度學習

如何利用全新的決策樹集成級聯結構gcForest做特徵工程並打分?

Machine Learning Yearning 中文翻譯稿

螞蟻金服2018秋招-算法工程師(共四面)通過

全球AI挑戰-場景分類的比賽源碼(多模型融合)

斯坦福CS230官方指南:CNN、RNN及使用技巧速查(列印收藏)

python+flask搭建CNN在線識別手寫中文網站

中科院Kaggle全球文本匹配競賽華人第1名團隊-深度學習與特徵工程

不斷更新資源

深度學習、機器學習、數據分析、python

 搜索公眾號添加: datayx  

長按圖片,識別二維碼,點關注

訪問AI圖譜  

https://loveai.tech

相關焦點

  • 模型堆疊(Stacking)和模型融合的原理與實現以及一個庫heamy的介紹
    只要知道stack是用cv交叉驗證來得出元模型的特徵(一個基模型產出一個元特徵作為二級模型的輸入),而blend是用留出法,比如百分之80作訓練,另外百分之20的預測值作為元模型的標籤(而stack是用全部的訓練集預測來產出一個基模型對應的標籤,二級模型只用那百分之20的預測值,這樣可以把堆疊用的數據集和二級模型泛化用的數據集分開,而stacking就沒有分開,所以stakcing有數據洩露,存在過擬合的風險
  • 從零開始實現穿衣圖像分割完整教程(附python代碼演練)
    模型我們可以很容易的建立模型,過程非常簡單:我們需要訓練這樣一個模型,該模型輸入原始圖像,可以輸出它的三維蒙版,即分離皮膚、背景和衣服。 訓練完成之後,當一個新的圖像輸入時,我們就可以將它分成三個不同的部分: 背景、皮膚和衣服。 我們只關注感興趣區域(連衣裙),這樣蒙版結合原始圖像,就可以裁剪出我們需要的連衣裙。
  • 基於 Python 的 Stacking 集成機器學習實踐
    例如,下面定義了兩個0級模型:models = [('lr',LogisticRegression()),('svm',SVC())stacking = StackingClassifier(estimators=models)列表中的每個模型也可以是管道,包括在將模型擬合到訓練數據集之前模型所需的任何數據準備。
  • 從Boosting到Stacking,概覽集成學習的方法與性能
    集成方法是將幾種機器學習技術組合成一個預測模型的元算法,以達到減小方差(bagging)、偏差(boosting)或改進預測(stacking)的效果。集合方法可分為兩類:序列集成方法,其中參與訓練的基礎學習器按照順序生成(例如 AdaBoost)。
  • 常用的模型集成方法介紹:bagging、boosting、stacking
    它以一種高度自適應的方法順序地學習這些弱學習器(每個基礎模型都依賴於前面的模型),並按照某種確定性的策略將它們組合起來。stacking,該方法通常考慮的是異質弱學習器,並行地學習它們,並通過訓練一個「元模型」將它們組合起來,根據不同弱模型的預測結果輸出一個最終的預測結果。
  • 常用的模型集成方法介紹:bagging、boosting 、stacking
    它以一種高度自適應的方法順序地學習這些弱學習器(每個基礎模型都依賴於前面的模型),並按照某種確定性的策略將它們組合起來。stacking,該方法通常考慮的是異質弱學習器,並行地學習它們,並通過訓練一個「元模型」將它們組合起來,根據不同弱模型的預測結果輸出一個最終的預測結果。
  • 【乾貨】Python機器學習機器學習項目實戰3——模型解釋與結果分析(附代碼)
    用python完成一個完整的機器學習項目:第三部分——Interpreting a machine learning model and presenting results本系列的第一部分【1】中,討論了數據清理、數據分析、特徵工程和特徵選擇。
  • (十)stacking 簡介
    >(四)Python中隨機森林的實現與解釋(五)如何用 Python 從頭開始實現 Bagging 算法(六)如何利用Python從頭開始實現隨機森林算法(七)AdaBoost 簡介(八)Python 中的 AdaBoost 分類器實例(九)AdaBoost 中參數對於決策邊界複雜度分析(十)stacking
  • 分享《深度學習入門:基於Python的理論與實現》高清中文版PDF+原始碼
    閱讀過本文的人還看了以下:《21個項目玩轉深度學習:基於TensorFlow的實踐詳解》完整版PDF+附書代碼《深度學習之pytorch》pdf+附書源碼將機器學習模型部署為REST APIFashionAI服裝屬性標籤圖像識別Top1-5方案分享重要開源!
  • python人工智慧項目實戰,PDF+源碼
    在本書的最後,您將熟練地構建自己的智能模型,以解決任何類型的AI問題,而不會有任何麻煩。本書涵蓋了數學代數模型的實際創建和分析,如線性連續模型,非明顯線性連續模型,和純線性整數模型。作為數十年行業教學和諮詢的產品,Practical Python AI Projects不是專注於理論,而是強調模型創建方面;對比的替代方法和實際變化。每個模型都經過徹底解釋並編寫執行。本書中所有示例的原始碼都是可用的,使用Google OR-Tools以Python編寫。
  • 使用單行代碼評估回歸模型的Python包
    對此的一個內聯嘗試是python包「 regressormetricgraphplot」的開發,該軟體包旨在幫助用戶使用單行代碼繪製評估指標圖,以針對不同的廣泛使用的回歸模型指標進行一目了然的比較。使用該實用程序包,還可以通過將其應用於日常的預測回歸問題,顯著降低從業人員以業餘方式評估不同機器學習算法的障礙。
  • 文本分類實戰--從TFIDF到深度學習CNN系列效果對比(附代碼)
    ,從理論到代碼實現進行總結,其中涉及CHI選擇特徵詞,TFIDF計算權重,樸素貝葉斯、決策樹、SVM、XGBoost等算法,實現傳統的文本分類並取得了不錯的效果。其實這裡也應該做參數優化的工作,比如xgboost的max_depth、n_estimate、學習率等參數等應該進行調節,因為時間太緊我這部分工作也沒做,而是使用的默認設置==4, 卷積神經網絡這裡使用YOON KIM的模型框架,代碼使用WILDML的,可以參見我之前的一篇博客,為了適用於本任務,修改一下 data_helpers.py文件中的代碼,增加load_AI100
  • python金融風控評分卡模型和數據分析
    (原創課程,版權所有,項目合作QQ:231469242,微信公眾號:pythonEducation) 課程介紹python金融風控評分卡模型和數據分析微專業課包含《python信用評分卡建模(附代碼)》,《python風控建模實戰lendingClub》,《金融現金貸用戶數據分析和畫像》三套課程系列
  • 代碼詳解:如何用Python運行高性能的數學範式?
    首先需要明確的是:編寫python代碼和編寫pythonic代碼之間存在很大差異。這篇文章圍繞一些最常用的數據科學操作編寫了最佳(也存在爭議的)實踐。in python?- harshitcodes/python_paradigms_github.com結論對於任何數據密集型操作,python都有許多方法可以提高代碼的性能
  • 用Python進行機器學習(附代碼、學習資源)
    https://towardsdatascience.com/simple-and-multiple-linear-regression-in-python-c928425168f9?gi=69160943145f但本文要介紹的不僅僅是一個簡單的線性擬合,請大家接著往下看。
  • onnx實現對pytorch模型推理加速
    3.torch.nn.Module.load_state_dict:使用反序列化狀態字典加載model's參數字典保存加載模型2種方式,在保存模型進行推理時,只需要保存訓練過的模型的學習參數即可,一個常見的PyTorch約定是使用.pt或.pth文件擴展名保存模型。
  • Python每天一分鐘:pass與assert語句詳解
    python中的pass和assert語句pass語句詳解很多程式語言都提供了「空語句」支持,如C/C++/JAVAPython 也不例外,但由於Python的設計中剔除了分號作為終結代碼語句的支持, 所以python設計了單獨的關鍵字來支持空語句,即pass 語句.下面為大家演示pass語句的代碼:
  • 圖像分類:一個更魯棒的場景分類模型
    糟糕的模型訓練幾天幾夜,可能趕不上優勢模型訓練幾個epoch。集成的方式可以選擇投票法、均值法、按照模型Acc加權法等等。自然語言處理》英、中文版PDF+源碼《21個項目玩轉深度學習:基於TensorFlow的實踐詳解》完整版PDF+附書代碼《深度學習之pytorch》pdf+附書源碼PyTorch深度學習快速實戰入門《pytorch-handbook》【下載】豆瓣評分8.1,《機器學習實戰:基於Scikit-Learn和TensorFlow
  • 如何從Tensorflow中創建CNN,並在GPU上運行該模型(附代碼)
    最後,您將學習如何在GPU上運行該模型,以便您可以花時間創建更好的模型,而不是等待它們匯聚。下面列出了python3.5和python2.7的Anaconda環境文件。Tensorflow的模型圖以下是訓練模型的代碼。
  • python+flask搭建CNN在線識別手寫中文網站
    一、數據集     目前國內有很多優秀的中文手寫識別數據集。     將下載好的HWDB數據集解壓處理好開始訓練,這個訓練過程比較長,我最終在GPU:GTX1050Ti上迭代了12,000次花費幾個小時,最終取最可能的前三個預測值三、加載模型     我訓練模型迭代了12,000次之後,將訓練參數保存在checkpoint文件夾中,不過因為單個文件大小的限制,訓練好的模型文件從百度雲上下載