常用的模型整合方法介紹:bagging、boosting 、stacking

機器之心發表於2019-05-15

「團結就是力量」。這句老話很好地表達了機器學習領域中強大「整合方法」的基本思想。總的來說,許多機器學習競賽(包括 Kaggle)中最優秀的解決方案所採用的整合方法都建立在一個這樣的假設上:將多個模型組合在一起通常可以產生更強大的模型。

本文介紹了整合學習的各種概念,並給出了一些必要的關鍵資訊,以便讀者能很好地理解和使用相關方法,並且能夠在有需要的時候設計出合適的解決方案。

本文將討論一些眾所周知的概念,如自助法、自助聚合(bagging)、隨機森林、提升法(boosting)、堆疊法(stacking)以及許多其它的基礎整合學習模型。

為了使所有這些方法之間的聯絡儘可能清晰,我們將嘗試在一個更廣闊和邏輯性更強的框架中呈現它們,希望這樣會便於讀者理解和記憶。

何為整合方法

整合學習是一種機器學習正規化。在整合學習中,我們會訓練多個模型(通常稱為「弱學習器」)解決相同的問題,並將它們結合起來以獲得更好的結果。最重要的假設是:當弱模型被正確組合時,我們可以得到更精確和/或更魯棒的模型。

在整合學習理論中,我們將弱學習器(或基礎模型)稱為「模型」,這些模型可用作設計更復雜模型的構件。在大多數情況下,這些基本模型本身的效能並不是非常好,這要麼是因為它們具有較高的偏置(例如,低自由度模型),要麼是因為他們的方差太大導致魯棒性不強(例如,高自由度模型)。

整合方法的思想是透過將這些弱學習器的偏置和/或方差結合起來,從而建立一個「強學習器」(或「整合模型」),從而獲得更好的效能。

組合弱學習器

為了建立一個整合學習方法,我們首先要選擇待聚合的基礎模型。在大多數情況下(包括在眾所周知的 bagging 和 boosting 方法中),我們會使用單一的基礎學習演算法,這樣一來我們就有了以不同方式訓練的同質弱學習器。

這樣得到的整合模型被稱為「同質的」。然而,也有一些方法使用不同種類的基礎學習演算法:將一些異質的弱學習器組合成「異質整合模型」。

很重要的一點是:我們對弱學習器的選擇應該和我們聚合這些模型的方式相一致。如果我們選擇具有低偏置高方差的基礎模型,我們應該使用一種傾向於減小方差的聚合方法;而如果我們選擇具有低方差高偏置的基礎模型,我們應該使用一種傾向於減小偏置的聚合方法。

這就引出瞭如何組合這些模型的問題。我們可以用三種主要的旨在組合弱學習器的「元演算法」: 

  • bagging,該方法通常考慮的是同質弱學習器,相互獨立地並行學習這些弱學習器,並按照某種確定性的平均過程將它們組合起來。

  • boosting,該方法通常考慮的也是同質弱學習器。它以一種高度自適應的方法順序地學習這些弱學習器(每個基礎模型都依賴於前面的模型),並按照某種確定性的策略將它們組合起來。

  • stacking,該方法通常考慮的是異質弱學習器,並行地學習它們,並透過訓練一個「元模型」將它們組合起來,根據不同弱模型的預測結果輸出一個最終的預測結果。

非常粗略地說,我們可以說 bagging 的重點在於獲得一個方差比其組成部分更小的整合模型,而 boosting 和 stacking 則將主要生成偏置比其組成部分更低的強模型(即使方差也可以被減小)。

在接下來的章節中,我們將具體介紹 bagging 和 boosting 方法(它們比 stacking 方法使用更廣泛,並且讓我們可以討論一些整合學習的關鍵概念),然後簡要概述 stacking 方法。

常用的模型整合方法介紹:bagging、boosting 、stacking

我們可以將弱學習器結合起來以得到效能更好的模型。組合基礎模型的方法應該與這些模型的型別相適應。

關於 Bagging

在「並行化的方法」中,我們單獨擬合不同的學習器,因此可以同時訓練它們。最著名的方法是「bagging」(代表「自助聚合」),它的目標是生成比單個模型更魯棒的整合模型。

自助法

這種統計技術先隨機抽取出作為替代的 B 個觀測值,然後根據一個規模為 N 的初始資料集生成大小為 B 的樣本(稱為自助樣本)。

常用的模型整合方法介紹:bagging、boosting 、stacking

自助抽樣過程示意圖。

在某些假設條件下,這些樣本具有非常好的統計特性:在一級近似中,它們可以被視為是直接從真實的底層(並且往往是未知的)資料分佈中抽取出來的,並且彼此之間相互獨立。因此,它們被認為是真實資料分佈的代表性和獨立樣本(幾乎是獨立同分布的樣本)。

為了使這種近似成立,必須驗證兩個方面的假設。

