V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
flyaway
V2EX  ›  问与答

关于机器学习算法AdaBoost的疑惑

  •  
  •   flyaway · 2013-10-13 08:56:35 +08:00 · 4167 次点击
    这是一个创建于 4051 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近在学习AdaBoost算法,算法的基本思路基本是明白的,就是训练多个不同的分类器,最终根据加权的投票结果得出分类目标。但是在具体实现的时候,有个问题我一直不太明白。算法中说:"Train a learner h from D using distribution Dt",就是说在某个权重(分布)Dt下,训练样本。这到底是什么意思?具体如何实现啊?

    每次循环中的分类器的训练数据到底有何不同?这个权重是如何和训练数据产生关系从而训练出不同的分类器?

    网上找了一圈,都没有相关的说明,是我理解得不对还是另有玄机?了解这个算法的大侠帮忙解释一下~~
    19 条回复    2017-01-20 09:43:59 +08:00
    forest520
        1
    forest520  
       2013-10-13 10:34:39 +08:00
    flyaway
        2
    flyaway  
    OP
       2013-10-13 10:55:22 +08:00
    @forest520 这篇文章我之前看过了,基本思路我都了解,但是就是具体实现的时候,我不明白的是,这个权重到底是如何和训练数据发生关系的,权重改变之后,训练数据是如何做出相应改变的,从而使得新训练的分类器能够对上一个分类器分错的点进行更加正确的分类。
    forest520
        3
    forest520  
       2013-10-13 11:18:10 +08:00   ❤️ 1
    @flyaway 很简单,随机抽样得到新的训练集,每个样本被抽中的概率不同
    flyaway
        4
    flyaway  
    OP
       2013-10-13 11:28:16 +08:00
    @forest520 原来是这么简单的啊。能否这样理解:被分错的点在新数据集上出现的概率大,而正确分类的点在新数据集上出现的概率小,但是由于数据集的大小是固定的,所以同样的错误点在新数据集上可能会出现多次,从而加重了这个点对下一个分类器的影响力,相应的,正确的点就被降低了影响力。
    miaoever
        5
    miaoever  
       2013-10-13 11:37:44 +08:00   ❤️ 1
    @flyaway 是这样的,每轮过后分类错误的点权值被加大(可以理解成增加 penalty),分类正确的点权值减小。
    flyaway
        6
    flyaway  
    OP
       2013-10-13 12:16:20 +08:00
    我已经知道给怎么做了~多谢指教!
    txx
        7
    txx  
       2013-10-13 12:52:35 +08:00
    @flyaway 我最近也在学这个东西......之后碰到不会的能请教您么? 把adaboost 搬到iOS上 对我来说 还是不小的挑战性...
    flyaway
        8
    flyaway  
    OP
       2013-10-13 13:26:18 +08:00
    @txx 大家一起学习啊。话说……你的iOS是指什么啊?总不会是苹果的系统吧?
    txx
        9
    txx  
       2013-10-13 22:52:19 +08:00
    @flyaway 当然..........
    flyaway
        10
    flyaway  
    OP
       2013-10-13 22:56:27 +08:00
    @txx …………为什么会在移动终端上运行这种比较耗时的机器学习的算法呢,感觉好奇怪啊
    txx
        11
    txx  
       2013-10-13 23:00:26 +08:00
    @flyaway 第一...不要小看 iOS的计算能力......第二....其实我只是为了识别比较特殊的 正方形....第三 这条路是导师指的
    flyaway
        12
    flyaway  
    OP
       2013-10-14 10:07:54 +08:00
    @txx 长见识了……
    codghost
        13
    codghost  
       2014-04-23 09:50:12 +08:00
    flyaway,你好,我也在做关于adaboost方面的工作,经过你的解释,我理解了好多,但是在具体实现的时候该怎么操作呢,随机抽样,每个样本被抽到的概率不同,这在程序中怎么实现啊,比如说现在只有两个样本,第一次迭代时,每个被抽到的概率为0.5,一次迭代后,如果分别变为0.6,0.4,那在下一步时,怎么抽样呢?
    codghost
        14
    codghost  
       2014-04-23 20:15:12 +08:00
    @forest520,你好,我也在做关于adaboost方面的工作,经过你的解释,我理解了好多,但是在具体实现的时候该怎么操作呢,随机抽样,每个样本被抽到的概率不同,这在程序中怎么实现啊,比如说现在只有两个样本,第一次迭代时,每个被抽到的概率为0.5,一次迭代后,如果分别变为0.6,0.4,那在下一步时,怎么抽样呢?
    forest520
        15
    forest520  
       2014-04-23 21:00:08 +08:00
    @codghost 生成1个随机数a,如果a的取值范围在0-0.6之间就选样本1,0.6-1.0之间。多个样本的思路相同。
    codghost
        16
    codghost  
       2014-04-24 10:43:10 +08:00
    @forest520,谢谢你的解答,你的意思是:从0-1之间产生均匀随机数,然后与权重比较,接近哪个权值就选权值对应的那个样本吧?但是我还是有个疑问,如果迭代第一次,权重都相同,那么你这个方法应该可行,但是如果在第一步每个样本的权重就不相同,比如说有133组数据,前129组的权重都只是0.0039,后5组的权重都为0.1,那么按你的方法,我抽133次样,基本每次都会抽到后5组吧,这该怎么解决呢?大神,求加qq:511837446
    forest520
        17
    forest520  
       2014-04-24 12:31:12 +08:00
    @codghost 不是这样的,比如随机数为0-0.0039之间,就抽取样本1,如果随机数为0.0039-0.0078,就抽取样本2,以此类推,如果随机数为0.5-0.6,就抽取倒数第5个样本,如果随机数为0.9-1,就抽取最后一个样本
    aizhangpp
        18
    aizhangpp  
       2016-12-26 15:03:26 +08:00
    作者,你好。采用这种抽样方法,进行 adaboot 迭代,所训练的强学习器效果好吗?时间这么久了还记得吗,我最近也遇到了一个类似的问题,但是用不用 adaboost 的效果是一样的啊。不知道你的如何?
    flyaway
        19
    flyaway  
    OP
       2017-01-20 09:43:59 +08:00
    @aizhangpp adaboost 中的分类器必须是弱分类器才有效果……在我的实验中,效果还是挺明显的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5417 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 07:11 · PVG 15:11 · LAX 23:11 · JFK 02:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.