Mat*_*teo 9 opencv machine-learning adaboost
在使用OpenCV进行提升之后,我正在尝试实现我自己的Adaboost
算法版本(请点击此处,此处和原始论文以获取一些参考资料).
通过阅读所有材料,我提出了一些关于算法实现的问题.
1)我不清楚如何分配每个弱学习者的权重a_t.
在我所指出的所有来源中,选择是a_t = k * ln( (1-e_t) / e_t )
,k是一个正常数,而e_t是特定弱学习者的错误率.
在这个来源的第7页,它说该特定值最小化某个凸可微函数,但我真的不明白这段经文.
有人可以向我解释一下吗?
2)我对训练样本的重量更新程序有一些疑问.
显然,应该以这样的方式来保证它们仍然是概率分布.所有参考文献都采用这种选择:
D_ {t + 1}(i)= D_ {t}(i)*e ^( - a_t y_i h_t(x_i))/ Z_t(其中Z_t是选择的归一化因子,使得D_ {t + 1}是分布).
我希望这是发布此问题的正确位置,如果没有请重定向我!
提前感谢您提供的任何帮助.
1)您的第一个问题:
a_t = k * ln( (1-e_t) / e_t )
Run Code Online (Sandbox Code Playgroud)
由于训练数据上的误差以 Z_t)alpha) 的乘积为界,并且 Z_t(alpha) 对于 alpha 是凸的,因此只有一个“全局”最优 alpha 可以最小化误差的上限。这就是你如何找到神奇“阿尔法”的直觉
2)你的第二个问题:但是为什么权重更新的特定选择与特定弱学习器的错误率指数相乘?
简而言之:找到上述alpha的直观方法确实是提高准确性。这并不奇怪:您实际上对比其他人表现更好的学习者更加信任(通过给予更大的 alpha 权重),而对那些表现较差的学习者信任度较低(通过给予更小的 alpha 权重)。对于那些比之前的学习者没有带来新知识的学习者,您将权重 alpha 指定为 0。
可以证明(参见)最终的提升假设产生的训练误差为
exp(-2 \sigma_t (1/2 - epsilon_t)^2 )
Run Code Online (Sandbox Code Playgroud)
3)你的第三个问题:还有其他可能的更新吗?如果是的话,是否有证据表明此更新保证了学习过程的某种最优性?
这很难说。但请记住,这里的更新是提高“训练数据”的准确性(存在过度拟合的风险),但很难说它的普遍性。