首先初始資料集的大小 N 應該足夠大,以捕獲底層分佈的大部分複雜性。這樣,從資料集中抽樣就是從真實分佈中抽樣的良好近似(代表性)。

其次,與自助樣本的大小 B 相比,資料集的規模 N 應該足夠大,這樣樣本之間就不會有太大的相關性(獨立性)。注意,接下來我可能還會提到自助樣本的這些特性(代表性和獨立性),但讀者應該始終牢記:「這只是一種近似」。 

舉例而言,自助樣本通常用於評估統計估計量的方差或置信區間。根據定義,統計估計量是某些觀測值的函式。因此,隨機變數的方差是根據這些觀測值計算得到的。

為了評估這種估計量的方差,我們需要對從感興趣分佈中抽取出來的幾個獨立樣本進行估計。在大多數情況下,相較於實際可用的資料量來說,考慮真正獨立的樣本所需要的資料量可能太大了。

然而,我們可以使用自助法生成一些自助樣本,它們可被視為「最具代表性」以及「最具獨立性」(幾乎是獨立同分布的樣本)的樣本。這些自助樣本使我們可以透過估計每個樣本的值,近似得到估計量的方差。

常用的模型整合方法介紹:bagging、boosting 、stacking

自助法經常被用於評估某些統計估計量的方差或置信區間

關於 Boosting

在「順序化的方法中」,組合起來的不同弱模型之間不再相互獨立地擬合。其思想是「迭代地」擬合模型,使模型在給定步驟上的訓練依賴於之前的步驟上擬合的模型。「Boosting」是這些方法中最著名的一種,它生成的整合模型通常比組成該模型的弱學習器偏置更小。

提升方法

Boosting 方法和bagging 方法的工作思路是一樣的:我們構建一系列模型,將它們聚合起來得到一個效能更好的強學習器。然而,與重點在於減小方差的 bagging 不同,boosting 著眼於以一種適應性很強的方式順序擬合多個弱學習器:序列中每個模型在擬合的過程中,會更加重視那些序列中之前的模型處理地很糟糕的觀測資料。

直觀地說,每個模型都把注意力集中在目前最難擬合的觀測資料上。這樣一來,在這個過程的最後,我們就獲得了一個具有較低偏置的強學習器(我們會注意到,boosting 也有減小方差的效果)。和 bagging 一樣,Boosting 也可以用於迴歸和分類問題。

由於其重點在於減小偏置,用於 boosting  的基礎模型通常是那些低方差高偏置的模型。例如,如果想要使用樹作為基礎模型,我們將主要選擇只有少許幾層的較淺決策樹。

而選擇低方差高偏置模型作為 boosting 弱學習器的另一個重要原因是:這些模型擬合的計算開銷較低(引數化時自由度較低)。

實際上,由於擬合不同模型的計算無法並行處理(與 bagging 不同),順序地擬合若干複雜模型會導致計算開銷變得非常高。

一旦選定了弱學習器,我們仍需要定義它們的擬合方式(在擬合當前模型時,要考慮之前模型的哪些資訊?)和聚合方式(如何將當前的模型聚合到之前的模型中?)在接下來的兩小節中,我們將討論這些問題,尤其是介紹兩個重要的 boosting 演算法:自適應提升(adaboost )和梯度提升(gradient boosting)。

簡而言之,這兩種元演算法在順序化的過程中建立和聚合弱學習器的方式存在差異。自適應增強演算法會更新附加給每個訓練資料集中觀測資料的權重,而梯度提升演算法則會更新這些觀測資料的值。這裡產生差異的主要原因是:兩種演算法解決最佳化問題(尋找最佳模型——弱學習器的加權和)的方式不同。 

常用的模型整合方法介紹:bagging、boosting 、stacking

Boosting 會迭代地擬合一個弱學習器,將其聚合到整合模型中,並「更新」訓練資料集,從而在擬合下一個基礎模型時更好地考慮當前整合模型的優缺點。

自適應 boosting

在自適應 boosting(通常被稱為「adaboost」)中,我們將整合模型定義為 L 個弱學習器的加權和常用的模型整合方法介紹:bagging、boosting 、stacking,其中 c_l 是係數而 w_l 是弱學習器

尋找這種最佳整合模型是一個「困難的最佳化問題」。因此,我們並沒打算一次性地解決該問題(找到給出最佳整體加法模型的所有係數和弱學習器),而是使用了一種更易於處理的「迭代最佳化過程」(即使它有可能導致我們得到次優解)。

另外,我們將弱學習器逐個新增到當前的整合模型中,在每次迭代中尋找可能的最佳組合(係數、弱學習器)。換句話說,我們迴圈地將 s_l 定義如下: 

常用的模型整合方法介紹:bagging、boosting 、stacking

其中,c_l 和 w_l 被挑選出來,使得 s_l 是最適合訓練資料的模型,因此這是對 s_(l-1) 的最佳可能改進。我們可以進一步將其表示為:

