集成方法:Kaggle 機器學習冠軍

已發表: 2022-03-11

當談到機器學習集成時,諺語“Two head is better than one”具有新的含義。 Ensemble 方法是 Kaggle 比賽中最受矚目的 ML 系列,它們經常以令人印象深刻的結果贏得比賽。

但在 Kaggle 之前的一個世紀,統計學家弗朗西斯·高爾頓爵士(Sir Francis Galton)注意到聚合情報的效力。 他在一個牲畜交易會上碰巧參加了一場比賽,參賽者必須猜測一頭牛的重量。 八百人提交了猜測,但他們的技能水平各不相同:農民和屠夫與從未近距離見過牛的城市居民一起猜測,所以高爾頓認為平均猜測會非常錯誤。

事實證明,人群猜測的平均值相差不到一磅(< 0.1%)。 然而,即使是最好的個人預測也離譜。

怎麼可能? 是什麼讓如此意想不到的結果成為可能?

是什麼讓機器合奏如此有效

迫使高爾頓質疑他的信念的事件也說明了是什麼讓集成如此強大:如果你有不同且獨立的模型,使用不同部分的數據對同一問題進行訓練,它們一起工作會比單獨工作更好。 原因? 每個模型將學習概念的不同部分。 因此,每個模型都會根據其“知識”產生有效的結果和錯誤。

但最有趣的是,每個真實的部分都會相互補充,而錯誤會相互抵消:

一幅描繪八個不同模型概念的圖像,每個模型學習一組不同的事實,這些事實可能重疊也可能不重疊。結果結合了每個模型所學到的知識並消除了它們的一些錯誤。

您需要在不同的數據子集上訓練具有高方差的模型(如決策樹)。 這種增加的方差意味著每個模型都過度擬合了不同的數據,但是當組合起來時,方差就會消失,就像變魔術一樣。 這創建了一個新的、更強大的模型。

就像在高爾頓的案例中一樣,當所有來源的所有數據組合在一起時,結果比孤立的數據點“更智能”。

深入了解 Kaggle 比賽中的集成學習

在 Otto Group 產品分類挑戰賽中,參與者必須建立一個能夠區分主要產品類別的預測模型。

在這裡,您可以看到獲獎模型是如何構建的。 這是三層的堆疊:第一層有 33 個模型,第二層增加了三個模型(XGBoost、神經網絡和 AdaBoost),第三層是前一層輸出的加權平均值。 它既是一個非常複雜的模型,也是一個整體。

Kaggle 的另一個成功案例是陳成龍在 Crowdflower Search Results Relevance 競賽中創建的模型。 挑戰在於創建一個可用於衡量搜索結果相關性的預測器。 你可以閱讀他的方法的完整解釋,但由於我們的興趣點是集成,故事的關鍵部分是獲勝的解決方案使用了 35 個模型的集成,其中許多也是集成——一個元集成,所以說話。

集成方法

在機器學習中有許多實現集成方法的方法。 我們將探索一些最流行的方法:

  • 裝袋
    • 隨機森林
  • 提升
    • AdaBoost
    • 梯度提升和 XGBoost
  • 混合集成方法
    • 表決
    • 堆疊
    • 級聯

裝袋

如前所述,您需要針對不同的數據子集訓練許多模型。 在實踐中,這並不容易,因為與單個模型相比,許多模型需要更多的數據,而且有時很難獲得高質量的數據集。 這是裝袋(引導聚合)派上用場的時候,因為它通過引導來拆分數據:帶有替換的隨機樣本,導致不同的子集重疊。

一旦你訓練了你的集成模型,你就可以通過你喜歡的任何指標聚合每個模型預測來構建你的最終預測:平均值、中值、眾數等。 您還可以使用模型預測概率來製定加權指標:

該圖顯示了使用 bagging 技術通過 Bootstrap 拆分數據,聚合來自各個子集的每個模型預測以產生最終輸出。

如果我們想使用決策樹作為模型,但我們的數據中幾乎沒有強大的預測屬性,那麼所有的樹都是相似的。 這是因為相同的屬性往往會出現在根節點中,從而在樹的每個分支中產生相似的結果。

