一、集成學習概述
集成學習一般是,先產生一組個體學習器,這些個體學習器可以由同一個學習算法或不同的學習算法從訓練數據中產生,再通過某種結合策略將它們結合起來。這裏,我們可以看到,個體學習器的產生有兩種:
- 集成是同質的,即個體學習器的產生是由同一個學習算法得到的,比如只包括決策樹或只包括神經網絡等
- 集成是異質的,即個體學習器的產生是由不同的學習算法得到的,比如同時包括決策樹和神經網絡。
根據個體學習器之間的關聯關係,集成學習可以分爲以下兩種類型:
- 序列集成方法:參與訓練的個體學習器是按順序生成的,這些個體學習器之間是相互依賴的。通過給上一個學習器誤分類的樣本較高的權重,使得當前的個體學習器重點訓練這些誤分類的樣本。依次迭代,從而整體上提高分類的準確率。比如,Boosting,代表算法爲Adaboost算法。
- 並行集成方法:參與訓練的學習器是並行生成的。其基本動機是利用個體學習器之間的獨立性,通過平均化來減少誤差。一般而言,這些獨立的個體學習器可以是同質的,也可以是異質的。比如,Bagging與隨機森林 Random Forest。
集成學習方法在不同規模的數據集上的處理方式:
- 大規模數據集:劃分爲多個小數據集,學習多個模型進行組合。
- 小規模數據集:利用Bootstrap方法,有放回的隨機抽樣,得到多個數據集(和原數據集的規模一致),分別訓練多個模型進行組合。
集成學習將多個個體學習器進行組合,常可獲得比單一學習器顯著優越的泛化性能。這些學習器一般爲弱學習器,弱學習器一般是指泛化性能略高於隨機猜測的學習器,比如,二分類問題上精度略高於50%的學習器。
集成學習要想到達好的效果,弱學習器需要滿足好而不同。好表現在弱學習器的學習效果不能太差,不同表現在弱學習器之間是有差異的,要有多樣性。
二、Boosting
Boosting是一族可將弱學習器提升爲強學習器的算法。前面我們講過,它屬於串行生成的序列化方法,個體學習器之間是強依賴關係。這族算法的工作機制類似:
首先從初始訓練集訓練出一個基學習器,再根據基學習器的表現對訓練樣本的分佈進行調整,使得先前基學習器誤分類的樣本在後續會受到更多的關注,然後基於調整後的樣本分佈來訓練下一個基學習器,如此重複進行,直至基學習器數目達到事先指定的值T,最終將這T個基學習器進行加權求和。
—《機器學習》周志華
我們結合這個圖來說明Boosting算法,首先利用初始訓練集和初始權重訓練出第一個弱分類器 ,可以看到,樣本集中有兩個被誤分類,接下來,將誤分類的樣本的權重提高,使得其在下一次分類中得到更多的關注,然後基於調整的樣本權重的數據集訓練出新的弱分類器 ,這一次,我們可以看到,之前被誤分類的樣本被正確的分類,依次重複進行,直到達到預定的分類器的個數M,這裏M=4。
每一個弱分類器都有自己的權重 ,就是我們訓練出來的分類器,共有個,爲加權求和後的分類器。
Boosting算法裏主要包括Adaboost算法和提升樹(Boosting Tree)算法。提升樹算法裏面又包括了GBDT梯度提升樹(Gradient Boosting Decision Tree)算法和XGBoost極端梯度提升(Extreme Gradient Boosting)算法。
三、Bagging 與隨機森林
Bagging
Bagging全稱爲Bootstrap Aggregating(裝袋)。==它出現的意義?==我們之前說了,要得到泛化性能強的集成,需要個體分類器好而不同。這裏強調不同,也就是說個體分類器要有差異。給定一個數據集,一種做法是對數據集進行採樣,產生若干個不同的子集,再從每個數據子集訓練出一個基學習器。但是這樣可能會有一個問題,每個子集只是完整數據集的一部分,所以訓練出來的基學習器只能反映部分樣本,造成基學習器性能不佳。
爲了解決這個問題,Bagging提出了Bootstrap的方法,也叫自助採樣法,即在訓練集中進行有放回的隨機抽樣。整個Bagging流程如下:
1.從原始數據集中抽取訓練集。給定包含m個樣本的原始數據集,我們進行有放回的隨機抽樣,抽取m個樣本。這一過程重複K次,因爲有K個基學習器。同時這m個樣本中可能會有重複的樣本。這正是Bootstrap的巧妙之處。自助採樣法給Bagging帶來的好處就是:每個基學習器使用的數據只佔了原數據集的63.2%,剩下的36.8%的樣本可以用作驗證集來對泛化能力進行“包外估計”。那麼這裏的63.2%怎麼得出來的呢?
假設我們有 個樣本,進行有放回的隨機抽樣,那麼每個樣本不被抽到的概率爲,則每個樣本都不被抽到的概率爲 。當樣本是容量很大,,有
因此,每個樣本被抽到的概率就爲,
2.每個數據集對應一個模型,K個數據集對應K個基學習器。
3.對得到的模型進行組合,如果是分類問題,則採用投票法,比如絕對多數投票法和相對多數投票法,來得到最終的分類結果;如果是迴歸問題,則可以採用平均法。
隨機森林
隨機森林(Random Forest,RF) 是Bagging的一個擴展變體。隨機森林的弱學習器都是決策樹,同時它在Bagging隨機選擇數據集的基礎之上,加入隨機屬性選擇:
- 傳統的決策樹在選擇劃分屬性時,是在當前結點的屬性集合(假設有 個)中選擇一個最優屬性。而在RF中,對於基決策樹的每個結點,先從該結點的屬性集合中隨機選擇一個包含 個屬性的集合,然後再從這個屬性集合中選擇一個最優屬性。其中,參數 控制了隨機性的引入程度。當 =d 時,則基決策樹的構建和傳統的決策樹相同;當 時,則是隨機選擇一個屬性進行劃分。一般而言, 較爲合適。
Bagging中基學習器的多樣性主要是靠Bootstrap,數據集的隨機擾動來實現的,而隨機森林RF不僅能夠實現數據集的隨機擾動,隨機屬性選擇增加了屬性擾動,這使得最終集成的泛化性能可以通過個體學習器之間差異性的增加而得到進一步的提升。
四、結合策略
爲什麼要使用學習器結合的策略?
- 從統計方面來看,學習任務的假設空間很大,可能會有多個假設在訓練集上達到同樣的效果,此時若使用單學習器可能會因爲誤選而導致泛化性能不佳,結合多個學習器就會減少這一風險;
- 從計算方面來看,學習算法有可能陷入局部極小,有些局部極小可能會導致泛化性能極差,而通過多次運行之後結合,可降低陷入糟糕局部極小的風險;
- 從表示來看,某些學習任務的真實假設可能不在當前學習算法所考慮的假設空間內,此時若使用單學習器則肯定無效,而通過結合多個學習器,由於相應的假設空間有所擴大,有可能學到更好的近似。
假設集成包含 個基學習器 ,其中 在 上的輸出爲 。
一下有三種比較常見的集合策略:
1.平均法
對數值型的迴歸預測問題,一般使用平均法,即將多個基學習器的輸出結果求平均值,然後將這個平均值作爲最後的預測結果輸出。
簡單平均法
加權平均法
其中,爲基學習器 的權重,通常要求 ,且有。
2.投票法
對分類任務來說,學習器 將從分類標記集合(即分類標記的可能取值,這裏一共有個)中預測一個標記,最常見的策略是使用投票法。假設 在樣本 上的預測輸出爲一個 維向量,其中, 表示 在輸入爲 下,類別標記爲 的輸出。
絕對多數投票法
即某標記的投票數過半,則預測爲該標記,否則,拒絕該標記。
相對多數投票法
即預測票數最多的那個類標記爲最終的類別輸出,若有兩個相同,則隨機選擇一個。
加權投票法
其中,爲基學習器 的權重,通常要求 ,且有。
3.學習法
上述兩種方法對弱學習器的結果進行求平均或投票,結果的誤差可能較大。這裏介紹一種更爲強大的組合策略,就是學習法,特別是在數據量較大的情況下。學習法中的一個典型代表就是 Stacking。
Stacking 就是先從初始的數據集中訓練初級學習器,然後將多個初級學習器的輸出結果作爲新的特徵來訓練次級學習器,如果存在下一層學習器的話,繼續將當前的學習器輸出作爲下一層的學習器的輸入特徵。最後一層學習器的輸出結果即爲預測結果。
舉個比較現實的例子:你千辛萬苦完成了一篇論文,這篇論文被你投到了某一個C刊上。期刊收到你的論文後,交給了三個同行評審,這三個同行評審就相當於初級學習器,他們在看完你的論文後,給出了意見,這些審稿人意見就是初級學習器的輸出,然後這些意見被反饋給了主編,這裏的主編相當於次級學習器,他結合審稿人意見,最終給出決定,這個決定就是次級學習器的結果。
我們按照這個圖,來理解 Stacking 的操作流程:
假設初始訓練集 ,測試集
- 首先對訓練集train_set進行交叉驗證,這裏用5-Fold來說明。5-Fold處理數據集,訓練集分爲無交集的五個子集,根據每個子集被選爲測試集的可能,有五種情況;
- 每個初級學習器在四個子訓練集train_data上訓練,在一個子測試集test_data上測試,每個學習器的測試結果爲 ,最終5個學習器在子測試集上結果作爲次級學習器的輸入
- 同時,每個初級學習器要在大測試集 上測試,測試結果爲 ,我們對5列數據集求均值 得到次級學習器的測試集
五、Boosting和Bagging的區別
Bagging方法可以認爲是並行的集成方式,它能夠並行的生成相對獨立的基模型。Bagging集成後的模型的偏差與基模型近似,但是由於存在多個相對獨立的基模型,所以集成後的模型的方差會比單個基模型要小。一句話,Bagging方法通過降低模型的方差,來提高模型的泛化能力。
Boosting方法是串行的集成方式,每一個當前的基模型依賴於前一個基模型,Boosting集成後的模型的方差與基模型近似,但是由於每一個基模型都在糾正前一個模型的結果,所以集成後的模型的偏差會降低。一句話,Boosting方法通過降低模型的偏差,來提高模型的泛化能力。
參考資料:
1.機器學習算法(12)之集成學習之模型融合:
https://blog.csdn.net/qq_20412595/article/details/82561685
2.CSDN的Markdown編輯器如何添加空格:https://blog.csdn.net/xiaotao_1/article/details/78418281
3.常用數學符號的 LaTeX 表示方法:http://mohu.org/info/symbols/symbols.htm
4.集成學習之stacking詳解:https://blog.csdn.net/htbeker/article/details/85292037
5.【機器學習】集成學習之stacking:https://blog.csdn.net/qq_32742009/article/details/81366768