1. 程式人生 > >ensemble learning(整合學習)筆記

ensemble learning(整合學習)筆記

ensemble learning概念

通過構建並結合多個學習分類器來完成學習任務.

通常認為將多個分類器結合的學習,比單一分類器的學習要準確的多.要想得到好的整合分類器,一個是基分類器要有一定的準確性,至少不能隨機扔硬幣猜正反還離譜;其次要有多樣性,也就是分類器間有差異性存在,這樣才能保證泛化能力不至於太差.

ensemble learning的分類

依據基分類器的生成方式,將整合學習分為兩大類:

1 基分類器間存在依賴關係,需序列的方式結合,例如Boosting

2 基分類器間不存在強依賴關係,可同時並行化結合的方式,例如random forest和Bagging.

Boosting

先從訓練集中訓練出一個基分類器,利用此分類器進行分類,根據分類結果對訓練樣本的分佈進行調整,對於先前分錯的訓練樣本在後續的分類中享有更多關注,然後對於調整後的訓練樣本,再訓練第二個基分類器;就這樣迭代重複進行,直至滿足某個截止條件.此刻你一定想到了Adaboost.沒錯,它是Boosting的典型代表.

思想:本著先易後難的原則,做事情也是如果,剛畢業我們會寫一寫比較簡答的小程式,把關注點放在比較難做的事情上,後面難點關注的多了,慢慢的就不出錯了~~原來數學和生活聯絡的這麼緊密.

演算法優點:

應用於分類問題。 Adaboost分類器可以排除一些不必要的訓練資料特徵,並將關鍵放在關鍵的訓練資料上面。

過程分析

Adaboost,一開始就提到是一種迭代演算法,也是一個簡單的弱分類演算法提升過程,怎樣個提升法呢?由於單單依靠弱分類演算法還難以保證分類結果的準確性,因而Adaboost的提升過程就是通過不斷的訓練,提高對資料的分類能力。詳細流程如下:

1. 先通過對N個訓練樣本(預先給定)的學習(Offline Learning)得到第一個弱分類器;(總得先有第一者產生吧~)

2. 將分錯的樣本(怎麼知道樣本被分錯了呢?)和其它的新資料一起(錯了就要和待稽核的一起,oh~),構成一個新的N個的訓練樣本,重複第一步,即通過對這個樣本的學習得到第二個弱分類器(體現迭代);

3. 將1和2都分錯了的樣本(其實就是2裡分錯的樣本,因為1裡錯的樣本已經全部給到2了),加上其它的新樣本構成另一個新的N個的訓練樣本,通過對這個樣本的學習得到第三個弱分類器;

4. 最終,經過提升的強分類器,即某個資料被分為哪一類要通過多數表決....(傳說中的投票==)

存在的問題及改進方法

對於boosting演算法,存在兩個問題:

1. 如何調整訓練集,使得在訓練集上訓練的弱分類器得以進行;換句話說,就是,當每次上層N個訓練樣本訓練結束之後,如何調整訓練集,將分錯的樣本與新資料結合起來,構成新的N個訓練樣本,供下一層學習。

2. 如何將訓練得到的各個弱分類器聯合起來形成強分類器;換句話說,要紀錄每次得到的弱分類器,最後將每個樣本在每個分類器中得到的資料,進行比較,投票...多數表決通過!

針對以上兩個問題,Adaboost演算法進行了調整:(引入了權重的概念!)

1. 使用加權後選取的訓練資料代替隨機選取的訓練樣本,這樣,將訓練的焦點集中在比較難分的訓練資料樣本上;

2. 將弱分類器聯合起來,使用加權的投票機制代替平均投票機制。讓分類效果好的弱分類器具有較大的權重,而分類效果差的分類器具有較小的權重。道理不言而喻!

關於權重的理解:

Adaboost演算法中不同的訓練集是通過調整每個樣本對應的權重來實現的。開始時,每個樣本對應的權重是相同的,即其中n為樣本個數,在此樣本分佈下訓練出一弱分類器。對於分類錯誤的樣本,加大其對應的權重;而對於分類正確的樣本,降低其權重,這樣,分錯的樣本就被突顯出來(權重大的),從而得到一個新的樣本分佈。

在新的樣本分佈下,再次對樣本進行訓練,又得到一個弱分類器,又加大分類錯誤的樣本的權重。

依次類推,經過T次迴圈,得到T個弱分類器,把這T個弱分類器按一定的權重疊加(boost)起來,得到最終想要的強分類器!

Adaboost演算法的具體步驟

1. 給定訓練樣本集S,其中X和Y分別對應於正例樣本和負例樣本(即兩個分類結果);T為訓練的最大迴圈次數;

2. 初始化樣本權重為1/n,即為訓練樣本的初始概率分佈(即離散型均勻分佈);

3. 第一次迭代:

(1)訓練樣本的概率分佈相當下,訓練弱分類器;

(2)計算弱分類器的錯誤率(怎麼計算呢?錯誤率 = 分類出錯的樣本個數 / 總的樣本個數);

(3)選取合適閥值,使得誤差最小;

(4)更新樣本權重(新的樣本權重替代舊的);

經過T次迴圈後,得到T個弱分類器,按更新的權重疊加,最終得到強分類器。

步驟總結:上述的演算法步驟迭代了T次的主迴圈,每一次迴圈根據當前的權重分佈對樣本x定一個分佈P,然後對這個分佈下的所有樣本使用弱學習演算法得到一個弱分類器。

每一次迭代,都要對權重進行更新!更新的規則就是:減小弱分類器分類效果較好的資料的概率,增大弱分類器分類效果較差的資料的概率,最終的分類器是一個所有弱分類器的加權平均!

Bagging and Random forest

Bagging 是並行整合學習的代表.基於有放回的取樣,取樣出T個含m個樣本的取樣集,有放回的取樣使得樣本在取樣集中有的多次出現,有的從未出現,這樣既保證了訓練資料的不同,使得基分類器有差異,但又不能差太多,否則若每個子集完全不同,則每個分類器只用到了一小部分訓練資料,不足以進行有效學習.

Bagging的優勢:

高效,而且可以不經修改地適用於多分類任務,迴歸任務.;此外由於它只用了63.2%的樣本,剩下的部分可用來測試,便於交叉驗證,提升泛化效能;

Random Forest

隨機森林在構建Bagging整合的基礎上,在決策樹訓練時引入了隨機屬性選擇.即,傳統決策樹在劃分屬性時在當前節點的屬性中選擇一個最優的屬性,而在隨機森林中,每個決策樹的每個節點,會先隨機選擇一個包含k個屬性的子集,然後再從這k個屬性中選擇一個最優屬性用於劃分;

優勢:訓練效率高於bagging,因為Bagging用的是"確定性"的決策樹,要對所有節點的屬性進行考察,而隨機森林用的是隨機性決策樹,只需要考察一個屬性子集~~,一個是整體,一個是部分,當然效率高些~~

隨機森林改進點:

  • 森林中任意兩棵樹的相關性:相關性越大,錯誤率越大;
  • 森林中每棵樹的分類能力:每棵樹的分類能力越強,整個森林的錯誤率越低。

整合策略

為什麼要整合或者結合?

1.提升泛華能力

2.降低陷入區域性最小值的風險

3.學習的更好

策略一

平均法:將所有基分類器的輸出加權求平均;需要注意的是加權平均的權重一般是從訓練資料中獲得.

策略二

投票法:所有的基分類器從類別集合中預測出一個標記,若某標記得票超過閾值,則預測為該標記,這是絕對多數投票法;

若預測為得票最多的標記,這是相對多數投票法.


自己看過的比較好的資源

隨機森林:http://www.cnblogs.com/maybe2030/p/4585705.html

http://www.cnblogs.com/hqqxyy/articles/3753026.html  這個也不錯,標記下