1. 程式人生 > >整合學習之Adaboost演算法原理小結

整合學習之Adaboost演算法原理小結

    在整合學習原理小結中,我們講到了整合學習按照個體學習器之間是否存在依賴關係可以分為兩類,第一個是個體學習器之間存在強依賴關係,另一類是個體學習器之間不存在強依賴關係。前者的代表演算法就是是boosting系列演算法。在boosting系列演算法中, Adaboost是最著名的演算法之一。Adaboost既可以用作分類,也可以用作迴歸。本文就對Adaboost演算法做一個總結。

1. 回顧boosting演算法的基本原理

    在整合學習原理小結中,我們已經講到了boosting算法系列的基本思想,如下圖:

    從圖中可以看出,Boosting演算法的工作機制是首先從訓練集用初始權重訓練出一個弱學習器1,根據弱學習的學習誤差率表現來更新訓練樣本的權重,使得之前弱學習器1學習誤差率高的訓練樣本點的權重變高,使得這些誤差率高的點在後面的弱學習器2中得到更多的重視。然後基於調整權重後的訓練集來訓練弱學習器2.,如此重複進行,直到弱學習器數達到事先指定的數目T,最終將這T個弱學習器通過集合策略進行整合,得到最終的強學習器。  

    不過有幾個具體的問題Boosting演算法沒有詳細說明。

    1)如何計算學習誤差率e?

    2) 如何得到弱學習器權重係數$\alpha$?

    3)如何更新樣本權重D?

    4) 使用何種結合策略?

    只要是boosting大家族的演算法,都要解決這4個問題。那麼Adaboost是怎麼解決的呢?

2. Adaboost演算法的基本思路

    我們這裡講解Adaboost是如何解決上一節這4個問題的。

    假設我們的訓練集樣本是$$T=\{(x_,y_1),(x_2,y_2), ...(x_m,y_m)\}$$

    訓練集的在第k個弱學習器的輸出權重為$$D(k) = (w_{k1}, w_{k2}, ...w_{km}) ;\;\; w_{1i}=\frac{1}{m};\;\; i =1,2...m$$

    首先我們看看Adaboost的分類問題。

    分類問題的誤差率很好理解和計算。由於多元分類是二元分類的推廣,這裡假設我們是二元分類問題,輸出為{-1,1},則第k個弱分類器$G_k(x)$在訓練集上的加權誤差率為$$e_k = P(G_k(x_i) \neq y_i) = \sum\limits_{i=1}^{m}w_{ki}I(G_k(x_i) \neq y_i)$$

    接著我們看弱學習器權重係數,對於二元分類問題,第k個弱分類器$G_k(x)$的權重係數為$$\alpha_k = \frac{1}{2}log\frac{1-e_k}{e_k}$$

    為什麼這樣計算弱學習器權重係數?從上式可以看出,如果分類誤差率$e_k$越大,則對應的弱分類器權重係數$\alpha_k$越小。也就是說,誤差率小的弱分類器權重係數越大。具體為什麼採用這個權重係數公式,我們在講Adaboost的損失函式優化時再講。

    第三個問題,更新更新樣本權重D。假設第k個弱分類器的樣本集權重係數為$D(k) = (w_{k1}, w_{k2}, ...w_{km})$,則對應的第k+1個弱分類器的樣本集權重係數為$$w_{k+1,i} = \frac{w_{ki}}{Z_K}exp(-\alpha_ky_iG_k(x_i))$$

    這裡$Z_k$是規範化因子$$Z_k = \sum\limits_{i=1}^{m}w_{ki}exp(-\alpha_ky_iG_k(x_i))$$

    從$w_{k+1,i}$計算公式可以看出,如果第i個樣本分類錯誤,則$y_iG_k(x_i) < 0$,導致樣本的權重在第k+1個弱分類器中增大,如果分類正確,則權重在第k+1個弱分類器中減少.具體為什麼採用樣本權重更新公式,我們在講Adaboost的損失函式優化時再講。

    最後一個問題是集合策略。Adaboost分類採用的是加權表決法,最終的強分類器為$$f(x) = sign(\sum\limits_{k=1}^{K}\alpha_kG_k(x))$$

    接著我們看看Adaboost的迴歸問題。由於Adaboost的迴歸問題有很多變種,這裡我們以Adaboost R2演算法為準。

    我們先看看回歸問題的誤差率的問題,對於第k個弱學習器,計算他在訓練集上的最大誤差$$E_k= max|y_i - G_k(x_i)|\;i=1,2...m$$

    然後計算每個樣本的相對誤差$$e_{ki}= \frac{|y_i - G_k(x_i)|}{E_k}$$

    這裡是誤差損失為線性時的情況,如果我們用平方誤差,則$e_{ki}= \frac{(y_i - G_k(x_i))^2}{E_k^2}$,如果我們用的是指數誤差,則$e_{ki}= 1 - exp(\frac{-y_i + G_k(x_i))}{E_k})$

    最終得到第k個弱學習器的 誤差率$$e_k =  \sum\limits_{i=1}^{m}w_{ki}e_{ki}$$

    我們再來看看如何得到弱學習器權重係數$\alpha$。這裡有:$$\alpha_k =\frac{e_k}{1-e_k}$$

    對於更新更新樣本權重D,第k+1個弱學習器的樣本集權重係數為$$w_{k+1,i} = \frac{w_{ki}}{Z_k}\alpha_k^{1-e_{ki}}$$

    這裡$Z_k$是規範化因子$$Z_k = \sum\limits_{i=1}^{m}w_{ki}\alpha_k^{1-e_{ki}}$$

    最後是結合策略,和分類問題稍有不同,採用的是對加權的弱學習器取中位數的方法,最終的強迴歸器為$$f(x) = \sum\limits_{k=1}^{K}(ln\frac{1}{\alpha_k})g(x)$$

      其中,$g(x)$是所有$\alpha_kG_k(x), k=1,2,....K$的中位數。 

