AdaBoost算法內容來自《統計學習與方法》李航,《機器學習》周志華,以及《機器學習實戰》Peter HarringTon,相互學習,不足之處請你們多多指教!html
提高算法是將弱學習算法提高爲強學習算法的統計學習方法,在分類學習中,提高方法通過反覆修改訓練數據的權值分佈,構建一系列基本的基本分類器,並將這些基本的分類器線性組合,構成一個強分類器.表明的方法是AdaBoost算法.算法
本卷大綱爲:機器學習
1 提高方法AdaBoost算法
2 AdaBoost算法解釋
3 提高樹
4 總結ide
1 提高方法AdaBoost算法函數
1.1 提高方法的基本思想性能
提高方法基於三個臭皮匠勝過諸葛亮的思想.對於一個複雜的任務來講,將多個專家系統的判斷進行適當的綜合分析,要比其中任何一個專家單獨判斷要好.學習
強可學習的:一個概念,若是存在一個多項式學習算法可以學習它,而且正確率很高,那麼就稱爲這個概念是強可學習的.優化
弱可學習的:一個概念,若是存在一個多項式的學習算法可以學習它,可是學習的正確率僅僅只能比隨機猜想的略好,那麼就稱這個概念是弱可學習的.spa
一個任務能夠變成,在學習中,若是已經發現了弱學習方法,那麼可以將其提高boost爲強學習方法.關於提高的研究有不少,有不少算法被提出來,最具表明性的是AdaBoost算法.3d
對於分類問題而言,給定一個訓練樣本,求比較粗糙的分類規則要求比求比較精確的分類規則容易得多,提高方法就是從弱學習算法出發,反覆學習獲得一系列弱分類器,而後組合這些弱分類器,構成一個強大的分類器.大多數的提高算法都是改變訓練數據的機率分佈(訓練數據的權值分佈),針對不一樣的訓練數據分佈調用弱學習算法學習一系列弱分類器.
1.2提高方法解決的方法
提高方法須要解決的兩個問題
[1]在每一輪如何改變訓練數據的權重和機率分佈
關於第一個問題,AdaBoost的作法是,提升那些被前一輪弱分類器錯誤分類樣本的權重,而下降那些被正確分類樣本的權值.這樣一來,有正確分類的數據,因爲其權值加大而受到後一輪弱分類器更大的關注.因而分類問題被一系列弱分類器分而治之.
[2]如何將弱分類器組合成一個強的分類器
關於第二個問題,弱分類器的組合,AdaBoost採用加權多數表決的方法,具體的,加大分類偏差較小的弱分類器的權值,使得其在表決中較大的做用,減少分類偏差率大的分類器的權值,使得其在表決中起較小的做用.
1.3 AdaBoost算法的具體實現
輸入:訓練數據集T={(x1,y1),(x2,y2),(x3,y3)..........(xn,yn)},弱學習算法
輸出:最終的分類器G(x)
訓練步驟:
(1)初始化訓練數據的權值分佈
(2)對於m=1,2,...,M
(a)使用具備權值分佈Dm的訓練數據集學習,獲得基本分類器:
(b)計算Gm(x)在訓練數據集上的分類偏差率:
(c)計算Gm(x)的係數:
(d)更新訓練數據的權值分佈:
這裏的Zm是規範化因子,使得Dm+1是一個機率分佈
(3)構建基本分類器的線性組合
1.4算法具體說明:
步驟(1)假設訓練數據集具備均勻的權值分佈,即每一個訓練樣本在基本分類器的學習中做用相同,這個假設保證第1步在原始數據上學得類器G1(x)
步驟(2)AdaBoost反覆學習基本分類器,在每一輪m=1,2,3,.....,M順序執行下列操做.
(a)使用當前分佈Dm加權的訓練數據集,學習基本分類器Gm(x)
(b)計算基本分類器Gm(x)在訓練數據集上的基本偏差em
(c)計算基本分類器Gm(x)的係數ɑm,ɑm表示Gm(x)在最終分類器中的重要性,分類偏差小的分類器在最終的分類器中的做用越大
(c)更新訓練數據的權值,爲下一輪做準備
被基本分類器Gm(x)誤分類的樣本的權值得以擴大,被正確分類樣本的權值得以縮小,二者一比較,誤分類的樣本權值被放大
所以,誤分類樣本在下一輪學習中起更大的做用,不改變訓練數據,不斷改變訓練數據的權值分佈,使得訓練數據在基本分類器中起不一樣做用,這是AdaBoost算法的特色
步驟(3),線性組合f(x)實現M個基本分類器的加權表決,係數ɑm 表示基本分類器的重要性,這裏ɑm的和並不爲1,f(x)的符號決定實類.f(x)的絕對值表示分類的可信度,利用基本分類器線性組合構建最終分類器是AdaBoost的另外一個特色.
2 AdaBoost算法解釋
AdaBoost算法的另一個解釋,能夠認爲AdaBoost算法是模型爲加法模型,損失函數爲指數函數,學習方法爲前向分步算法時的二分類學習方法.
2.1前向分步算法
考慮加法模型
其中 爲基函數,
爲基函數的參數,
爲基函數的係數,在給定訓練數據和損失函數L(y,f(x))的條件下,學習加法模型f(x)成爲經驗風險極小化,即損失函數極小化問題:
前向分步算法求解這個優化問題的想法是:由於學習的是加法模型,若是可以從前向後,每一步只學習一個基函數及其係數,逐步逼近最優化目標函數式,就能夠簡化優化的複雜度,具體的,每步只須要優化以下
損失函數:
2.2學習加法模型f(x)的前向分步算法以下:
輸入:訓練數據集T={(x1,y1),(x2,y2),....,(xN,yN)};損失函數L(y,f(x));基函數{b(x;r)}
輸出:加法模型f(x)
(1)初始化f_0(x) = 0
(2)對m=1,2,3.....,M
(a)極小化損失函數
獲得參數
(b)更新
(3)獲得加法模型
3 提高樹
提高樹是以分類樹或者回歸樹爲基本的分類器的提高方法,提高樹被認爲是統計學習中性能最好的學習方法之一.
3.1提高樹模型
提高方法實際採用加法模型(基函數的線性組合)與前向分步算法,以決策樹爲基函數的提高方法稱爲提高樹,對分類問題決策樹是二叉分類樹,對迴歸問題決策樹是二叉迴歸樹.
提高樹算法採用前向分步算法,首先肯定初始提高樹f0(x)=0,第m步的模型是
其中爲當前模型,經過經驗風險極小化肯定下一棵決策樹的參數
因爲樹的線性組合能夠很好的擬合訓練數據,即便數據中的輸入和輸出之間的關係很複雜也是如此,因此提高樹是高級的學習方法.
不一樣問題的提高樹的學習方法主要區別在於使用的損失函數不一樣,包括使用平方偏差損失函數的迴歸問題,用指數損失函數的分類問題,以及通常損失函數的決策問題.
3.2迴歸問題的提高樹算法
輸入:訓練數據集T={(x1,y1),(x2,y2),(x3,y3),...,(xn,yn)},xi屬於Rn,yi屬於R
輸出:提高樹fm(x)
具體過程:
(1)初始化
(2)對m=1,2,3....,M
(a)按式子計算殘差
(b)擬合殘差學習一個迴歸樹,獲得
(c)更新
(3)獲得迴歸提高樹
3.3梯度提高
提高樹利用加法模型和前向分步算法實現學習優化過程,當損失函數是平方損失和指數損失時,每一步的優化都是比較簡單,可是對於通常的損失函數,每每每一步優化都不是很容易,爲此,Frediman提出梯度
提高算法,利用損失函數的負梯度在當前模型的值做爲迴歸問題提高算法中殘差的近似值,擬合一個迴歸樹.
梯度提高算法具體實現步驟:
輸入:訓練數據集T={(x1,y1),(x2,y2),(x3,y3),...,(xN,yN)},xi屬於Rn,yi屬於R,損失函數L(y,f(X))
輸出:迴歸樹f(x)
(1)初始化
(2)對m=1,2,3,....,M
(a)對i=1,2,3,...,N計算殘差
(b)對擬合一個迴歸樹,獲得第m顆樹的葉節點區域,j=1,2,3....,J
(c)對於J=1,2,3,...J,計算係數C
(d)更新
(3)獲得迴歸樹
算法解釋:
第一步初始化,估計使損失函數極小化的常數值,它是隻有一個根節點的樹
第二步a計算損失函數的負梯度在當前模型的值,將它做爲殘差的估計,對於平方損失函數,他就是一般所說的殘差,對於通常的損失函數,他就是殘差的近似值
第二步b估計迴歸樹節點區域,以擬合殘差的近似值
第二步c利用線性搜索估計葉節點區域的值,使損失函數極小化
第二步d更新迴歸樹
第三步輸出最終模型f(x)
4 總結
[1] AdaBoost算法特色是經過迭代每次學習的一個基本分類器,每次迭代中,提升那些被前一輪分類器錯誤分類數據的權值,下降那些被正確分類的數據的權值,最後AdaBoost將基本分類器線性組合爲強分類器,其中給分類偏差率小基本分類器較大的權值,給分類偏差大的基本分類器以小的權值
[2] AdaBoost算法的一個解釋是該算法實際是一個前向分步算法的一個實現,在這個方法裏,模型是加法模型,損失函數是指數模型,算法是前向分步算法
每一步極小化損失函數,獲得參數
[3 ]提高樹是以分類樹和迴歸樹爲基本分類器的提高方法,提高樹被認爲是統計學習中比較有效的學習方法
前一篇文章地址:機器學習理論決策樹算法第二卷http://www.cnblogs.com/fengdashen/p/7642647.html