adaboost(adaptiveboosting)是一種迭代演算法,通過對訓練集不斷訓練弱分類器,然後把這些弱分類器集合起來,構成強分類器。adaboost演算法訓練的過程中,初始化所有訓練樣例的具有相同的權值重,在此樣本分佈下訓練出乙個弱分類器,針對錯分樣本加大對其對應的權值,分類正確的樣本降低其權值,使前一步被錯分的樣本得到突顯,獲得新的樣本分佈,在新的樣本分佈下,再次對樣本進行訓練,又得到乙個分類器。依次迴圈,得到t個分類器,將這些分類器按照一定的權值組合,得到最終的強分類器。訓練的關鍵是針對比較難分的訓練樣本,在聯合弱分類器時,使用加權投票,這樣分類效果好的弱分類器得到較大的權重,分類效果差的則權值較小。adaboost方法是經過調整的boosting演算法,能夠對弱學習得到的弱分類器的錯誤率進行適應性調整, 相對boosting演算法,adaboost方法使用加權後選取的訓練資料代替隨機選取的訓練樣本,訓練的焦點集中在比較難分的訓練資料樣本上;在聯合弱分類器聯合時,使用加權的投票機制代替平均投票機制。讓分類效果好的弱分類器具有較大的權重,而分類效果差的分類器具有較小的權重。
1.初始化所有訓練樣例的權重為1 / n,其中n是樣例數
2.for m=1,……m:
a).訓練弱分類器ym(),使其最小化權重誤差函式(weighted error function):
b)接下來計算該弱分類器的話語權α:
c)更新權重:
其中zm:
是規範化因子,使所有w的和為1。(這裡公式稍微有點亂)
3.得到最後的分類器:
adaboos的過程可以用如下結構表示:
最後的分類器ym是由數個弱分類器(weak classifier)組合而成的,相當於最後m個弱分類器來投票決定分類,而且每個而且每個弱分類器的「話語權」α不一樣。
上述迭代演算法中,每一次迴圈根據當前的權重分布對樣本x定乙個分布p,然後對這個分布下的樣本使用弱學習演算法得到弱分類器,而這個錯誤率的上限並不需要事先知道。每 一次迭代,都要對權重進行更新。更新的規則是:減小弱分類器分類效果較好的資料的概率,增大弱分類器分類效果較差的資料的概率。最終的分類器是個弱分類器的加權平均。
在實際應用中,adaboost基本上可以訓練任何想要檢測的目標比如車輛、人臉、字元、商標、建築物等等,收集正負樣本,正樣本為所訓練的目標,比如下圖中車輛、字元、人臉等目標已經切分好的目標。
負樣本可以為影象中未包含正樣本的任意影象。分類器訓練方法可以按照 的方法訓練分類器,訓練完成後,匯入分類器(opencv中為xml檔案)引數對影象進行掃瞄檢測,將掃瞄的多個候選框合併即可得到最終的目標位置。
另外:訓練分類器引數設定示例及訓練過程中的引數設定方法說明
訓練級聯adaboost引數如下:
numpos: 9000
numneg: 28000
numstages: 18
precalcvalbufsize[mb] : 1000
precalcidxbufsize[mb] : 1000
stagetype: boost
featuretype: harr
samplewidth: 24
sampleheight: 24
boosttype: dab
minhitrate: 0.95
maxfalsealarmrate: 0.65
weighttrimrate: 0.97
maxdepth: 1
maxweakcount: 100
1 正負樣本比例問題:比例大約1:3的樣子比較好,1:3或者1:4訓練出來的分類器要優於1:1或者1:9,原因是正負樣本比例接近時,對負樣本的命中程度低(實際中負樣本肯定遠遠多於正樣本),正負樣本比例較大(比如1:9)時,重視負樣本的統計特性而忽略了正樣本的統計特性,造成正樣本權重總和小,當權重小於一定程度的時候可能很大一部分正樣本都不參與訓練了(在weighttrimrate=0.95時)。
2 minhitrate:分類器的每一級希望得到的最小檢測率。總的檢測率大約為minhitrate ^ numstages。影響每個強分類器閾值,當設定為0.95時如果正訓練樣本個數為12000個,那麼其中的600個就很可能被判別為負樣本,第二次選擇的時候必須多選擇後面的600個,按照這種規律我們為後面的每級多增加numpos*minhitrate個正樣本,根據訓練的級數可以得到如下公式
numpos+(numstages-1)*numpos*(1-minhitrate),即需要準備的訓練正樣本個數
3 maxfalsealarm:分類器的每一級希望得到的最大誤檢率。總的誤檢率大約為maxfalsealarm ^ numstages,.影響每個強分類器中弱分類器的個數,設定較大,每級可以濾除負樣本的比例就較小,這樣在測試過程中虛警率就較高;設定較小,每級強分類器中弱分類器的個數就較多,檢測時間就會相對要長,在可以接受的檢測時間下盡量降低maxfalsealarm是我們要追求的目標
關於負樣本的選擇,因為每級剩下的負樣本個數低於numneg*maxfalsealarm,在第二輪選擇的時候從之前選擇的負樣本後面繼續選擇,而不是重頭開始將選擇過的負樣本也包含進來,只有當遍歷完一遍負樣本列表後才重頭在掃瞄一遍
4 weighttrimrate:影響參與訓練的樣本(不管是正樣本還是負樣本),當更新完樣本權重之後,將樣本權重按照從小到大的順序排列,從後面開始累加樣本權重大於weighttrimrate時,前面的樣本就不參與後面的訓練了
5 maxweakcount:決定每級強分類器中弱分類器的最大個數,當fa降不到指定的maxfalsealarm時可以通過指定最大弱分類器個數停止單個強分類器。
6 boost引數(maxdepth、bt):影響決策樹構建的法則以及權重更新策略
機器學習 分類器組合 AdaBoost
adaboost是一種迭代演算法,其核心思想是針對同乙個訓練集訓練不同的分類器 弱分類器 然後把這些弱分類器集合起來,構成乙個更強的最終分類器 強分類器 adaboost其實只是boost的乙個特例。1.要訓練出多個弱分類器 圖中為3個 每個弱分類器由不同權重的樣本 圖中為5個訓練樣本 訓練得到 其...
機器學習 分類器組合 AdaBoost
adaboost是一種迭代演算法,其核心思想是針對同乙個訓練集訓練不同的分類器 弱分類器 然後把這些弱分類器集合起來,構成乙個更強的最終分類器 強分類器 adaboost其實只是boost的乙個特例。1.要訓練出多個弱分類器 圖中為3個 每個弱分類器由不同權重的樣本 圖中為5個訓練樣本 訓練得到 其...
分類器之adaboost
分類中通常使用將多個弱分類器組合成強分類器進行分類的方法,統稱為整合分類方法 ensemble method 比較簡單的如在boosting之前出現bagging的方法,首先從從總體樣本集合中抽樣採取不同的訓練集訓練弱分類器,然後使用多個弱分類器進行voting,終於的結果是分類器投票的優勝結果。這...