3. AdaBoost分類問題的損失函式優化

    剛才上一節我們講到了分類Adaboost的弱學習器權重係數公式和樣本權重更新公式。但是沒有解釋選擇這個公式的原因,讓人覺得是魔法公式一樣。其實它可以從Adaboost的損失函式推匯出來。

    從另一個角度講, Adaboost是模型為加法模型,學習演算法為前向分步學習演算法,損失函式為指數函式的分類問題。

    模型為加法模型好理解,我們的最終的強分類器是若干個弱分類器加權平均而得到的。

    前向分步學習演算法也好理解,我們的演算法是通過一輪輪的弱學習器學習,利用前一個弱學習器的結果來更新後一個弱學習器的訓練集權重。也就是說,第k-1輪的強學習器為$$f_{k-1}(x) = \sum\limits_{i=1}^{k-1}\alpha_iG_{i}(x)$$

    而第k輪的強學習器為$$f_{k}(x) = \sum\limits_{i=1}^{k}\alpha_iG_{i}(x)$$

    上兩式一比較可以得到$$f_{k}(x) = f_{k-1}(x) + \alpha_kG_k(x) $$

    可見強學習器的確是通過前向分步學習演算法一步步而得到的。

    Adaboost損失函式為指數函式,即定義損失函式為$$\underbrace{arg\;min\;}_{\alpha, G} \sum\limits_{i=1}^{m}exp(-y_if_{k}(x))$$

    利用前向分步學習演算法的關係可以得到損失函式為$$(\alpha_k, G_k(x)) = \underbrace{arg\;min\;}_{\alpha, G}\sum\limits_{i=1}^{m}exp[(-y_i) (f_{k-1}(x) + \alpha G(x))]$$

    令$w_{ki}^{’} = exp(-y_if_{k-1}(x))$, 它的值不依賴於$\alpha, G$,因此與最小化無關,僅僅依賴於$f_{k-1}(x)$,隨著每一輪迭代而改變。

    將這個式子帶入損失函式,損失函式轉化為$$(\alpha_k, G_k(x)) = \underbrace{arg\;min\;}_{\alpha, G}\sum\limits_{i=1}^{m}w_{ki}^{’}exp[-y_i\alpha G(x)]$$    

    首先,我們求$G_k(x)$.,可以得到$$G_k(x) = \underbrace{arg\;min\;}_{G}\sum\limits_{i=1}^{m}w_{ki}^{’}I(y_i \neq G(x_i))$$

    將$G_k(x)$帶入損失函式,並對$\alpha$求導,使其等於0,則就得到了$$\alpha_k = \frac{1}{2}log\frac{1-e_k}{e_k}$$

    其中,$e_k$即為我們前面的分類誤差率。$$e_k = \frac{\sum\limits_{i=1}^{m}w_{ki}^{’}I(y_i \neq G(x_i))}{\sum\limits_{i=1}^{m}w_{ki}^{’}} = \sum\limits_{i=1}^{m}w_{ki}I(y_i \neq G(x_i))$$

    最後看樣本權重的更新。利用$f_{k}(x) = f_{k-1}(x) + \alpha_kG_k(x) $和$w_{ki}^{’} = exp(-y_if_{k-1}(x))$,即可得:$$w_{k+1,i}^{’} = w_{ki}^{’}exp[-y_i\alpha_kG_k(x)]$$

    這樣就得到了我們第二節的樣本權重更新公式。

