前邊學習了:十大集成學習模型(簡單版)-CSDN博客
Bagging又稱為“裝袋法”,它是所有集成學習方法當中最為著名、最為簡單、也最為有效的操作之一。
在Bagging集成當中,我們并行建立多個弱評估器(通常是決策樹,也可以是其他非線性算法),并綜合多個弱評估器的結果進行輸出。當集成算法目標是回歸任務時,集成算法的輸出結果是弱評估器輸出的結果的平均值,當集成算法的目標是分類任務時,集成算法的輸出結果是弱評估器輸出的結果少數服從多數。
由于bagging就是將多個模型進行集成,比較簡單,所以,本文不講bagging的原理,通過幾個問題讓大家徹底了解bagging方法:
一、為什么Bagging算法的效果比單個評估器更好?
二、為什么Bagging可以降低方差?
三、為什么誤差可以分解為偏差、方差和噪聲?三者分別是什么意思?
四、Bagging有效的基本條件有哪些?Bagging的效果總是強于弱評估器嗎?
五、Bagging方法可以集成決策樹之外的算法嗎?
六、怎樣增強Bagging中弱評估器的獨立性?
七、除了隨機森林,你還知道其他Bagging算法嗎?
八、即使是單顆樹,為什么它的feature_importances_也會有一定的隨機性?
一、為什么Bagging算法的效果比單個評估器更好?
該問題其實是在考察Bagging方法降低模型泛化誤差的基本原理。
泛化誤差是模型在未知數據集上的誤差,更低的泛化誤差是所有機器學習/深度學習建模的根本目標。在機器學習當中,泛化誤差一般被認為由偏差、方差和噪音構成。
其中偏差是預測值與真實值之間的差異,衡量模型的精度。方差是模型在不同數據集上輸出的結果的方差,衡量模型穩定性。噪音是數據收集過程當中不可避免的、與數據真實分布無關的信息。
當算法是回歸算法、且模型衡量指標是MSE時,模型的泛化誤差可以有如下定義:
泛化誤差=偏差*偏差+方差+噪音*噪音 = bias*bias+variance+noise*noise
(該公式可以通過泛化誤差、偏差、方差與噪音的定義推導而得,下面有推導)
Bagging的基本思想是借助弱評估器之間的”獨立性”來降低方差,從而降低整體的泛化誤差。這個思想可以被推廣到任意并行使用弱分類器的算法或融合方式上,極大程度地左右了并行融合方式的實際使用結果。其中,“降低方差”指的是bagging算法輸出結果的方差一定小于弱評估器輸出結果的方差,因此在相同數據上,隨機森林往往比單棵決策樹更加穩定,也因此隨機森林的泛化能力往往比單棵決策樹更強。
二、為什么Bagging可以降低方差?
設真實值為,加上誤差之后的值為?
,模型預測值為?f(x)?,并且誤差服從均值為0的正態分布,即
。
偏差:度量了學習算法的期望預期與真實結果的偏離程度,即刻畫了學習算法本身的擬合能力,即。
方差:度量了同樣大小的訓練集的變動所導致的學習性能的變化,即刻畫了數據擾動所造成的影響,即。
噪聲:表達了在當前任務上任何學習算法所能夠達到的期望泛化誤差的下界,即刻畫了學習問題本身的難度,也即。
推導
因此,誤差可以分解為偏差、方差與噪聲之和。?
三、為什么誤差可以分解為偏差、方差和噪聲?三者分別是什么意思?
3.1 回歸問題
以隨機森林為例,假設現在隨機森林中含有?n?個弱評估器(?n?棵樹),任意弱評估器上的輸出結果是?,則所有這些弱評估器輸出結果的方差可以被表示為
??。假設現在我們執行回歸任務,則森林的輸出結果等于森林中所有樹輸出結果的平均值,因此森林的輸出可以被表示為?
,因此隨機森林輸出結果的方差可以被表示為?
?,也可以寫作
。
當森林中的樹互相獨立時,?永遠小于?
,推導如下:
更一般的式子:
其中,?ρ?為弱評估器之間的相關系數,可見當弱評估器之間完全獨立時,?ρ?為0。與獨立時是一樣的。這也意味著隨機森林輸出結果的方差與森林中弱評估器之間的相關性是正相關的。評估器之間的相關性越強,隨機森林輸出的結果的方差就越大,Bagging方法通過降低方差而獲得的泛化能力就越小。
因此,
1、在bagging的弱分類器選取原則中有一條要求弱分類器之間盡可能相互獨立,而且獨立性越高bagging越有效,當弱評估器之間沒有任何獨立性了,也即每個弱評估器完全一樣,那bagging也就沒有任何意義了。
2、同時還要要求弱評估器的方差要大,偏差要小,主要是因為bagging是降低方差,不能夠降低偏差,采用大偏差的弱評估器,訓練結果非常不可控。
3.2 分類問題
在bagging中,需要對每棵樹上的輸出結果進行少數服從多數的計算,并將“多數”指向的類別作為隨機森林分類器的結果。因此,當弱評估器的方差是?時,隨機森林分類器的方差可以寫作
,其中
就是sigmoid函數,
是所有弱評估器的分類結果的均值。讓?
?在?
處進行一階泰勒展開,推導如下:
由于為sigmoid函數,所以
,因此有
。
四、Bagging有效的基本條件有哪些?Bagging的效果總是強于弱評估器嗎?
(這塊要重點記一下)
1、弱評估器的偏差較低,特別地來說,弱分類器的準確率至少要達到50%以上2、弱評估器之間相關性弱,最好相互獨立
3、弱評估器是方差較高、不穩定的評估器
1、弱評估器的偏差較低,特別地來說,弱分類器的準確率至少要達到50%以上
Bagging集成算法是對基評估器的預測結果進行平均或用多數表決原則來決定集成評估器的結果。在分類的例子中,假設我們建立了25棵樹,對任何一個樣本而言,平均或多數表決原則下,當且僅當有13棵以上的樹判斷錯誤的時候,隨機森林才會判斷錯誤。假設單獨一棵決策樹在樣本上的分類準確率在0.8上下浮動,那一棵樹判斷錯誤的概率大約就有
,那隨機森林判斷錯誤的概率(有13棵及以上的樹都判斷錯誤的概率)是:
可見,判斷錯誤的幾率非常小,這讓隨機森林的表現比單棵決策樹好很多。基于上述式子,我們可以繪制出以弱分類器的誤差率為橫坐標、隨機森林的誤差率為縱坐標的圖像。
可以從圖像上看出,當基分類器的誤差率小于0.5,即準確率大于0.5時,集成的效果是比弱分類器要好的。相反,當基分類器的誤差率大于0.5,袋裝的集成算法就失效了。所以在使用隨機森林之前,一定要檢查,用來組成隨機森林的分類樹們是否都有至少50%的預測正確率。
2、弱評估器之間相關性弱,最好相互獨立
在證明Bagging降低方差的數學過程中已經申明了很多次,唯有弱評估器之間相互獨立、弱評估器輸出的結果相互獨立時,方差計算公式的前提假設才能被滿足,Bagging才能享受降低方差的福利。
然而在現實中,森林中的弱評估器很難完全相互獨立,因為所有弱評估器都是在相同的數據上進行訓練的、因此構建出的樹結構也大同小異。幸運的是,我們能夠衡量弱評估器之間相關性。以隨機森林回歸為例,假設任意弱評估器之間的相關系數為?ρ?,則隨機森林輸出結果的方差等于:
這個公式是根據比奈梅定義(Bienaymé's Identity)與協方差相關的公式推導出來的,這暗示隨機森林輸出結果的方差與森林中弱評估器之間的相關性是正相關的,弱評估器之間的相關性越強,隨機森林輸出的結果的方差就越大,Bagging方法通過降低方差而獲得的泛化能力就越小。因此在使用隨機森林時,我們需要讓弱評估器之間盡量相互獨立,我們也可以通過這一點來提升隨機森林的水平。
3、弱評估器是方差較高、不穩定的評估器
因為Bagging是作用于方差的集成手段,所以Bagging方法擅長處理方差大、偏差低的模型,而不擅長處理方差小、偏差大的模型,對于任意算法而言,方差與偏差往往不可兼得,這也很容易理解——想要在當前數據集上獲得低偏差,必然意味著需要重點學習當前數據集上的規律,就不可避免地會忽略未知數據集上的規律,因此在不同數據集上進行測試時,模型結果的方差往往很大。
五、Bagging方法可以集成決策樹之外的算法嗎?
強大又復雜的算法如決策樹、支持向量機等,往往學習能力較強,傾向于表現為偏差低、方差高,這些算法就比較適合于Bagging。而線性回歸、邏輯回歸、KNN等復雜度較低的算法,學習能力較弱但表現穩定,因此傾向于表現為偏差高,方差低,就不太適合被用于Bagging。
六、怎樣增強Bagging中弱評估器的獨立性?
正如前述,在實際使用數據進行訓練時,我們很難讓Bagging中的弱評估器完全相互獨立,主要是因為:
(1)訓練的數據一致
(2)弱評估器構建的規則一致
導致最終建立的弱評估器都大同小異,Bagging的效力無法完整發揮出來。為了弱評估器構建規則一致的問題,有了Averaging和Voting這樣的模型融合方法:基本來看,就是使用Bagging的邏輯來融合數個不同算法的結果。而當我們不使用模型融合時,我們可以使用“隨機性”來削弱弱分類器之間的聯系、增強獨立性、提升隨機森林的效果。
在隨機森林中,天生就存在有放回隨機抽取樣本建樹的機制,因此才會有bootstrap、max_samples等參數,才會有袋外數據、袋外評估指標oob_score等屬性,意在使用不同的數據建立弱評估器。除了有放回隨機抽樣之外,還可以使用max_features隨機抽樣特征進行分枝,加大弱評估器之間的區別。
正因為存在不同的隨機的方式,Bagging集成方法下才有了多種不同的算法。
七、除了隨機森林,你還知道其他Bagging算法嗎?
Bagging方法的原理簡單,因此Bagging算法之間的不同主要體現在隨機性的不同上。在上世紀90年代,對樣本抽樣的bagging、對特征抽樣的bagging、對樣本和特征都抽樣的bagging都有不同的名字,不過今天,所有這些算法都被認為是裝袋法或裝袋法的延展。在sklearn當中,除了隨機森林之外還提供另一個bagging算法:極端隨機樹。極端隨機樹是一種比隨機森林更隨機、對方差降低更多的算法,我們可以通過以下兩個類來實現它:
- sklearn.ensemble.ExtraTreesClassifier
- sklearn.ensemble.ExtraTreesRegressor
與隨機森林一樣,極端隨機樹在建樹時會隨機挑選特征,但不同的是,隨機森林會將隨機挑選出的特征上每個節點都進行完整、精致的不純度計算,然后挑選出最優節點,而極端隨機樹則會隨機選擇數個節點進行不純度計算,然后選出這些節點中不純度下降最多的節點。這樣生長出的樹比隨機森林中的樹更不容易過擬合,同時獨立性更強,因此極端隨機樹可以更大程度地降低方差。
當然了,這種手段往往也會帶來偏差的急劇下降,因此極端隨機樹是只適用于方差過大、非常不穩定的數據的。除非特殊情況,我們不會考慮使用極端隨機樹。
八、即使是單顆樹,為什么它的feature_importances_也會有一定的隨機性?
這種隨機性源于CART樹對切分點的選取。根據評估器的說明,哪怕是max_features=n_features(即每次訓練帶入全部特征、而max_features<n_features時則每次切分帶入部分特征、此時隨機性更強),在進行決策樹生長時也經常遇到擁有相同效力的備選切分點(即基于基尼系數的信息增益相同),此時只能隨機挑選其中一個備選點進行切分,而選取哪個切分點,就必然給對應的特征累計更多的重要性。這也就是為何相同的數據在多次建模時特征重要性會各不相同的原因。
記下來學習:集成學習(二)Boosting-CSDN博客