bagging集成和stacking集成(理論篇)機器學習你會遇到的「坑」

bagging集成和stacking集成(理論篇)機器學習你會遇到的“坑”

bagging集成和stacking集成(理論篇)機器學習你會遇到的“坑”

數學準備:

  • 假設空間:從樣本空間X到標記空間Y的所有可能映射組成的集合。

  • 自助採樣(bootstrap):從給定集合中有放回地隨機挑選樣本,直到採樣出與原本數據規模相同的數據集。大約會有
bagging集成和stacking集成(理論篇)機器學習你會遇到的“坑”

  • 比例的樣本不會出現在採樣中。

bagging集成和stacking集成(理論篇)機器學習你會遇到的“坑”

集成的動機

在一個傳統的機器學習任務中,面對不同的數據會採用不同的模型。

面對迴歸任務,我們可能會採用簡單的線性迴歸,以保證模型的可解釋性,但隨著特徵的增多,簡單線性迴歸往往會出現多重共線性的問題。我們接下來會嘗試多項式迴歸來解決數據的微弱的非線性傾向,但這樣的迴歸方式也並不能處理複雜的非線性關係,而且隨著特徵的增多,多項式會變得非常臃腫,即便採用了嶺迴歸和LASSO,以及彈性網,仍然無法有效解決高維空間的特徵間複雜的非線性組合。我們可以繼續嘗試添加kernel的嶺迴歸和支持向量機,但kernel的選取需要對數據的先驗形式做出假設,參數的增多需要不斷地去調試參數。如果你厭倦了這一方式,那麼還可以嘗試種下一棵決策樹,但決策樹(以及高斯過程)這樣的非參數模型天然有著比參數模型更高的過擬合風險。

同樣,面對分類任務,我們可以考慮樸素貝葉斯的方法,它面對屬性值離散的數據就會變成一個計數工作。但它假設太過簡單,從理論上來講無法勝任特徵之間存在相關性的數據(雖然在實踐中,性能還不錯),如果我們想進一步地提高性能,那麼就可以考慮廣義線性模型中而來的logistic迴歸,它具備概率的框架,還具備很好的解釋性,但對於特徵空間線性不可分的數據往往會無能為力,我們就可以想到kernel function的作用正是通過升維將線性不可分的數據變得線性可分,所以我們還會嘗試添加kernel的支持向量機,但支持向量機參數較多難以調優,且解釋性比較差。接下來,我們為了非線性和解釋性,還會採用多變量決策樹的辦法,但決策樹面對多個輸出結果且特徵間存在複雜關係時,泛化性能也會不佳。

可以看出,沒有任何一個模型可以勝任全部的機器學習任務。我們就會很自然的想到,面對同一個任務,可不可以將不同的模型結合起來,來達到想要的效果?比如,學習器A在某些樣本上預測失誤,但學習器B卻可以將這些樣本預測對,就好像面對很多科目的考試,數學成績好的人去做數學卷子,語文好的人去做語文試題,如果只用一個人去做全部的試卷,那麼考試分數都會很低,但把他們結合在一起,就有望達到我們想要的效果。

從數學的角度來說,每個模型都對應著不同的假設空間,而結合不同的模型會將假設空間擴大。這就是所謂的集成學習(ensemble learning),我們將不同的模型結合起來,而模型要滿足一個最基本的條件,即集成學習中的每一個學習器儘可能的不同,因為兩個數學成績好的人去考試,無法優化語文成績。為了獲得差異較大的模型,主要有三種方法:

  • 改變算法,對於同樣的數據,可以採用不同的算法去構建模型。

  • 改變數據,在相同的算法下,通過進入模型的數據不同來改變最終的模型。

  • 改變參數,在相同的算法,相同的數據下,通過改變參數來改變的最終的模型。

注意,獲得差異化的模型是集成學習的核心問題,沒有之一,我們會在後面看到,這是集成學習性能提升的主要來源。而根據差異化模型的結合策略,又可以將集成學習的主要分為三類:

  • bagging

  • boosting

  • stacking

在這裡,我主要講解對初學者更加友好的bagging和stacking,而如何更好的獲得差異化模型會貫穿其中。

bagging集成和stacking集成(理論篇)機器學習你會遇到的“坑”

Bagging集成