4. AdaBoost二元分類問題演算法流程

    這裡我們對AdaBoost二元分類問題演算法流程做一個總結。

    輸入為樣本集$T=\{(x_,y_1),(x_2,y_2), ...(x_m,y_m)\}$,輸出為{-1, +1},弱分類器演算法, 弱分類器迭代次數K。

    輸出為最終的強分類器$f(x)$

    1) 初始化樣本集權重為$$D(1) = (w_{11}, w_{12}, ...w_{1m}) ;\;\; w_{1i}=\frac{1}{m};\;\; i =1,2...m$$

    2) 對於k=1,2,...K:

      a) 使用具有權重$D_k$的樣本集來訓練資料,得到弱分類器$G_k(x)$

      b)計算$G_k(x)$的分類誤差率$$e_k = P(G_k(x_i) \neq y_i) = \sum\limits_{i=1}^{m}w_{ki}I(G_k(x_i) \neq y_i)$$

      c) 計算弱分類器的係數$$\alpha_k = \frac{1}{2}log\frac{1-e_k}{e_k}$$

      d) 更新樣本集的權重分佈$$w_{k+1,i} = \frac{w_{ki}}{Z_K}exp(-\alpha_ky_iG_k(x_i)) \;\; i =1,2,...m$$

        這裡$Z_k$是規範化因子$$Z_k = \sum\limits_{i=1}^{m}w_{ki}exp(-\alpha_ky_iG_k(x_i))$$

    3) 構建最終分類器為:$$f(x) = sign(\sum\limits_{k=1}^{K}\alpha_kG_k(x))$$    

    對於Adaboost多元分類演算法,其實原理和二元分類類似,最主要區別在弱分類器的係數上。比如Adaboost SAMME演算法,它的弱分類器的係數$$\alpha_k = \frac{1}{2}log\frac{1-e_k}{e_k} + log(R-1)$$

    其中R為類別數。從上式可以看出,如果是二元分類,R=2,則上式和我們的二元分類演算法中的弱分類器的係數一致。

5. Adaboost迴歸問題的演算法流程

    這裡我們對AdaBoost迴歸問題演算法流程做一個總結。AdaBoost迴歸演算法變種很多,下面的演算法為Adaboost R2迴歸演算法過程。

    輸入為樣本集$T=\{(x_,y_1),(x_2,y_2), ...(x_m,y_m)\}$,,弱學習器演算法, 弱學習器迭代次數K。

    輸出為最終的強學習器$f(x)$

    1) 初始化樣本集權重為$$D(1) = (w_{11}, w_{12}, ...w_{1m}) ;\;\; w_{1i}=\frac{1}{m};\;\; i =1,2...m$$

    2) 對於k=1,2,...K:

      a) 使用具有權重$D_k$的樣本集來訓練資料,得到弱學習器$G_k(x)$

      b) 計算訓練集上的最大誤差$$E_k= max|y_i - G_k(x_i)|\;i=1,2...m$$

      c) 計算每個樣本的相對誤差:

        如果是線性誤差,則$e_{ki}= \frac{|y_i - G_k(x_i)|}{E_k}$;

        如果是平方誤差,則$e_{ki}= \frac{(y_i - G_k(x_i))^2}{E_k^2}$

        如果是指數誤差,則$e_{ki}= 1 - exp(\frac{-|y_i -G_k(x_i)|}{E_k})$        

      d) 計算迴歸誤差率$$e_k =  \sum\limits_{i=1}^{m}w_{ki}e_{ki}$$

      c) 計算弱學習器的係數$$\alpha_k =\frac{e_k}{1-e_k}$$

      d) 更新樣本集的權重分佈為$$w_{k+1,i} = \frac{w_{ki}}{Z_k}\alpha_k^{1-e_{ki}}$$

        這裡$Z_k$是規範化因子$$Z_k = \sum\limits_{i=1}^{m}w_{ki}\alpha_k^{1-e_{ki}}$$

    3) 構建最終強學習器為:$$f(x) = \sum\limits_{k=1}^{K}(ln\frac{1}{\alpha_k})g(x)$$

      其中,$g(x)$是所有$\alpha_kG_k(x), k=1,2,....K$的中位數。    

