Boosting集成学习方法-----机器学习

Boosting

之前的博文中我们提到过Boosting集成学习方法是个体学习器串行的序列化方法,这种方式中个体学习器存在强依赖的关系。

该方法的工作机制:我们先从初始的训练集中训练出一个基学习器,然后根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多的关注,然后基于调整后的样本分布来训练下一个基学习器;如此反复进行,直至基学习器数目达到了事先指定的值T,最后将这T个基学习器进行加权结合。我们看一个例子,加深我们对这种方式的理解。

Boosting集成学习方法-----机器学习

 如图所示,我们使用回归任务作为一个例子,在最开始,我们的样本分布权重都是一样的,也就是说受到的关注是一样的,在第一幅图中,我们训练了一个学习器来拟合我们的样本,然后计算误差,发现有些样本也不是完全适应我们训练出来的这个学习器,然后我们就对这些样本加以更大的关注,也就是分配更大的权重给这些样本,然后我们训练第二个学习器再来拟合这些样本,同样计算误差,也发现有些样本不完全适应我们这个学习器,然后再对这些样本赋予更大的权重,训练第三个学习器知道个体学习器的数量达到了T,否则就一直循环上述的过程,这个例子应该加深了我们对Boosting的理解,也能够知道为什么这是串行的方式,因为个体学习器之间有着很强的依赖关系,我们只有训练了前一个学习器,对样本的权重进行调整之后,才能训练下一个分类器。

Boosting族算法中最著名的代表是AdaBoost,比较容易理解的是基于“加性模型”,即基学习器的线性组合:

Boosting集成学习方法-----机器学习

上述中Boosting集成学习方法-----机器学习是个体学习器,Boosting集成学习方法-----机器学习是相应的个体学习器的权重,最开始就说了Boosting方式是将最后的结果进行加权结合,并非简单的投票法,上面这个式子应该不难理解。

西瓜书上还有一堆公式来说明,李航的《统计学习方法》中给了一个AdaBoost方式的例子。我们先看看AdaBoost的集成步骤,然后再一起看看《统计学习方法》中的例子加深理解。

AdaBoost算法

训练数据集Boosting集成学习方法-----机器学习,其中Boosting集成学习方法-----机器学习

输入:训练数据集Boosting集成学习方法-----机器学习

输出:最终分类器Boosting集成学习方法-----机器学习

1. 在上面提过,通过增加样本的权重来使得学习器更加知道哪些样本在上一次中分错了,所以最开始的时候,我们初始化训练数据的权值,大家在最开始受到的关注都是一样的:

Boosting集成学习方法-----机器学习

这个权重分布应该是能够理解的。

2. 使用具有 权重分布Boosting集成学习方法-----机器学习的训练数据集学习,其中m=1,2,...,M,这样得到一个基分类器:

Boosting集成学习方法-----机器学习

3. 计算Boosting集成学习方法-----机器学习在训练数据集上的分类误差率:

Boosting集成学习方法-----机器学习

注意:分类误差率不仅仅是分类错误个数的统计,还要乘以对应的样本的权重。

4. 计算Boosting集成学习方法-----机器学习的系数,上面我们提到Boosting的最终结果是加权求和,所以每个学习器都带有一个系数,系数越大,也就是说这个学习器的结果对最后的结果影响更大,系数越小也就是说这个学习器对最后的结果影响越小:

Boosting集成学习方法-----机器学习

5. 然后更新训练数据集的权值分布,方便下一个学习器的训练:

Boosting集成学习方法-----机器学习

其中Boosting集成学习方法-----机器学习是规范化因子:

Boosting集成学习方法-----机器学习

6. 重复上述的步骤,知道个体学习器的个数达到了最初设定的数量M。

7. 训练好了M个个体学习器之后,构建基本分类器的线性组合:

Boosting集成学习方法-----机器学习

因为我们完成的是分类任务,最终的输出结果希望是-1/+1,所以我们最终的分类器是:

Boosting集成学习方法-----机器学习

其中sign(x)是一种符号函数,其数学含义如图:

Boosting集成学习方法-----机器学习

以上就是AdaBoost算法的步骤,其实并不难理解,公式也没有西瓜书上的那么难懂,一步一步看下来,受益匪浅。接下来我们就举个例子来计算一遍。 

举例

Boosting集成学习方法-----机器学习

以上是我们这个例子中用到的训练样本,总共有10个样本,其中x为样本的属性,y为样本的类别标签:-1/+1。我们按照Adaboost方式走一遍步骤,然后再理解公式。

首先,样本数据的权重是一样的,也就是说受到关注的程度是一样的,我们初始化数据权重的分布:

Boosting集成学习方法-----机器学习

Boosting集成学习方法-----机器学习是带有权重的样本,最开始大家的权重都是一样的,因为是10个样本,所以权重都是0.1,那么在样本Boosting集成学习方法-----机器学习上我们训练我们的第一个个体学习器。对于上面的训练集,我们对x设置不同的阈值来进行分类,那我们取什么阈值才能确保当前的分类结果是最好的?? 那就一个一个试试,如当阈值为1.5的时候,我们判断x<1.5的时候为+1类,x>=1,5的时候为-1类,这样一来,我们会发现我们将序号为2,3,7,8,9这5个样本分错了,这个时候误差率达到了50%;然后我们再计算阈值为2.5的时候分类的误差率,直到计算出阈值为9.5的时候分类的误差率,哪个误差率最下,我们就选择哪个阈值,如此一来,我们的第一个个体学习器算是训练完成,大家可以自己去计算一下,最后是阈值为2.5的时候,误差率最小,所以第一个基分类器为:

Boosting集成学习方法-----机器学习

我们可以计算出来基分类器Boosting集成学习方法-----机器学习在训练数据集上的误差率,我们要记得在计算误差率的时候,不单单是统计误分类的样本个数,而是要乘上对应的权重:

Boosting集成学习方法-----机器学习

接下来我们根据公式计算基分类器Boosting集成学习方法-----机器学习的系数:

Boosting集成学习方法-----机器学习

第一个基分类器训练完成,然后训练下一个基分类器,这个时候我们需要将样本重新赋予权重,在对上一个基分类器中被误分类的样本赋予更大的权重:

Boosting集成学习方法-----机器学习

 在权值分布为Boosting集成学习方法-----机器学习的训练数据集上,训练新的误差率最小的分类器:

Boosting集成学习方法-----机器学习

同样计算Boosting集成学习方法-----机器学习Boosting集成学习方法-----机器学习训练集上的误差率:Boosting集成学习方法-----机器学习,然后计算Boosting集成学习方法-----机器学习的系数Boosting集成学习方法-----机器学习。这样一来Boosting集成学习方法-----机器学习分类器就训练好了,然后再训练下一个分类器,这个时候同样我们需要更新样本的权重分布:

Boosting集成学习方法-----机器学习

在权重分布为Boosting集成学习方法-----机器学习的训练数据集上,训练新的误差率最小的分类器:

Boosting集成学习方法-----机器学习

计算Boosting集成学习方法-----机器学习在权重分布为Boosting集成学习方法-----机器学习的训练数据集的误差率Boosting集成学习方法-----机器学习Boosting集成学习方法-----机器学习的系数Boosting集成学习方法-----机器学习。然后再训练下一个基分类器,这个时候同样更新数据的权重分布:

Boosting集成学习方法-----机器学习

 并且:

Boosting集成学习方法-----机器学习

这个时候的Boosting集成学习方法-----机器学习 在训练集上误分类的点的个数为0,所以不需要再训练基分类器了,于是最终的分类器为:

Boosting集成学习方法-----机器学习

这个就是AdaBoost的例子,清楚步骤之后,都是现成的公式,计算这个例子的时候,直接套用公式就行,当然,有兴趣的可以根据这个例子,编写代码,加深印象。 

最后小小的总结一下,Boosting集成方式中基分类器的好而不同表现在哪里,首先好表现在,每次训练的基分类器都是在误差率最小的基础上训练出来的,不同表现在每次训练基分类器的样本分布的权重不一样,样本不一样,训练出来的基分类器自然不一样。