机器学习实战 - 读书笔记(07) - 利用AdaBoost元算法提高分类性能

前言

最近在看Peter Harrington写的“机器学习实战”,这是我的学习笔记,这次是第7章 - 利用AdaBoost元算法提高分类性能。

核心思想

在使用某个特定的算法是,有时会发现生成的算法f(x)的错误率比较高,只使用这个算法达不到要求。 这时f(x)就是一个弱算法。 在以前学习算法的过程中,我们认识到算法的参数很重要,所以把公式改写成这样: f(x,arguments) \\ where \\ \qquad x \text{ : calculated data} \\ \qquad arguments \text{ : function arguments} 一个思路是通过多个弱算法组合形成一个强算法来满足需求。 训练多个弱算法的思路如下:

  • 根据样本数据,求出f(x,arguments_1)
  • 调整样本数据:将满足匹配f(x,arguments_1)的样本数据的权重调低,将不满足匹配f(x,arguments_1)的样本数据的权重调高。
  • 重复以上步骤,训练出多个弱算法算法f(x,arguments_1), ..., f(x,arguments_n),直到这些弱算法组合的错误率等于0,或者小于指定值为止。

这个思路称之为Adaboost算法,是对其它算法组合的一种方式。 我们可以看出弱算法是同类的算法,也就是说,它们是基于相同的算法,只不过参数不同。这样元算法在训练算法的步骤中就好容易控制。 注:也有其它的的元算法,可以针对不同算法的。

基本概念

  • 元算法(meta-algorithm),是对其它算法组合的一种方式。也称为集成方法(ensemble method)。
  • 弱算法:准确度较低的算法。元算法通过组合多个弱算法来提高准确率。
  • 强算法:可以认为是组合后的算法。
  • boosting : 是一种元算法,将多个弱算法变成强算法的算法族。除了AdsBoost,还有LPBoost, TotalBoost, BrownBoost, xgboost, MadaBoost, LogitBoost, and others.
  • Adaboost : Adaptive Boosting的简称。一个具体的boosting算法。本章就是介绍这个算法。

详解Adaboost

说明:书中弱算法是一个单层决策树算法,返回的是一个二类分类结果(-1, 1)。所以书中Adaboost也是一个二类分类算法。