集成學習中,比較好理解應當是Bagging集成方法。為了保證模型的差異性,每個模型的訓練數據都是從樣本中自助採樣而來,同時為了獲得最後的輸出結果,bagging方法採用投票法,將投票的結果作為最終的輸出。與KNN的機制相似,迴歸任務採取加權平均,分類任務採取加權投票法。

bagging集成和stacking集成(理論篇)機器學習你會遇到的“坑”

如圖,我們有三個基學習器,接受自助採樣而來的數據,訓練完畢後,將每個結果融合。

自助採樣法會導致某些樣本未被學習器使用,為了充分的利用數據,以及分集測試的需要,我們會把未被使用的數據做測試集,以此來確定過擬合以及減小過擬合風險。

bagging集成和stacking集成(理論篇)機器學習你會遇到的“坑”

隨機森林(Randomforest)

隨機森林可能是bagging集成中最著名的算法,它以決策樹作為基學習器,仍然採用自助採樣法訓練基學習器:

bagging集成和stacking集成(理論篇)機器學習你會遇到的“坑”

模型的差異化除了靠隨機採樣所產生的數據擾動,還會添加特徵擾動。傳統的決策樹會對於每棵樹上的節點劃分,我們會在當前節點上數據所具備的全部屬性中通過信息增益或者gini指數的辦法來挑出一個最佳屬性,作為生成下一節點的劃分屬性。但隨機森林為了增大模型的差異性,還會隨機選擇一個特徵子集,這個子集可以是少部分特徵的集合,也可以由特徵組合而來(聰明的讀者馬上會想到,這正是我們前面所講解的特徵選擇和降維的另一用處)。這樣,每一個基學習器的性能其實都比不上單棵決策樹,但組合起來,卻會讓隨機森林的表現遠遠優於普通的決策樹。

bagging集成和stacking集成(理論篇)機器學習你會遇到的“坑”

Stacking集成

Stacking的想法比bagging更為簡單,曾經有人把boosting叫做串行集成方法,bagging叫做並行的集成方法,事實上stacking也是串行的集成。所謂stack,就像程序中的調用棧,堆疊起來層層調用。

bagging集成和stacking集成(理論篇)機器學習你會遇到的“坑”

首先我們會像bagging方法一樣,訓練出不同的基學習器,然後並不直接對這些基學習器的輸出做加權平均,而是將上一步基學習器應用到數據上,將數據的輸出作為下一層學習器的輸入。從某種意義上,上一層的學習器是一個新數據的生成器,將原有的數據映射到另一個特徵空間,也可以看成是上一層的學習器是對樣本做了特徵提取。

比如,對數據利用樸素貝葉斯的辦法,樸素貝葉斯模型會輸出樣本屬於不同類別的後驗概率,有n個類別,就會產生n個後驗概率,然後將上一層的該樣本的後驗概率作為數據的特徵,target保持不變,作為新數據,放入下一層的學習器。

bagging集成和stacking集成(理論篇)機器學習你會遇到的“坑”

讀芯君開扒

課堂TIPS

• bagging集成的後續處理,加權平均的權重可以從訓練數據中得到,我們可以指定誤差佔比越小的基學習器權重更大。同時,採取多少基學習器,採取怎樣的基學習器會成為集成學習實踐過程的中的重點。在實踐過程中,可以將數量作為超參數來處理,但基學習器的類型一般要靠對數據的認識和經驗處理。

• 我們經常看見決策樹作為基學習器,原因不在於決策樹本身足夠好,而是決策樹本身對數據擾動,特徵擾動的影響更大,也就是說,我們可以很輕易地製造出決策樹的性能差異,而性能差異正是集成學習的核心問題。

• 不同類型的基學習器的輸出可能並不一致,比如決策樹會輸出類別標記,而樸素貝葉斯會輸出後驗概率,不同的基學習器的結合要注意把輸出結果進行轉換可以處理的類型。

• stacking集成需要注意,千萬不要在上一層學習器用來訓練的數據上繼續生成數據,而是應該利用其未接觸的數據生成新數據,因為多層的學習器反覆地利用同一段數據,就相當於一個複雜的模型應用在了少量數據上,有著極高的過擬合風險。

bagging集成和stacking集成(理論篇)機器學習你會遇到的“坑”

我們一起探討AI落地的最後一公里


分享到:


相關文章: