Adaboost算法原理
概述: a d a b o o s t adaboost adaboost是集成学习的一种, 意思是建立多个弱分类器, 然后用这些弱分类器的线性加权组合来形成一个强分类器. 什么是弱分类器呢, 就是只比胡猜稍微好一点的分类器, 训练这些弱分类器是一个迭代的过程, 在这个过程里, 下一个弱分类器总是更加关注上一个弱分类器没有分好的数据样本, 以弥补之前弱分类器的不足, a d a b o o s t adaboost adaboost就是类似"以弱搏强”的算法.
一、从零推导adaboost
我们首先有一个弱分类器 h ( x ) h(x) h(x), 它输出的值非 1 1 1即 − 1 -1 −1, h ( x ) ∈ { 1 , − 1 } h(x) \in \{1, -1\} h(x)∈{
1,−1}, a d a b o o s t adaboost adaboost的思路是把这些弱分类器的预测结果都加起来, 然后取他们的均值, 在我们的推导过程中, 假设我们要解决的问题是一个二项分类问题, 则我们要把这些弱分类器都加起来取 s i g n sign sign, 则有:
H ( x ) = s i g n ( ∑ t = 1 T h t ( x ) ) H(x)=sign(\sum_{t=1}^T h^t(x)) H(x)=sign(t=1∑Tht(x))
上式中 H ( x ) H(x) H(x)是一个强分类器, x x x是数据或特征值, t t t指的是弱分类器的个数, 上式的意思是对弱分类器的输出值求和并取 s i g n sign sign, H ( x ) ∈ { 1 , − 1 } H(x) \in \{1, -1\} H(x)∈{
1,−1}
然后我们发现只对弱分类器求和好像少了点什么, 没错, 我们要赋予每个弱分类器不同的权重:
H ( x ) = s i g n ( ∑ t = 1 T α t h t ( x ) ) H(x)=sign(\sum_{t=1}^T \alpha^t h^t(x)) H(x)=sign(t=1∑Tαtht(x))
上式中 α \alpha α指的是第 t t t个弱分类器的权重.
在 a d a b o o s t adaboost adaboost中, 这么多弱分类器, 是凭什么依据划分的呢, 其实每个弱分类器关注的是前面弱分类器没有分对的数据样本, 比如说第 t t t个弱分类器犯了一些错误, 导致有些数据样本没有分对, 那么第 t + 1 t+1 t+1个弱分类器就会更加关注前面没有分对的数据点, 尝试弥补第 t t t个弱分类器的不足.
假设我们有一些数据样本 { ( x 1 , y 1 ) , … , ( x N , y N ) } \{(x_{1},y_{1}),\ldots ,(x_{N},y_{N})\} {
(x1,y1),…,(xN,yN)}, 其中 y i ∈ { − 1 , 1 } y_{i}\in \{-1,1\} yi∈{
−1,1}, N N N是数据样本的个数, 我们要解决的是二项分类问题.
我们需要给每一个数据样本赋一个权重, 以控制每个弱分类器应该更加关注哪些数据样本, 我们需要让下一个弱分类器更加关注它前面的弱分类器没有分对的数据点, 设 x i x_i xi在第 t t t个弱分类器上的权重为 w i t w^t_i wit, 我们首先初始化, 在第 1 1 1个弱分类器上所有数据点的权重都是一样的, 即:
w i t = 1 = 1 N w^{t=1}_i=\frac{1}{N} wit=1=N1
初始化错误率 ϵ \epsilon ϵ为, 比如说 100 100 100个数据点, 分错了40个, 则 ϵ = 0.4 \epsilon=0.4 ϵ=0.4, ϵ \epsilon ϵ取值在 0 0 0到 1 1 1之间:
ϵ = ∑ y i ≠ h i ( x ) 1 N ϵ ∈ [ 0 , 1 ] \epsilon=\sum_{y_i \neq h_i(x)}\frac{1}{N} \quad \epsilon \in [0, 1] ϵ=yi=hi(x)∑N1ϵ∈[0,1]
将 w i w_i wi代入 ϵ \epsilon ϵ, 得出:
ϵ = ∑ y i ≠ h i ( x ) w i ; ∑ w i = 1 (eq. 1) \epsilon=\sum_{y_i \neq h_i(x)}w_i ; \quad \sum w_i =1\tag{eq. 1} ϵ=yi=hi(x)∑wi;∑wi=1(eq. 1)
那我们怎么确定下一个弱分类器需要关注哪些数据样本呢? 当我们定义好当前的弱分类器 h t ( x ) h^t(x) ht(x)之后, 做以下操作:
w i t + 1 = w i t Z e − α t h t ( x i ) y i w^{t+1}_{i}=\frac{w^{t}_{i}}{Z}e^{-\alpha^t h^t(x_i) y_i} wit+1=Zwite−αtht(xi)yi
上式中 Z Z Z是归一化因子, 因为我们想要 ∑ w i = 1 \sum w_i =1 ∑wi=1, 怎么理解这个式子呢, 首先 α \alpha α是正数, 当 h t ( x i ) = y i h^t(x_i)=y_i ht(xi)=yi的时候, h t ( x i ) y i h^t(x_i)y_i ht(xi)y