美文网首页《机器学习实战》(附源代码!)
《机器学习实战》笔记(七):Ch7 - 利用AdaBoost元算

《机器学习实战》笔记(七):Ch7 - 利用AdaBoost元算

作者: Lornatang | 来源:发表于2018-05-22 21:02 被阅读57次

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

    • 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

    相关文章

      网友评论

        本文标题:《机器学习实战》笔记(七):Ch7 - 利用AdaBoost元算

        本文链接:https://www.haomeiwen.com/subject/vcdcjftx.html