隨機森林

解決這個問題的一種技術是隨機森林。 它使用樹創建一個bagging ensemble,但每個節點將其可能的屬性限制為一個隨機子集。 這迫使模型不同,從而解決了之前的問題。 它也使隨機森林成為一個很好的特徵選擇模型。

隨機森林是最流行的 ML 模型之一,因為它以低方差和訓練時間提供了良好的性能。

提升

Boosting 還使用 bootstrapping 來訓練模型,主要區別在於它根據模型預測誤差為每個實例添加權重。 bagging 是一個並行過程,而 boosting 是一個順序過程,其中每個模型都有更多的概率。 這允許它訪問先前模型預測的某些實例。

通過這種修改,boosting 試圖增加對錯誤分類實例的關注,以達到更好的全局性能:

描述 bagging 和 boosting 使用的不同方法的圖表,說明 bagging 的並行性質和 boosting 的順序性質。

它也為模型增加了權重。 在訓練時具有更好性能的預測器在預測階段將具有更高的權重。

讓我們仔細看看一些最流行的提升模型:

AdaBoost

AdaBoost 是 boosting 的首批實現之一。 它幾乎完全符合我們概述的關於提升的一般情況,並使用決策樹作為模型。 讓我們用一些偽編碼來解釋訓練階段:

 For each instance i Assign w[i] (weight, same for all) For each iteration t Generate a subset s[t] by weighted boosting (using the w[i] weights) Train model m[t] using s[t] Store m[t] Calculate e[t] (error rate of m[t]) Assign error rate e[t] to stored m[t] model If (e[t] <= a_threshold) Exit for Update weights using m[t] errors

在預測時,它根據為每個預測計算的錯誤率e[t]對每個預測進行加權。 具有高錯誤率的結果將比其他具有更高準確性的結果具有更小的權重。

梯度提升和 XGBoost

訓練這麼多模型並使它們一起工作時的主要問題之一是找到最佳的超參數配置。 很難為單個型號找到最佳配置; 為n 個模型找到最佳配置會成倍增加複雜性。 孤立模型的理想配置可能與必須與其他模型一起使用的模型的配置不同。 因此,您應該同時搜索所有模型的配置,但是如何?

梯度提升為這個問題帶來了一個優雅的解決方案。 它創建了一個損失函數,作為輸入,所有模型的所有超參數值,作為輸出,整個集成的誤差。 通過梯度下降,它找到函數的最小值(即最低誤差),從而找到每個模型的最佳超參數配置。

這種方法引入了縮放問題。 進入結構化數據機器學習之王:極限梯度提升,簡稱XGBoost。 由於各種技術,例如並行計算、內置交叉驗證能力、避免過度擬合的正則化和硬件優化,它是一種非常有效的梯度提昇實現。 XGBoost 提供出色的性能。

XGBoost 在其創建者將其用於 Kaggle 挑戰並大獲全勝時變得流行起來。 他發布了結果並創建了一個 Python 包裝器以允許更多人使用它。 當許多人認識到它的潛力時,XGBoost 迅速成為了 ML 冠軍。

混合集成方法

但故事並沒有就此結束。 我們已經看到許多類型的集成都使用相同的模型——為什麼不嘗試不同模型的組合呢? 如果你做得好,你可以創建一個更強大的 ML 方法:混合集成

表決

投票是創建混合集成的最簡單方法之一。 它訓練了許多不同的模型算法,並讓它們在預測階段“投票”:

顯示數據流向三個訓練模型的圖表:支持向量機、邏輯回歸和 KNN。前者和後者的輸出為 1,而 Logistic Regression 的輸出為 0。最終結果為 1。

您可以根據每個模型的性能或預測概率為其添加權重並生成加權投票。

堆疊

Stacking 通過在基本模型上添加一個新層來進行最終預測,而不是僅僅計算平均值或多數,從而推進了投票的想法。 它添加了元學習的概念,因為新層不是從數據中學習,而是從模型預測中學習:

該圖顯示了數據流向三個經過訓練的基本模型,在顯示最終輸出之前將它們的輸出組合到一個堆疊模型中。

