前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >机器学习的Boosting技术(以AdaBoost为例)

机器学习的Boosting技术(以AdaBoost为例)

作者头像
ArrayZoneYour
发布2018-02-06 14:58:39
1.8K0
发布2018-02-06 14:58:39
举报

Boosting(提升,提高)是一种集成技术,它通过综合多个弱分类器来获得一个强的分类器。

本文将探究机器学习中的AdaBoost集成方法,本文要解决的问题如下:

  • boosting集成技术是什么,它的工作原理是什么
  • 如何学习使用AdaBoost算法来提升决策树的性能
  • 如何使用训练得到的AdaBoost模型进行预测
  • 为了使用AdaBoost算法,我们在数据准备上应该注意什么

本文针对没有数理和统计基础的开发者编写,主要介绍算法的工作原理以及如何将之应用于预测问题的建模当中。

Boosting集成技术

Boosting在机器学习中通常指通过综合多个弱分类器来得到一个强分类器的集成技术。

在Boosting集成技术中,后面加入模型的目的主要是纠正前面模型的错误,直到达到性能标准或者模型的数量达到设置的上限。

AdaBoost是二分类问题中非常成功的Boosting算法。对于理解Boosting算法来说,以它来入门是最适合不过的了。

现代的boosting技术都是构建在AdaBoost基础上的,尤其是随机梯度提升机(stochastic gradient boosting machines)

从数据中训练得到AdaBoost模型

AdaBoost在提升决策二分类的性能上表现最为出色。

最初的AdaBoost被它的提出者Freund和Schapire称为AdaBoost.M1。由于它更多被用于解决分类问题而不是回归问题,现在人们也称作离散AdaBoost。

AdaBoost技术可以用来提升任何机器学习算法的性能,通常被用于弱学习器(在分类问题中表现为预测正确率就比随机预测高一点)上。

最常与AdaBoost搭配使用的算法是层级为1的决策树,由于单层的决策树只包含一个决策节点,也被称作决策树桩。

训练数据集中的每一个实例都被赋予了权重,初始的权重设置为:

代码语言:txt
复制
weight(xi) = 1 / n

xi:第i个训练实例,n:训练实例的数量。

如何训练一个模型

在赋予了权重的训练数据上可以训练得到弱分类器(决策树桩)。一般只讨论二分类问题,每个决策树桩在接受输入后输出该数据对应的类别为+1(正例)或-1(反例)。

我们可以训练结束得到模型的误分类率,计算公式如下:

代码语言:txt
复制
error = (correct -  N) / N

error:误分类率,correct:模型正确分类的实例数,N:训练实例数。例如,如果模型正确预测了100个训练实例中的78个,则误分类率可以写作(78-100)/ 100或0.22。

在为实例设置权重后,上述公式可以改写为:

代码语言:txt
复制
error = sum(w(i) * terror(i)) / sum(w)

加权和为模型的误分类率,w(i):第i个训练实例的权重,terror:第i个训练实例的预测误差,如果错误分类则为1,如果正确分类则为0。

例如,如果我们有3个权重为0.01,0.5和0.2的训练实例。预测值是-1,-1和-1,真实值是-1,1和-1,那么terror的值是0,1,0.可以通过上面的公式计算误分类率:

代码语言:txt
复制
error =(0.01 * 0 + 0.5 * 1 + 0.2 * 0)/(0.01 + 0.5 + 0.2)

代码语言:txt
复制
error = 0.704

下面计算另一个中间量来更新实例的权重。我们将该值定义为stage,计算表达式如下:

代码语言:txt
复制
stage = ln( (1-error) / error)

ln():自然对数,error:模型的误分类率。预测正确的实例所占权重越大,stage的值越大。

利用stage值的这一特性,我们可以赋予预测错误的实例更大的权重占比,相应地,预测正确的实例权重占比就会下降,模型就会更偏向于对错误样本作出纠正而不是保持正确样本预测结果的稳定性。

我们可以通过下面的形式来实现我们所需的更新:

代码语言:txt
复制
w = w * exp(stage * terror)

w:当前训练实例的权重,exp():数值常数e的指数函数,terror:当前实例的预测误差,计算表达式:

代码语言:txt
复制
terror = 0,(Y == P),else 1

Y为实例的真实值,P为分类器的预测值。

如果该实例被正确分类,则权重值不变,反之权重值增大。

AdaBoost集成技术

依次加入弱学习器并用赋予权重的训练数据进行训练。

该过程将一直持续到达到指定的弱分类器数量或者不能在训练数据集上进一步提升性能为止。

该过程完成后,你将获得一批弱学习器以及它们对应的stage值。

使用AdaBoost方法进行预测

AdaBoost利用弱分类器的加权平均值进行预测。

对于新的输入实例,每个弱学习器的预测值为+1.0或-1.0。通过stage值可以求得各个弱学习器的加权值。各个预测结果的加权和将作为最终的预测结果。如果加权和为正,则为正例,加权和为负为反例,为零可以放弃预测或者输出任意值。

举例说明:如果我们有五个弱分类器,弱分类器的输出分别为1.0,1.0,-1.0,1.0,-1.0。如果从多数投票规则来看应该将实例划分至正例。如果此时他们的stage值为0.2,0.5,0.8,0.2,0.9。计算加权和为-0.8,模型将输出反例的预测结果。

为AdaBoost模型准备数据

本节列出了一些具有启发性的方法供读者参考:

  • 保证数据质量:因为集成方法会不断尝试纠正训练数据中的误分类实例,所以一定要保证训练数据是高质量的。
  • 移除离群/异常数据:异常值或者离群值会不断迫使模型去拟合一些不现实的数据,因此我们需要将这些异常/离群值从训练集中移除。
  • 清洗含噪数据:噪声数据,特别是输出变量中的噪声可能会带来很多问题。如果可以的话,尝试从训练数据集中分离噪声,清洗这些数据。

延伸阅读

下面是一些从机器学习角度描述AdaBoost的章节段落:

下面为想深入研究AdaBoost的理论基础的读者准备了相关的优秀文章:

总结回顾

在这篇文章中涉及了以下内容:

  • Boosting技术,以及它是如何通过增加弱学习器来纠正误分类结果的。
  • AdaBoost的成功应用:在二分类问题上提升分类性能。
  • 综合stage权重和弱学习器来实现AdaBoost模型。
  • 使用AdaBoost模型来进行预测。
  • AdaBoost算法相关资源。
评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Boosting集成技术
  • 从数据中训练得到AdaBoost模型
  • 如何训练一个模型
  • AdaBoost集成技术
  • 使用AdaBoost方法进行预测
  • 为AdaBoost模型准备数据
  • 延伸阅读
  • 总结回顾
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档