模型融合-Kaggle Ensembling Guide

本文主要是參考 Kaggle Ensembling Guide 所寫的讀後感,原文網址詳見:https://mlwave.com/kaggle-ensembling-guide/


首先,我們講到的模型融合的方式主要有三種:

  1. bagging (隨機森林模型是基於bagging融合的代表)
  2. boosting (GBDT和XGboost模型是基於boosting融合的代表)
  3. stacking

此三種方法主要是從模型的角度講解如何進行集成學習(ensembling learning),但是我們參加kaggle、天池類的比賽,常說的模型融合方法不是指這些,主要指的是一些將不同結果融合以提高分數的技巧。

下面我對常用的模型融合技巧進行介紹

voting(投票法)

  • 此方法比較簡單,就是我們常見的投票機制,少數服從多數,針對分類模型使用。
  • 下面這個例子簡單明瞭的說明了,爲什麼不相關的分類器投票融合效果會增加。假設我們有單個正確率爲70%的三個互不相關的分類器。然後我們進行投票:

    全部正確: 0.7 * 0.7 * 0.7 = 0.3429
    兩個正確: 0.7 * 0.7 * 0.3 + 0.7 * 0.3 * 0.7 + 0.3 * 0.7 * 0.7 = 0.4409
    一個正確: 0.3 * 0.3 * 0.7 + 0.3 * 0.7 * 0.3 + 0.7 * 0.3 * 0.3 = 0.189
    全部爭取: 0.3 * 0.3 * 0.3 = 0.027
    可以發現我們投票後產生的正確率大約爲78%(0.3429 + 0.4409 = 0.7838)

  • 從上面的例子也可以看出用來投票的基分類器基本是越多越好的。
  • 同時基分類器越不相關融合效果越好,這也是比較容易理解,大家彼此都一樣了,融合當然不會有效果了。
  • 除了公平的進行投票外,我們也可以設置投票的權重,越好的分類器權重越高。形象的理解就是說一些相對弱的分類器只有聯合的足夠多才能夠打敗一個好的分類器從而影響最後結果。

Averaging (平均法)

  • 此方法顯然是針對迴歸問題設計的。就是對多個結果求平均值。
  • 平均法存在問題就是如果不同迴歸方法的預測結果波動幅度相差比較大,那麼波動小的迴歸結果在融合時候起的作用就比較小。因此我們可以進行 Rank Averaging 將回歸的值進行排序,然後利用均勻分佈進行打分。
    小例子如下:
    Id,Prediction
    1,0.35000056
    2,0.35000002
    3,0.35000098
    4,0.35000111

    先將結果排序:
    Id,Rank,Prediction
    1,1,0.35000056
    2,0,0.35000002
    3,2,0.35000098
    4,3,0.35000111

    再進行打分:
    Id,Prediction
    1,0.33
    2,0.0
    3,0.66
    4,1.0

Stacked Generalization & Blending

stacking

  • 如上圖所示,簡單來講此方法就是我們將不同基模型預測的結果作爲參數再訓練一個 stacker 模型作爲它們的融合。
  • 下面我們介紹 Stacked Generalization 的基本流程。假設我們作一個 2-fold stacking
    1. 將測試集分爲兩部分:train_a和train_b
    2. 將基模型在訓練集train_a上訓練並在訓練集train_b上預測
    3. 同樣將基模型在訓練集train_b上訓練並在訓練集train_a上預測
    4. 將基模型在所有訓練集上訓練在測試集上預測
    5. 利用第一階段在訓練集train_a和train_b的預測訓練我們的stacker模型。
  • 我們對測試集進行基模型預測產生特徵時,既可以像上述一樣讓基模型在所有訓練集上訓練一遍,然後對測試集進行一次預測,也可以利用基模型在 k-fold 產生的模型對測試集進行預測然後取平均。
  • Blending 方法跟 Stacked Generalization 類似,只不過它不再進行 k-fold 多次訓練,而是將數據集分爲兩部分一部分進行基模型訓練,另一部分進行 stacker 模型訓練。
  • 在此基礎上有一篇文章 Feature weighted linear stacking 想法很好,在此文中,基模型在 stacking 的時候不再使用同一的係數,而是根據數據元特徵(最初的特徵)來設計基模型的係數。想想是很合理的,直觀上講,不同模型對不同樣本的預測能力是不一樣的,我們應該根據原樣本特徵自適應的選擇基模型當然是最好不過了。文章詳見:https://arxiv.org/pdf/0911.0460.pdf

最後

我只是比較簡短的介紹了 Kaggle Ensembling Guide 這篇文章的主要內容,裏面還有許多細節沒有介紹,像一些利用融合方法提高 kaggle 成績代碼的實例、還有一些腳本代碼、還有作者講的無監督的 stacking 和在線的 stacking 以及作者如何設計自動的 stacking 從而節省大量時間,推薦大家有時間可以讀一下原文。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章