《机器学习实战》笔记(七):Ch7 - 利用AdaBoost元算法提高分类性能

不想你离开。 提交于 2020-02-01 00:20:25

第七章 利用AdaBoost元算法提高分类性能([代码][ch07])

  • AdaBoost算法的优缺点

    • 优点: 泛化错误率低,易编码,可以应用再大部分分类器上,无参数调整。

    • 缺点: 对离群点敏感。

    • 使用数据类型: 数值型和标称型数据。

  • bagging: 基于数据随机重抽样的分类器构造方法

    在原始数据选择S次后得到S个数据集的一种技术。新数据集和原数据集的大小相等。每个数据集通过原始样本中随机替换得到的。

  • boosting

    • 收集数据:可以使用任意方法。

    • 准备数据:依赖于所使用的弱分类器类型,本章使用的是单层决策树,这种分类器可以处理任何数据类型。当然也可以使用任意分类器作为弱分类器,第2章到第6章中的任一分类器都可以充当弱分类器。作为弱分类器,简单分类器的效果更好。

    • 分析数据:可以使用任意方法。

    • 训练算法: Adaboost的大部分时间都用在训练上,分类器将多次在同一数据集上训练弱分类器。

    • 测试算法:计算分类的错误率。

    • 使用算法:同SVM一样, Adaboost预测两个类别中的一个。如果想把它应用到多个类次后别的场合,那么就要像多类SVM中的做法一样对。

  • 训练算法: 基于错误提升分类器的性能

    AbaBoost算法会不断得重复训练和调整权重的过程,直到悬链错误率为0或者弱分类器的数目达到用户的制定值为止。

  • 基于单层决策树构建弱分类器

    • 伪代码

      • 将minError设置为无穷大

      • 对数据集中的每一个属性

      • 对每个步长(第二层循环):

      • 对每个不等号:

      • 建立一棵单层决策树并利用加权数据集对其进行测试

      • 如果错误率低于minError,则将当前的决策树设为最佳单层决策树

      • 返回最佳单层决策树

  • 根据公式构建Adaboost

    • 伪代码

      • 对每次迭代:

      • 利用buildStump找到最佳的单层决策树

      • 将最佳单层决策树加入数组

      • 计算分类器系数alpha

      • 计算新的权重D

      • 更新累计类别估计值

      • 如果错误率为0.0,跳出循环

  • 例子: 在一个难数据集上应用AdaBoost

    • 收集数据:提供的文本文件。

    • 准备数据:确保类别标签是+1和-1而非1和0。

    • 分析数据:手工检查数据。

    • 训练算法:在数据上,利用adaboosttrainds()画教训练出一系列的分类器。

    • 测试算法:我们拥有两个数据集。在不采用随机抽样的方法下,我们就会对 Adaboost和 Logistic回归的结果进行完全对等的比较。

    • 使用算法:观察该例子上的错误率。不过,也可以构建一个Web网站,让驯马师输入马的症状然后预测马是否会死去。

分类器数目 测试错误率(%) 训练错误率(%)
1 0.28 0.27
10 0.23 0.24
50 0.19 0.21
100 0.19 0.22
500 0.16 0.25
1000 0.14 0.31
10000 0.11 0.33

不同的弱分类器数目情况下的AdaBoost测试和分类错误率。该数据集是个难数据集。通常情况下,AdaBoost会达到一个稳定的测试错误率,而不会随分类器数目的增多而提高

  • 非均衡分类问题

    • 其他分类性能度量指标

      • 正确率

      • 召回率

      • ROC曲线

  • 基于代价函数的分类器决策控制

    除调节分类器的阈值外,代价敏感的学习(cost-sensitive learning)也可用于处理非均衡分类。引入代价信息的方法,在AdaBoost中,可基于代价函数来调整错误权重向量D;在朴素贝叶斯中,可选择具有最小期望代价而不是最大概率的类别作为最后的结果;在SVM中,可在代价函数中对于不同的类别选择不同的参数C。这些做法会给较小类更多的权重,即在训练时,小类当中只允许更少的错误。

  • 处理非均衡问题的数据抽样方法

    就是对分类器的训练数据进行改造。可通过欠抽样(undersampling)和过抽样(oversampling)来实现。过抽样意味着复制样例,或者加入与已有样例相似的点(加入已有数据点的插值点,可能导致过拟合问题)。欠抽样意味着删除样例,此方法的缺点在于确定哪些样例需要进行剔除,在选择剔除的样例中可能携带了剩余样例中并不包含的有价值信息。一种解决方法,选择那些离决策边界较远的样例进行删除。

  • 小节

    多个分类器组合可能会进一步凸显单个分类器的不足,如过拟合问题。若多个分类器间差别显著,可能会缓解这一问题。差别可以是算法本身或者应用于算法上的数据的不同。

    针对错误的调节能力是AdaBoost的长处,AdaBoost函数可以应用于任意能够处理加权数据的分类器。AdaBoost算法十分强大,它能够快速处理其他分类器难以处理的数据集。


代码托管见Github
[ch07]:https://github.com/Lornatang/machine_learning_in_action_py3/tree/master/src/ch07

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!