在這兩個條件前提下,對於第一個問題,有兩種解決思路。一種是使用不一樣類別的算法來構建個體學習器,例如對於同一個任務分別使用決策樹算法、支持向量機、神經網絡等不一樣算法來構建學習器。另外一種思路是全部個體學習器都使用同一種算法進行構建,這種思路是目前集成學習算法的主流。在全部個體學習器都使用同種算法構建時,如何保證學習器之間的差別性呢?有兩種方案:html5
- 每次訓練個體學習器時,對原始數據集進行抽樣得到不一樣數據集做爲當前訓練集,每個訓練樣本在抽樣訓練集中能夠屢次或不出現,通過$T$次訓練後,可獲得$T$個不一樣的沒有相互依賴的個體學習器學習器。Bagging、隨機森林就是這種方案的表明。
- 經過更新權重的方式不斷地使用一個弱學習器彌補前一個弱學習器的「不足」的過程,來串行地構造一個較強的學習器,這個強學習器可以使目標函數值足夠小。這一方案的表明是Boosting系列的算法,包括Adaboost、GBDT、XGBOOST等
在本文中,咱們先對第一種方案的兩種算法——Bagging和隨機森林進行介紹,在後續的博文中,再對Adaboost、GBDT等算法進行分析。java
3 Bagging¶
Bagging是並行式集成學習方法的最典型表明,算法名稱來源於Bootstrap aggregating的簡寫,又稱裝袋算法,這種算法直接採用自助採樣法得到$T$個各不相同的數據集,分別使用這$T$個數據集進行訓練可得到$T$個個體學習器,再將這些學習器組合起來共同完成分類或者回歸任務。當完成分類任務時,採用簡單投票法對$T$個體學習器結果進行組合後輸出;當染成迴歸任務時,採用簡單平均法對$T$個個體學習器學習結果進行組合輸出。node

3.1 自助採樣法¶
自助採樣法(Bootstrap sampling是一種從給定原始數據集中有放回的均勻抽樣,也就是說,每當選中一個樣本,它等可能地被再次選中並被再次添加到訓練集中。對於給定包含$m$個樣本的原始數據集$D$,進行自助採樣得到$D'$,具體操做方式:每次採樣時,從幾何$D$中隨機抽取一個樣本拷貝一份到集合$D'$中,而後將樣本放回集合$D$中,是的該羊被後續採樣中仍有可能被採集到;重複這一步驟$m$次後,就能夠得到一樣包含$m$個樣本的集合$D'$,集合$D'$就是自助採樣的最終結果。能夠想象,集合$D$中的樣本有一部分會在集合$D'$中出現重複出現,而有些樣本卻一次都不出現。在$m$次抽樣中,某個樣本從未被抽到的機率爲${(1 - \frac{1}{m})^m}$,當集合$D$樣本足夠多時有: $$\mathop {\lim }\limits_{m \to \infty } {(1 - \frac{1}{m})^m} = \frac{1}{e} \approx 0.368$$ 也就是說,原始集合$D$中有36.8%的樣本不包含在經過自助採樣法得到的集合$D'$中。在Bagging中,未被採集到的36.8%的樣本能夠用做測試集對個體學習器性能進行評估,當個體學習器使用決策樹算法構建時,這部分用本能夠用來輔助樹剪枝;使用神經網絡構建個體學習器時,能夠用來防止過擬合。python
3.2 結合策略¶
假設共有$T$個個體學習器,以$\{ {h_1},{h_2}, \cdots ,{h_T}\} $表示,其中樣本$x$經$h_i$後的輸出值爲$h_i(x)$。對於結合$T$個個體學習器輸出值,主要有一下幾種策略:jquery
(1)平均法 平均法經常使用於迴歸類任務的數值型輸出,包括簡單平均法、加權平均法等。linux
- 簡單平均法 $$H(x) = \frac{1}{T}\sum\limits_{i = 1}^T {{h_i}(x)} $$
- 加權平均法 $$H(x) = \sum\limits_{i = 1}^T {{w_i}{h_i}(x)} $$ 式中,$w_i$是個體學習器$h_i$的權重,一般要求${w_i} \geqslant 0$且$\sum\limits_{i = 1}^T {{w_i}} = 1$。至於$w_i$的具體值,能夠根據$h_i$的具體表現來肯定,$h_i$準確率越高,$w_i$越大。
對於兩種平均法的選擇上,當個體學習器性能相差較大時,選用加權平均法;當各個體學習器性能相近時,使用簡單加權平均法。
(2)投票法
投票法更多用於做爲分類任務的集成學習的結合策略。android
- 相對多數投票法 也能夠認爲是多數決策法,即預測結果中票數最高的分類類別。若是不止一個類別得到最高票,則隨機選擇一個做爲最終類別。
- 絕對多數投票法 不光要求得到票數最高,並且要求票數過半,不然決絕輸出。
- 加權投票法 與加權平均法相似,每一個個體學習器的分類票數要乘以一個權重,最終將各個類別的加權票數求和,最大的值對應的類別爲最終類別。
(3)學習法
學習法是一種比平均法和投票法更爲強大複雜的結合策略,學習法以全部個體學習器的輸出做爲一個數據集,額外使用一個學習器對該數據及進行學習,而後輸出最終的結果。Stacking方法是學習法的一個經典表明,目前大多數應用中所說的學習法都是指Stacking方法。甚至由於Stacking方法的特殊性和複雜性,不少資料中將Stacking方法當作是與Bagging和Boosting同樣的一類集成學習算法。
Stacking方法中將以前提到的全部個體學習器稱爲初級學習器,將用於結合的學習器稱爲次級學習器。Stacking方法先從原始數據集訓練處初級學習器,而後「生成」一個新的數據集用於訓練次級學習器。在新的數據集中,初級學習器的輸出被當作樣本輸出特徵,而初始樣本的類別標籤人被當作新數據及的類別標籤。(注:關於Stacking能夠參考這篇博客)