6. Adaboost演算法的正則化

    為了防止Adaboost過擬合,我們通常也會加入正則化項,這個正則化項我們通常稱為步長(learning rate)。定義為$\nu$,對於前面的弱學習器的迭代$$f_{k}(x) = f_{k-1}(x) + \alpha_kG_k(x) $$

    如果我們加上了正則化項,則有$$f_{k}(x) = f_{k-1}(x) + \nu\alpha_kG_k(x) $$

    $\nu$的取值範圍為$0 < \nu \leq 1 $。對於同樣的訓練集學習效果,較小的$\nu$意味著我們需要更多的弱學習器的迭代次數。通常我們用步長和迭代最大次數一起來決定演算法的擬合效果。

7. Adaboost小結

    到這裡Adaboost就寫完了,前面有一個沒有提到,就是弱學習器的型別。理論上任何學習器都可以用於Adaboost.但一般來說,使用最廣泛的Adaboost弱學習器是決策樹和神經網路。對於決策樹,Adaboost分類用了CART分類樹,而Adaboost迴歸用了CART迴歸樹。

    這裡對Adaboost演算法的優缺點做一個總結。

    Adaboost的主要優點有:

    1)Adaboost作為分類器時,分類精度很高

    2)在Adaboost的框架下,可以使用各種迴歸分類模型來構建弱學習器,非常靈活。

    3)作為簡單的二元分類器時,構造簡單,結果可理解。

    4)不容易發生過擬合

    Adaboost的主要缺點有:

    1)對異常樣本敏感,異常樣本在迭代中可能會獲得較高的權重,影響最終的強學習器的預測準確性。

