天天看點

一個能與随機森林相媲美的算法 AdaBoost

一個能與随機森林相媲美的算法:自适應提升法(Adaptive Boosting, AdaBoost)

1. 概述

提升法(Boosting)是一個更新的過程,它的做法是給每一個訓練樣本賦予一個權重,在每一輪結束時自動調整權重。

提升(Boosting)方法圖解如下所示:

一個能與随機森林相媲美的算法 AdaBoost

AdaBoost算法已被證明是一種有效而實用的Boosting(提升)算法,其思想是提高對那些被錯誤分類樣本關注程度,降低對那些被正确分類的樣本關注程度,采用權重多數表決的方法。具體的,就是增大分類偏差率小的弱分類器的權值,使其在表決中起較大的作用;減小分類偏差率大的弱分類器的權值,使其在表決中起較小的作用。

關于AdaBoost算法結合政策有三種方法,一種是平均法,即對若幹弱學習器的輸出進行平均得到最終預測輸出,另一種是投票法投票法是對許多個弱分類器進行結果輸出,數量最多的類别為最終分類類别,而相對比較複雜的則是絕對多數投票法,不僅要求獲得最高票,還要求票數過半,否則就拒絕預測。最後一種方法是學習法,相對于前兩種方法較複雜,其代表方法有stacking,我們不僅隻對弱學習器的結果做簡單的邏輯處理,而且是再加上一層學習器,也就是說,我們将訓練集弱學習器的學習結果作為輸入,将訓練集的輸出作為輸出,重新訓練下一個學習器來得到最終結果。

2. 應用

AdaBoost是一種疊代算法,其思想的核心是采取對同一個訓練集訓練得到不同的弱分類器,然後把這些弱分類器以某種政策集合起來構成一個強大的最終分類器。

與Bagging算法不同是,Bagging算法弱分類器之間無任何的影響關系,而AdaBoost算法,上一個弱分類器的權值影響着下一個弱分類器的權值,簡而言之就是說,上一個弱分類器被分正确的樣本,在建立下一個弱分類器模型時,會将其權值減小,反之亦然。依次進行疊代直至建立n個弱分類器,最終這n個弱分類器以某種政策結合成一個強大的分類器。

接下來我們将用AdaBoost算法對irirs資料集進行準确率結果輸出。

clf = AdaBoostClassifier(n_estimators=50, random_state=0)#訓練得到50個基評估器 
clf = clf.fit(Xtrain,Ytrain)                        #用訓練集建立評估器
score_m = clf.score(Xtest,Ytest)                  #計算測試集得分
score_y = clf.score(Xtrain,Ytrain)                 #計算訓練集得分
print ("test:{}".format(score_m),
       "train:{}".format(score_y))
           
一個能與随機森林相媲美的算法 AdaBoost

從表3-2我們可以看到,除了少數類别,AdaBoost算法相比Bagging算法,是有些許提高的,但效果差别不是很明顯,考慮到僅此一次實作的偶然性,關于Bagging算法和AdaBoost算法的預測效果差異還需建立在更豐富的資料經驗基礎之上給出。但是為什麼在訓練集表現良好而在測試集上的表現過于的低呢?原因在于:模型的過拟合,訓練模型過多的拟合了噪聲點,導緻了模型在測試集上的表現不是很好。

對于過拟合,我們可以尋找一個最佳點,在這個點上既滿足訓練集效果良好也能滿足測試集效果達到最佳。接下來我們用網格搜尋尋找用AdaBoost學習模型的最優參數如下:

from sklearn.model_selection import GridSearchCV
parameters = {'n_estimators': [1,10,20,30,40,50]}
clf = GridSearchCV (AdaBoostClassifier(), parameters, cv=3, scoring='accuracy') #用網格搜尋尋找用AdaBoost學習模型的最優參數
clf.fit (Xtrain, Ytrain)
print ('最優參數:', clf.best_params_)
print ('訓練集準确率:', clf.best_score_)
print ('測試集準确率:{:.3f}'.format(clf.score (Xtest,Ytest ) ) )
           

我們選取1,10,20,30,40,50,做模型的參數,最終輸出結果如下表3-3:

一個能與随機森林相媲美的算法 AdaBoost

當然我們隻是粗略的選取了這6個名額作為參數,做了一次實驗,但找到最優參數的方法是可以實作的,可以通過微元的思想,一步步的把區間縮小,最終确立一個最優的參數解。

前面我們所提AdaBoost由多個單決策樹依次疊代而形成的,為了友善我們的了解,我們對AdaBoost算法和單決策樹分别做了一條學習曲線,并對他們進行了比較分析。

一個能與随機森林相媲美的算法 AdaBoost

從圖3-3我們可以直覺的看出,随着訓練樣本數的增加,單決策樹的預測準确率穩定在50%左右,分類器得分在0.52~0.53之間,是個基分類器,而AdaBoost預測準确率在85%左右,明顯高于單決策樹,分類器得分在0.95~1之間是個強分類器。是以在單決策樹面前,AdaBoost對樣本分類的準确率有很明顯的提升。

繼續閱讀