Adaboost训练算法

  • 输入
    • 样本数据
    • 弱算法的数量
  • 输出
    • 一个弱算法数组(弱算法参数,弱算法权重\(\alpha_i\))
  • 逻辑 在一个迭代中(弱算法数量) 计算当前算法的参数 计算当前算法的错误率 计算当前算法的权重 计算下次样本数据的权重 计算当前的样本数据错误数,如果是0,退出。
  • 核心数学公式
    • 训练算法 - 计算弱算法f_i(x)的权重\alpha_i: \alpha_i = \begin{cases} \frac{1}{2}ln \left (\frac{1 - \epsilon_i}{\epsilon_i} \right), & \text{if} \epsilon_i > C \\ \frac{1}{2}ln \left (\frac{1 - \epsilon_i}{C} \right), & \text{if} \epsilon_i \leqslant C \end{cases} \\ where \\ \qquad \epsilon_i = \frac{count(\text{wrong classified samples})}{count(\text{all samples})} \text{ : error rate of function i} \\ \qquad C \text{ : constant }\ e^{-16} 解释:为什要用自然对数? 个人认为在权重方面,自然对数和log_2,log_{10}性质上是一样的,它们的结果是等比例的。 数学家倾向于使用自然对数。 求对数是可以将数据关系线性化。比如log_{10}1000 = 3, log_{10}100 = 2, log_{10}10 = 1.
    • 训练算法 - 调整样本数据:每条样本数据的权重D_1 D_i^{'(t)} = \begin{cases} D_i^{(t)}e^{-\alpha}, & \text{if the sample is classified correctly} \\ D_i^{(t)}e^{\alpha}, & \text{if the sample is not classified correctly} \end{cases} \\ D_i^{(t+1)} = \frac{D_i^{'(t)}}{\textstyle \sum_{j=1}^n D_j^{'(t)}} \\ where \\ \qquad \alpha \text{ : weight of current weak function} \\ \qquad D \text{ : is a vector, the length is the length of samples data} \\ \qquad D_i \text{ : is weight value of sample data i} \\ \qquad D_i^{(t)} \text{ : is weight value of sample i for this function} \\ \qquad D_i^{(t+1)} \text{ : is weight value of sample i for next week function} 解释: 假如有1000个sample,有100个sample被分错类,则: \begin{array}{lcl} \epsilon & =\frac{100}{1000} \\ \alpha & = \frac{1}{2}ln \left(\frac{1 - \frac{100}{1000}}{\frac{100}{1000}} \right) \\ & = \frac{1}{2}ln(9) \\ D_{correct}^{'} & = 1 * e^{-\frac{1}{2}ln(9)} \\ & = \frac{1}{e^{\frac{1}{2}} * 9} \\ D_{incorrect}^{'} & = 1 * e^{\frac{1}{2}ln(9)} \\ & = e^{\frac{1}{2}} * 9 \\ \frac{D_{incorrect}^{'}}{D_{correct}^{'}} & = e * 9 ^ 2 \end{array} 可以看出错误的sample占的比例越小,下次的权重是二次方级数增大。

Adaboost分类算法

  • 输入
    • 分类数据
    • 弱算法数组
  • 输出
    • 分类结果
  • 逻辑 在一个迭代中(弱算法数量) 用当前弱算法计算分类结果$classified_i$ 计算强分类结果(使用下面的公式) 返回分类结果
  • AdaBoost分类器中计算公式 \textstyle \sum_{i=1}^n \alpha_if_i(x) \\ where \\ \qquad \alpha_i \text{ : weight of weak function i} \\ \qquad f_i(x) \text{ : weak function i}

参考

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏计算机视觉战队

每日一学——卷积神经网络

注:该篇幅参考斯坦福大学的教程,有兴趣的朋友可以去阅读。 卷积神经网络(CNN) 卷积神经网络和前几次介绍的神经网络非常相似:它们都是由神经元组成,神经元中有具...

37880
来自专栏AI科技大本营的专栏

深度学习入门必须理解这25个概念

1)神经元(Neuron):就像形成我们大脑基本元素的神经元一样,神经元形成神经网络的基本结构。想象一下,当我们得到新信息时我们该怎么做。当我们获取信息时,我们...

13030
来自专栏机器学习算法与Python学习

深度学习必须理解的25个概念

16660
来自专栏机器之心

深度 | 图像语义分割的工作原理和CNN架构变迁

更具体地讲,语义图像分割的目标在于标记图片中每一个像素,并将每一个像素与其表示的类别对应起来。因为会预测图像中的每一个像素,所以一般将这样的任务称为密集预测。

21800
来自专栏数据科学与人工智能

【算法】聚类算法

小编邀请您,先思考: 1 有哪些算法可以聚类?各自有什么特点? 2 聚类算法的效果如何评价? 1 定义 聚类是数据挖掘中的概念,就是按照某个特定标准(如距离)把...

477130
来自专栏机器之心

入门 | 一文概览深度学习中的卷积结构

41950
来自专栏人工智能LeadAI

用于语义分割的全卷积网络

? 摘要 卷积网络在特征分层领域是非常强大的视觉模型。我们证明了经过端到端、像素到像素训练的卷积网络超过语义分割中最先进的技术。我们的核心观点是建立“全卷积”...

43650
来自专栏SIGAI学习与实践平台

神经网络的激活函数总结

激活函数在神经网络中具有重要的地位。在SIGAI之前的公众号文章“理解神经网络的激活函数”中,我们回答了3个关键的问题:

10220
来自专栏AI研习社

SSD(单次多盒检测)用于实时物体检测

卷积神经网络在检测图像中的物体时优于其他神经网络结构。很快,研究人员改进了 CNN 来进行对象定位与检测,并称这种结构为 R-CNN(Region-CNN)。R...

13220
来自专栏机器之心

入门 | 一文概览深度学习中的激活函数

32680

扫码关注云+社区

领取腾讯云代金券