(歡迎轉載,轉載請註明出處。歡迎溝通交流: [email protected]

相關推薦

整合學習Adaboost演算法原理小結

    在整合學習原理小結中,我們講到了整合學習按照個體學習器之間是否存在依賴關係可以分為兩類,第一個是個體學習器之間存在強依賴關係,另一類是個體學習器之間不存在強依賴關係。前者的代表演算法就是是boosting系列演算法。在boosting系列演算法中, Adaboost是最著名的演算法之一。Adaboos

整合學習Adaboost演算法原理和程式碼小結(轉載)

在中,我們講到了整合學習按照個體學習器之間是否存在依賴關係可以分為兩類: 第一個是個體學習器之間存在強依賴關係; 另一類是個體學習器之間不存在強依賴關係。 前者的代表演算法就是提升(boosting)系列演算法。在boosting系列演算法中, Adaboost是最著名的演算法之一。Adaboost既可以

【機器學習入門二】整合學習AdaBoost演算法的python實現

本文主要基於周志華老師的《機器學習》第八章內容 個體與整合 整合學習通過構建並結合多個學習器來完成學習任務。整合學習的一般結構如圖所示: 先產生一組個體學習器,在用某種策略把它們結合在一起。個體學習器通常有一個現有的學習演算法從訓練資料產生,如決策

機器學習回顧篇(13):整合學習AdaBoost

  在上一篇部落格中,我們總結了整合學習的原理,並展開介紹了整合學習中Bagging和隨機森林這一分枝演算法,在本篇部落格中,我們繼續介紹另一個分枝——Boosting,並對Boosting系列中的經典演算法Adaboost

整合學習boosting,Adaboost、GBDT 和 xgboost(二)

AdaBoost 演算法的訓練誤差分析 AdaBoost最基本的性質是它能在學習過程中不斷減少訓練誤差,即在訓練資料集上的分類誤差率。 定理:AdaBoost的訓練誤差界: 1

整合學習boosting,Adaboost、GBDT 和 xgboost(一)

在前面的部落格(https://blog.csdn.net/qq_16608563/article/details/82878127) 介紹了整合學習的bagging方法及其代表性的隨機森林。此次接著介紹整合學習的另一個方法boosting以及boosting系列的一些演算法,具體包括 Ad

整合學習boosting,Adaboost、GBDT 和 xgboost(三)

AdaBoost演算法的解釋——前向分步法與提升樹(GBDT) 可以認為AdaBoost演算法是模型為加法模型,損失函式為指數函式、學習演算法為前向分步演算法時的二類分類學習方法。 前向分步演算法: 考慮加法模型

機器學習AdaBoost原理與程式碼實現

1 2.000000 1.000000 38.500000 66.000000 28.000000 3.000000 3.000000 0.000000 2.000000 5.000000 4.000000 4.000000 0.0

機器學習演算法--整合學習2--AdaBoost

以《機器學習實戰為例》程式設計實現AdaBoost演算法。 1.AdaBoost演算法原理 Boosting演算法主要基於多個弱學習器來構建強學習器,最終結果由多個弱學習器的加權平均決定,每個基學習器的權重並不相同,每個權重代表對應分類器在上一輪的迭代中成功度。訓練中

【機器學習實戰系列】讀書筆記AdaBoost演算法公式推導和例子講解(一)

最近在看整合演算法AdaBoost,推薦先看李航的統計學習方法第8章,然後再看機器學習實戰第7章,李航的書上的公式推導講的很詳細了,但是很多地方對於初學者來說,還是需要時間去理解和消化的。本文將從以下幾個方面來介紹AdaBoost演算法。一、AdaBoost演算法公式推導二、

大白話5分鐘帶你走進人工智慧-第30節整合學習Boosting方式和Adaboost

目錄   1、前述: 2、Bosting方式介紹: 3、Adaboost例子: 4、adaboost整體流程: 5、待解決問題: 6、解決第一個問題:如何獲得不同的g(x): 6.1 我們看下權重與函式的關係: 6.2 gt和un的關係數學公式表達: 6.3 引導Un+1的思路:

大白話5分鐘帶你走進人工智慧-第31節整合學習最通俗理解GBDT原理和過程

目錄 1、前述 2、向量空間的梯度下降: 3、函式空間的梯度下降: 4、梯度下降的流程: 5、在向量空間的梯度下降和在函式空間的梯度下降有什麼區別呢? 6、我們看下GBDT的流程圖解: 7、我們看一個GBDT的例子: 8、我們看下GBDT不同版本的理解: 1、前述 從本課時開始,我們講

大白話5分鐘帶你走進人工智慧-第32節整合學習最通俗理解XGBoost原理和過程

目錄 1、回顧: 1.1 有監督學習中的相關概念 1.2  迴歸樹概念 1.3 樹的優點 2、怎麼訓練模型: 2.1 案例引入 2.2 XGBoost目標函式求解 3、XGBoost中正則項的顯式表達 4、如何生長一棵新的樹? 5、xgboost相比原始GBDT的優化: 6、程

python學習動態型別原理淺析

請看程式碼: a=3 id(a) 1871146064 a=4 id(a) 1871146096 id(3) 1871146064 對於同一個變數a,當a的值不同時,

整合學習Bagging和Boosting的簡介

一、什麼是整合學習 整合學習在機器學習演算法中具有較高的準確率,不足的就是模型訓練比較複雜,效率不高。 Boosting主要有:Adaboost、GBDT、XGBoost Bagging主要有:Random Forest 整合學習的思想: 整合學習的主要思想是構建出多個弱分

通俗易懂的Adaboost演算法原理分析和例項+程式碼

   【尊重原創,轉載請註明出處】 http://blog.csdn.net/guyuealian/article/details/70995333     本人最初瞭解AdaBoost演算法著實是花了幾天時間,才明白他的基本原理。也許是自己能力有限吧,很多資

機器學習Apriori演算法和FP-growth演算法

1 關聯分析 無監督機器學習方法中的關聯分析問題。關聯分析可以用於回答"哪些商品經常被同時購買?"之類的問題。 2 Apriori演算法   頻繁項集即出現次數多的資料集   支援度就是幾個關聯的資料在資料集中出現的次數佔總資料集的比重。或者說幾個資料關聯出現的概率。   置信度體現了一個數據出現後,另

[六]機器學習EM演算法

6.1 實驗概要 通過EM演算法解決部分觀測資料的引數估計問題,使用sklearn提供的EM模組和高斯混合模型資料集,實驗EM演算法的實際效果 6.2 實驗輸入描述 本次實驗使用模擬資料集,該資料集有300條資料構成,每個樣本為3維。假定該資料由兩個高斯分佈混合得到。 &nbs

【Spring】Sping Data JPA 深入學習①查詢方法原理探究

基本概念 Spring Data JPA是Spring公司開發的Java Persistence API 相對於 sun公司開發的JPA Spring Data JPA 整合了Hibernate,換句話說,Spring Data JPA 的預設實現是用的Hibernate

Bagging與隨機森林演算法原理小結

 在整合學習原理小結中,我們講到了整合學習有兩個流派,一個是boosting派系,它的特點是各個弱學習器之間有依賴關係。另一種是bagging流派,它的特點是各個弱學習器之間沒有依賴關係,可以並行擬合。本文就對整合學習中Bagging與隨機森林演算法做一個總結。     隨機森林是整合學習中可以和