前言
如果你能找到這里,真是我的幸運~這里是藍白絳的學習筆記,本集合主要針對《百面機器學習——算法工程師帶你去面試》這本書。主要記錄我認為重要的知識點,希望對大家有幫助。
第十二章 集成學習
1、集成學習的種類
- 集成學習是一大類模型融合策略和方法的統稱,其中包含多種集成學習的思想。
- Boosting:Boosting方法訓練基分類器時采用串行的方式,各個基分類器之間有依賴。其基本思想是將基分類器層層疊加,每一層在訓練的時候,對前一層基分類器分錯的樣本,給予更高的權重。測試時,根據各層分類器的結果的加權得到最終結果。
- Bagging:Bagging方法在訓練過程中,各基分類器之間無強依賴,可以進行并行訓練。為了讓基分類器之間相互獨立,將訓練集分為若干子集。由于個體之間存在差異性,最終做出的判斷不會完全一致。在最終做決策時,每個個體單獨作出判斷,再通過投票的方式作出最后的集體決策。其中很著名的算法是基于決策樹基分類器的隨機森林。
- 從消除基分類器的偏差和方差的角度來理解Boosting和Bagging方法的差異。基分類器的錯誤率要大于集成分類器,基分類器的錯誤是偏差和方差兩種錯誤之和。
- 偏差主要是由于分類器的表達能力有限導致的系統性誤差,表現在訓練誤差不收斂。Boosting方法通過逐步聚焦于基分類器分錯的樣本,減小集成分類器的偏差。
- 方差是由于分類器對于樣本分布過于敏感,導致在訓練樣本數較少時,產生過擬合。Bagging方法則是采取分而治之的策略,通過對訓練樣本多次采樣,訓練多個不同模型進行綜合,來減小集成分類器的方差。用簡單多數投票方法來集成結果,超過半數基分類器出錯的概率會隨著基分類器的數量增加而下降。
2、集成學習的步驟和例子
- 集成學習一般可以分為以下3個步驟:
(1) 找到誤差相互獨立的基分類器。
(2) 訓練基分類器。
(3) 合并基分類器的結果。
第(3)步合并基分類器的方法有voting和stacking兩種。stacking是用串行的方式,把前一個基分類器的結果輸出到下一個分類器,將所有基分類器的輸出結果相加作為最終的輸出(或用更復雜的方法,將各基分類器的輸出作為特征,用邏輯回歸作為融合模型進行最后的結果預測)。 - Adaboost采取了Boosting的思想,對分類正確的樣本降低了權重,對分類錯誤的樣本升高或者保持權重不變。在最后進行模型融合的過程中,也根據錯誤率對基分類器進行加權融合。
另一個非常流行的是梯度提升決策樹,思想是每一棵樹學的是之前所有樹結論和的殘差,這個殘差是一個加預測值后能得真實值的累加量。比如預測年齡,真實年齡是25歲,第一棵樹預測22歲,則第二棵樹將年齡設為3歲去學習。使用殘差繼續學習,就是GBDT中的Gradient Boosted所表達的意思。
3、基分類器
- 最常用的基分類器是決策樹,主要有以下3個方面的原因:
(1) 決策樹可以較為方便地將樣本的權重整合到訓練過程中,而不需要使用過采樣的方法來調整樣本權重。
(2) 決策樹的表達能力和泛化能力,可以通過調節樹的層數來做折中。
(3) 數據樣本的擾動對于決策樹的影響較大,因此不同子樣本集合生成的決策樹基分類器隨機性較大,這樣的“不穩定學習器”更適合作為基分類器。此外,在決策樹節點分裂的時候,隨機地選擇一個特征子集,從中找出最優分類屬性,很好地引入了隨機性。 - 除了決策樹,神經網絡模型也適合作為基分類器,主要由于神經網絡模型也比較“不穩定”,而且還可以通過調整神經元數量、連接方式、網絡層數、初始權值等方式引入隨機性。
- Bagging的主要好處是集成后的分類器的方差,比基分類器的方差小,所采用的基分類器最好是本身對樣本分布較為敏感的(即所謂不穩定的分類器),這樣Bagging才能有用武之地。
線性分類器或者K近鄰都是較為穩定的分類器,本身方差就不大,所以用他們做基分類器Bagging并不能在原有基分類器的基礎上獲得更好的表現,甚至可能因為Bagging的采樣,導致它們在訓練中更難收斂,從而增大了集成分類器的偏差。
4、偏差與方差
- 有監督學習中,模型的泛化誤差來源于兩個方面:偏差和方差。
-
偏差:所有采樣得到的大小為
的訓練數據集訓練出的所有模型的輸出的平均值和真實模型輸出的偏差。偏差通常是由于我們對學習算法作出了錯誤的假設所導致的,比如真實模型是某個二次函數,但我們假設模型是一次函數。由偏差帶來的誤差通常在訓練誤差上就能體現出來。
-
方差:所有采樣得到的大小為
的訓練數據集訓練出的所有模型的輸出的方差。方差通常是由于模型的復雜度相對于訓練樣本
過高導致的,比如一共有100個訓練樣本,而我們假設模型是階數不大于200的多項式函數。由方差帶來的誤差通常體現在測試誤差相對于訓練誤差的增量上。
12-4 偏差與方差示意圖
- 從減小方差和偏差的角度解釋Boosting和Bagging的原理:
- Bagging能夠提高弱分類器性能的原因是降低了方差。
- Boosting能夠提高弱分類器性能的原因是降低了偏差。
Bagging:Bagging是Bootstrap Aggregating的簡稱,意思就是再抽樣,然后在每個樣本上訓練出來的模型取平均。假設有個隨機變量,方差為
,兩兩變量之間的相關性為
,則
個隨機變量的均值
的方差為
。在隨機變量完全獨立的情況下(
),
個隨機變量的方差為
,也就是說方差減小到了原來的
。當然模型之間不可能完全獨立。為了追求模型的獨立性,諸多Bagging的方法做了不同的改進。比如在隨機森林算法中,每次選取節點分裂屬性時,會隨機抽取一個屬性子集,而不是從所有屬性中選取最優屬性,就是為了避免弱分類器之間過強的相關性。
Boosting:Boosting訓練好弱分類器后,我們計算弱分類器的錯誤或殘差,作為下一個分類器的輸入。這個過程就是在不斷減小損失函數,使模型不斷逼近“靶心”,即使模型偏差不斷降低。(Boosting不會顯著降低方差,因為Boosting的各弱分類器之間是強相關的,缺乏獨立性,所以不會對降低方差有作用)
-
泛化誤差、偏差、方差和模型復雜度的關系:
如下圖所示。對于給定的學習任務和訓練數據集,我們需要對模型的復雜度做合理的假設。如果模型復雜度過低,雖然方差很小,但偏差會很高;如果模型復雜度過高,雖然偏差低,但方差會很高。
12-4 泛化誤差、偏差、方差和模型復雜度
小結
這是本章的第一部分,主要講了Bagging、Boosting的訓練方法,典型的用到Bagging的方法有隨機森林,典型的用到Boosting的方法有Adaboost、梯度提升決策樹。第一部分還從偏差和方差的角度解釋了Bagging和Boosting的原理。之前雖然知道Bagging和Boosting,但是并沒有想過模型的偏差和方差,這一點非常有啟發。
結尾
如果您發現我的文章有任何錯誤,或對我的文章有什么好的建議,請聯系我!如果您喜歡我的文章,請點喜歡~*我是藍白絳,感謝你的閱讀!