您可以堆疊您喜歡的所有元層,從而形成具有多個級別的模型。 對於堆疊模型,我建議使用決策樹、SVM 或感知器。 對於基本模型,您可以使用任何您想要的方法,甚至是另一個集成,創建集成的集成。 堆疊與決策樹這樣的基礎模型效果更好,這些模型不僅可以生成價值預測,還可以生成正確的概率。

Stacking 不像 bagging 或 boosting 那樣流行,因為它更難解釋堆疊模型正在學習什麼,而且變體的數量要多得多:您可以使用模型算法、超參數配置和堆疊層的多種組合。 然而,通過正確的模型組合,stacking 甚至可以比 boosting 和 bagging 更強大。

級聯

當您希望在預測中有很大程度的確定性時,使用級聯。 它使用堆疊方法,但每一層只有一個模型。 在每個級別,模型都會丟棄他們認為不屬於所需類的實例。

通過級聯,簡單模型在復雜模型之前評估數據。 在預測步驟,第一個模型接收數據。 如果確定性不大於x (該值必須很高,大於 0.9),它將實例傳遞給下一個模型。 否則,級聯返回該模型的預測輸出。 如果沒有任何層可以高度確定地預測所需的類,則集成返回負類。

該模型的一個經典用例是預測交易何時可能是欺詐性的。 讓我們假設一個系統每天計算數百萬筆交易,並且不可能手動控制每筆交易。 使用級聯集成可以以非常高的概率丟棄非欺詐性交易,只留下一小部分交易進行手動檢查:

描述使用級聯檢測欺詐交易的圖表。兩個模型以高於 0.9 的確定性排除了欺詐的可能性,而隨後的一個模型檢測到的確定性較低,提示進行人工檢查。

當您需要出色的召回指標時,這些模型是不錯的選擇。

與投票和堆疊不同,級聯集成使用多狀態方法而不是多專家方法。 對非常深的級聯保持謹慎很重要,因為它可能會產生過度擬合。

集成方法的價值

結合許多模型,我們可以創建更好、更強大的預測器,就像人類一起工作時那樣。 我們概述了三個集合家族——bagging、boosting 和 hybrid——並了解它們是如何訓練和預測的。

決策樹可能是一個非常弱且不穩定的模型(具有高方差),但一群不同的樹(隨機森林)可能是一個非常準確和穩定的預測器。 集成的主要優勢之一是它們構建的模型具有低方差和低偏差,這是機器學習中最大的權衡之一。 在大多數情況下,它們優於其他方法,有時甚至比深度學習更好。 僅在對非結構化數據進行操作時,它們往往比深度神經網絡弱。

如果我們繼續與深度神經網絡進行比較,我們也可以說集成在訓練和測試階段往往更輕、更快。 此外,它們不需要昂貴的硬件來運行,例如強大的離散 GPU。

確實,集成缺乏被人類直觀理解的可能性,因為同時工作的數十或數百個模型會創建一個龐大而復雜的工具。 值得慶幸的是,一些技術使我們能夠了解這些方法是如何做出決定的。 最受歡迎的方法之一是 LIME,這是一種在任何機器學習模型上為特定實例創建可解釋解釋的方法。

Kaggle 比賽不僅僅存在於開發者可以玩得開心、學習新技能或贏得獎品的地方。 最終目標是創建強大的模型並將它們發佈到野外,讓它們在現實世界的場景中發揮作用。 處理關鍵問題的組織使用這些類型的模型。 例如,欺詐檢測是銀行和旅遊等行業的常見用例,這些行業處理單筆交易中轉移的大量資金。

與其他模型相比,集成產生更好的預測,具有更低的方差和偏差。 然而,很難解釋他們正在學習什麼,這在一些敏感的應用程序中可能至關重要。 個人貸款行業就是一個例子:機器學習模型可以確定個人是否有資格獲得貸款。 但是,如果客戶問金融機構為什麼拒絕貸款,應該有詳細的解釋,而不僅僅是“因為我們的 ML 模型是這麼說的”。

最終,無論您是想為企業應用程序、大型銀行或小型企業創建強大的 ML 模型,還是只是參加競賽以提高您的專業聲譽,集成應該是您的首選工具。