常用的模型整合方法介紹:bagging、boosting 、stacking

其中,E(.) 是給定模型的擬合誤差,e(.,.)是損失/誤差函式。因此,我們並沒有在求和過程中對所有 L 個模型進行「全域性最佳化」,而是透過「區域性」最佳化來近似最優解並將弱學習器逐個新增到強模型中。

更特別的是,在考慮二分類問題時,我們可以將 adaboost 演算法重新寫入以下過程:首先,它將更新資料集中觀測資料的權重,訓練一個新的弱學習器,該學習器重點關注當前整合模型誤分類的觀測資料。其次,它會根據一個表示該弱模型效能的更新系數,將弱學習器新增到加權和中:弱學習器的效能越好,它對強學習器的貢獻就越大。

因此,假設我們面對的是一個二分類問題:資料集中有 N 個觀測資料,我們想在給定一組弱模型的情況下使用 adaboost 演算法。在演算法的起始階段(序列中的第一個模型),所有的觀測資料都擁有相同的權重「1/N」。然後,我們將下面的步驟重複 L 次(作用於序列中的 L 個學習器):

  • 用當前觀測資料的權重擬合可能的最佳弱模型

  • 計算更新系數的值,更新系數是弱學習器的某種標量化評估指標,它表示相對整合模型來說,該弱學習器的分量如何

  • 透過新增新的弱學習器與其更新系數的乘積來更新強學習器

  • 計算新觀測資料的權重,該權重表示我們想在下一輪迭代中關注哪些觀測資料(聚和模型預測錯誤的觀測資料的權重增加,而正確預測的觀測資料的權重減小)

重複這些步驟,我們順序地構建出 L 個模型,並將它們聚合成一個簡單的線性組合,然後由表示每個學習器效能的係數加權。注意,初始 adaboost 演算法有一些變體,比如 LogitBoost(分類)或 L2Boost(迴歸),它們的差異主要取決於損失函式的選擇。

常用的模型整合方法介紹:bagging、boosting 、stacking

Adaboost 在每次迭代中更新觀測資料的權重。正確分類的觀測資料的權重相對於錯誤分類的觀測資料的權重有所下降。在最終的整合模型中,效能更好的模型具有更高的權重。

Stacking 概述

Stacking 與 bagging 和 boosting 主要存在兩方面的差異。首先,Stacking 通常考慮的是異質弱學習器(不同的學習演算法被組合在一起),而bagging 和 boosting 主要考慮的是同質弱學習器。其次,stacking 學習用元模型組合基礎模型,而bagging 和 boosting 則根據確定性演算法組合弱學習器。   

堆疊法(Stacking)

正如上文已經提到的,stacking 的概念是學習幾個不同的弱學習器,並透過訓練一個元模型來組合它們,然後基於這些弱模型返回的多個預測結果輸出最終的預測結果。

因此,為了構建 stacking 模型,我們需要定義兩個東西:想要擬合的 L 個學習器以及組合它們的元模型。

例如,對於分類問題來說,我們可以選擇 KNN 分類器、logistic 迴歸和SVM 作為弱學習器,並決定學習神經網路作為元模型。然後,神經網路將會把三個弱學習器的輸出作為輸入,並返回基於該輸入的最終預測。

所以,假設我們想要擬合由 L 個弱學習器組成的 stacking 整合模型。我們必須遵循以下步驟: 

  • 將訓練資料分為兩組

  • 選擇 L 個弱學習器,用它們擬合第一組資料

  • 使 L 個學習器中的每個學習器對第二組資料中的觀測資料進行預測

  • 在第二組資料上擬合元模型,使用弱學習器做出的預測作為輸入

在前面的步驟中,我們將資料集一分為二,因為對用於訓練弱學習器的資料的預測與元模型的訓練不相關。因此,將資料集分成兩部分的一個明顯缺點是,我們只有一半的資料用於訓練基礎模型,另一半資料用於訓練元模型。

為了克服這種限制,我們可以使用某種「k-折交叉訓練」方法(類似於 k-折交叉驗證中的做法)。這樣所有的觀測資料都可以用來訓練元模型:對於任意的觀測資料,弱學習器的預測都是透過在 k-1 折資料(不包含已考慮的觀測資料)上訓練這些弱學習器的例項來完成的。

換句話說,它會在 k-1 折資料上進行訓練,從而對剩下的一折資料進行預測。迭代地重複這個過程,就可以得到對任何一折觀測資料的預測結果。這樣一來,我們就可以為資料集中的每個觀測資料生成相關的預測,然後使用所有這些預測結果訓練元模型。

常用的模型整合方法介紹:bagging、boosting 、stacking

Stacking 方法會訓練一個元模型,該模型根據較低層的弱學習器返回的輸出結果生成最後的輸出。

原文連結:https://towardsdatascience.com/ensemble-methods-bagging-boosting-and-stacking-c9214a10a205

相關文章