1.提高算法算法
提高算法實爲將一系列單一算法(如決策樹,SVM等)單一算法組合在一塊兒使得模型的準確率更高。這裏先介紹兩種Bagging(表明算法隨機森林),Boosting(表明算法AdaBoost-即本篇核心)網絡
Bagging思想:以隨機森林爲例機器學習
假設樣本集的總樣本量爲100個,每一個樣本有10個特徵(也就是維度是10);隨機取樣的比例通常爲(60%-80%)函數
步驟1 :咱們隨機從中拿出60個數據(注意這裏是有放回的取樣)用於創建決策樹,這樣隨機取50次,最終將會造成60棵決策樹。性能
步驟2: 咱們在構建決策樹時對於每一個決策樹的特徵也採用隨機取樣(有放回),隨機選6個特徵。學習
步驟3:利用上述步驟1,步驟2構建的60個不一樣的決策樹模型,最終結果用這60棵綜合區評判,以下圖(圖片來此網絡):優化
Boosting思想:在分類問題中,經過改變訓練樣本的權重,學習多個分類器,並將這些分類器進行線性組合,提升分類的性能(後文以AdaBoost進行說明)。spa
Bagging與Boosting的異同點:3d
同:二者都是集成算法,即綜合考慮更過的分類器,提升分類的準確性blog
異:分類器層面:好比一個20人的工做小組,如今要對某一問題達成一項決議。如今開會討論,Bagging是一視同仁的,即不論工做經驗多少,能力怎樣,我看多數,後者取平均。而Boosting會根據能力或者說經驗的多少綜合評定給每一個工程師一個權重,也就說能力強的,有經驗的權重就大一些,他們的意見就重要一些。在這個基礎上再去決策(注意這此示例只針對分類器層面)。
樣本層面:Boosting也會給予樣本必定的權重。若是從結構層面。
模型結構層面:Bagging是並行決策的(可類比並聯電路),而Boosting是串行決策的。
2.AdaBoost算法
2.1 AdaBoost原理以及造成過程
AdaBoost算法的感悟,我在整理時,想採用一種倒立的方式去記錄和解讀,由於我本身在學習的過程當中直接從數學表達式去學習,老是感受有諸多的疑問,以致於接受此算法所用的時間稍微長了一些,下面正式開始整理本身理解AdaBoost的過程
AdaBoost算法是boosting算法中的一種,它的做用就是將一系列弱分類器線性組合在一塊兒造成一個強分類器,能夠這樣理解AdaBoost就像一個領導,那些弱分類器算法(如:單層決策樹等)就像員工,每一個員工均有本身的特徵,而AdaBoost作爲老闆的做用就是將這些員工經過某種方式組合在一塊兒將事情作得更好,放在機器學習中就是將分類任務或者說迴歸任務能作得更好,也就是所說的提高方法。AdaBoost是經過什麼樣的方式來完成這個任務的呢?
在《李航-統計學習方法中》關於提高方法提出兩個問題,而AdaBoost的原理就是如何解決這兩個問題
問題1:每一輪如何改變訓練數據的權值或機率分佈?
AdaBoost:提升那些被前一輪分類器錯誤分類樣本的權值,而下降那些被分類正確樣本的權值。這樣一來,那些沒有獲得正確分類的的數據,因爲其權值加大而受到後一輪若分類器更大的關注。
問題2:如何將若分類器組合成一個強分類器?
AdaBoost:採用加權多數表決的方法,即加大分類偏差小的弱分類器的權值,使其在表決中起較大的做用,減少分類吳超率大的弱分類器的權值,使其在表決中起較小的做用
理解AdaBoost即就是理解上述兩個問題的數學表達:
AdaBoost最終的數學表達式爲:
其中m表示:第m個分類器,M表示總共有M個分類器
x:表示樣本集合
上式(1)的造成過程以下:
輸入:訓練數據集,其中;弱學習算法;
輸出:最終分類器G(x)
2.2 分步驟理解上述AdaBoost算法
m = 1 時,即利用第一個分類器開始學習訓練數據集時
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
第一步:對於第一個分類器,咱們假設每一個樣本的權值是相同的。引用《李航-統計學習方法》中的案例來理解第一步:
例:對於以下數據集,假設弱分類器由x<ν或想x>v產生,其中閥值ν使得該分類器在訓練數據集上分類偏差率最低,試用AdaBoost算法學習一個強分類器;
第二步:肯定基本分類器G
此處樣本量並不大,咱們能夠手動計算一下,例如閥值分別取1.5,2.5,3.5,...,9.5時的分類偏差率,就能獲得當v=2.5是分類偏差率最小即:
第三步:計算在分類器上的訓練偏差率
第四步:計算分類器的權值(注意這裏是以e爲底進行計算的)
第六步:肯定最終分類器
利用上述G(x)對訓練數據集進行分類,仍有3個數據被分類錯誤
第七步:計算下一次循環的樣本集的權重
D2=(0.0715, 0.0715, 0.0715, 0.0715, 0.0715, 0.0715,0.1666, 0.1666, 0.1666, 0.0715)
m = 2 ,組合第二個弱分類器
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
重複上述第二步到第七步
分類偏差率最小的閥值爲8.5
此時利用上述G(x)對訓練數據集進行分類,仍有3個點被誤分類
m = 3 ,組合第三個弱分類器
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
再次重複上述第二步到第七步
分類偏差最小的閥值爲5.5
此時利用上述的G(x)在對樣本集進行分類,上述訓練數據集上有0個誤分類點,即誤分率爲0,此時便可中止,上述G(x)便可做此數據的強分類器
1.3 總結
經過對上述案例的認識,咱們可量化的指標所表現的規律再從定性的角度理解
(1)被前一個分類器分錯得樣本,下一個分類器再對其進行分類時必定不會被分錯,爲何?
咱們經過數值觀察,被分錯的樣本,在下一次分類時樣本權值被增大如(m=2時樣本權值爲0.1666的樣本),而咱們在流程圖中第二步提到,在選擇分類器時,要求選擇分類偏差率最低的分類器(爲甚要這麼選的原理見下文式(11)),顯然若是將權值大的樣本分類錯時根本達不到第二步的要求。
(2)m=3時爲何誤分率爲0,從定性的角度如何理解?
m=3時的組合分類器的權值alpha逐漸增大,即咱們給予分類偏差率低的樣本給予了高的權值,而從數值上去判斷,最終f(x)>0亦或是f(x)<0是由三個分類器所共同決定的,假如說第一個分類器將某同樣本本來是1類別,分紅了-1類別,那麼其對最終分類器來講,會提供一個負的貢獻,然後邊的分類器總會將這個負的貢獻抵消掉,使得最終結果仍是1類別。
3.AdaBoost算法的理解
《李航-統計學習方法》中提到,AdaBoost算法是模型爲加法模型,損失函數爲指數函數,學習算法爲前向分步算法時的二分類學習方法,此解釋實際解釋了上述咱們的AdaBoost算法的原理的由來;
3.1 加法模型的通常表達式以下:
3.2 前向分步算法:
選定模型後,咱們的目標就是經過訓練數據集去訓練模型(本質是訓練模型中的參數),用什麼來衡量模型訓練的好壞呢?經常經過經驗風險極小化即損失函數極小化,此處在給定訓練數據集及損失函數L(y,f(x))的條件下,咱們的目標極小化此損失函數,形式以下:
因爲f(x)爲加法模型,如今咱們的任務是優化模型參數,使得損失函數最小,咱們能夠採用優化加法模型中的每一項,讓每一項的結果最小,這樣問題將轉化爲以下形式:
上述(3)到(4)轉化過程即爲前向分步算法的核心。
3.3 利用上述加法模型以及前向分步算法的原理推導AdaBoost模型
AdaBoost模型爲:
損失函數爲:
設已經優化了m-1輪,即已經獲得了,如式(7),在第m輪咱們經過迭代可得以下式(8)
咱們可經過使上述式(8)對對應的損失函數最小,損失函數以下式(9)
經過優化式(9)使得式(9)最小便可獲得
即不依賴於alpha,也不依賴於G,故以G爲自變量求解損失函數的極小值即等價於下述式(11):
式(11)解釋了再上述流程圖的第二步,咱們每次找分類器的時候,要找偏差率最小的分類器的緣由,即要使得損失函數最小。
而對於alpha,式(9)關於alpha求導,並令倒數等於0,便可獲得,過程以下:
,令其爲0即得
由上述(9)已知,因此
此處與AdaBoost算法的不一樣之處在於,AdaBoost對w進行了歸一化
2.實例
3.算法推導
4.注意點