我們知道boost系列是強(qiáng)依賴關(guān)系, 有這個(gè)依賴, 各個(gè)學(xué)習(xí)器之間還有這些問題沒有解決:
- 如何計(jì)算學(xué)習(xí)的誤差率
- 如何得到弱學(xué)習(xí)器的權(quán)重
- 如何更新樣本權(quán)重?
- 使用何種結(jié)合策略?
Adaboost
假定這里給一個(gè)二分類的數(shù)據(jù)集:
我們先來看一下Adaboost的步驟
- 輸入數(shù)據(jù)T
- 初始化訓(xùn)練數(shù)據(jù)的權(quán)重分布:
- 對
:
- 使用具有權(quán)值分布的
訓(xùn)練集進(jìn)行學(xué)習(xí), 得到基本的分類器:
- 計(jì)算
在訓(xùn)練數(shù)據(jù)集上的誤差率
- 計(jì)算
的系數(shù):
- 更新訓(xùn)練集的權(quán)重分布:
此處是規(guī)范化因子:
- 構(gòu)建基本的纖性分類器組合:
Adaboost的損失函數(shù)
Adaboost損失函數(shù)采用指數(shù)損失, 指數(shù)損失比較少見
下面來推導(dǎo)一下其損失函數(shù), 該算法為加法模型, 學(xué)習(xí)算法為前向分步算法, 前向分步算法其實(shí)就是: 通過前一輪學(xué)習(xí)器的學(xué)習(xí), 來更新后一個(gè)弱學(xué)習(xí)器的訓(xùn)練集權(quán)重,按照上面的定義, 各輪學(xué)習(xí)器為:
顯然, 是成立的
利用前向分布, 我們可以得到每個(gè)新的子分類器的損失函數(shù)為:
令,它的值不依賴于
或者
,僅依賴于
,
將其代入損失函數(shù)得到:
我們知道其實(shí)是一個(gè)輸出, 我們可以用一個(gè)指示函數(shù)
代替, 那么我們得到
我們對求偏導(dǎo):
最終, 求實(shí)我們的分類誤差率
上面提到的四個(gè)問題, 基本上都已經(jīng)解決了, 那么Adaboost如何處理回歸問題?
回歸問題, 基本上只用修改誤差就可以了
- 首先我們計(jì)算其在訓(xùn)練集上的最大誤差
- 計(jì)算每個(gè)樣本上的誤差:
- 如果是線性誤差:
- 平凡誤差: 略
- 計(jì)算誤差率
其他步驟都是一樣的
Adaboost正則化
為了防止Adaboost過擬合,我們通常也會(huì)加入正則化項(xiàng):
沒有加正則化:
加了正則化v:
的取值范圍在0~1之間, 更小的
代表我們需要更多的迭代次數(shù)
總結(jié)
理論上任何學(xué)習(xí)器都可以用于Adaboost.但一般來說,使用最廣泛的Adaboost弱學(xué)習(xí)器是決策樹。對于決策樹,Adaboost分類用了CART分類樹,而Adaboost回歸用了CART回歸樹。
Adaboost的主要優(yōu)點(diǎn)有:
- Adaboost作為分類器時(shí),分類精度很高
- 在Adaboost的框架下,可以使用各種回歸分類模型來構(gòu)建弱學(xué)習(xí)器,非常靈活。
- 作為簡單的二元分類器時(shí),構(gòu)造簡單,結(jié)果可理解。
- 不容易發(fā)生過擬合
Adaboost的主要缺點(diǎn)有: - 對異常樣本敏感,異常樣本在迭代中可能會(huì)獲得較高的權(quán)重,影響最終的強(qiáng)學(xué)習(xí)器的預(yù)測準(zhǔn)確性