Opencv Adaboost中的参数选择

Opencv Adaboost中的参数选择,opencv,machine-learning,adaboost,Opencv,Machine Learning,Adaboost,在使用OpenCV for之后,我正在尝试实现自己版本的Adaboost算法(请检查,并获取一些参考资料) 通过阅读所有材料,我提出了一些关于算法实现的问题 1) 我不清楚每个弱学习者的权重是如何分配的 在我指出的所有资料中,选择是a_t=k*ln((1-e_t)/e_t),k是一个正常数,表示特定弱学习者的错误率 在第7页,它说这个特殊的值最小化了一个凸可微函数,但我真的不明白这段话 谁能给我解释一下吗 2) 我对训练样本的权重更新程序有一些疑问 显然,应该这样做,以保证它们仍然是概率分布

在使用OpenCV for之后,我正在尝试实现自己版本的
Adaboost
算法(请检查,并获取一些参考资料)

通过阅读所有材料,我提出了一些关于算法实现的问题

1) 我不清楚每个弱学习者的权重是如何分配的

在我指出的所有资料中,选择是
a_t=k*ln((1-e_t)/e_t)
,k是一个正常数,表示特定弱学习者的错误率

在第7页,它说这个特殊的值最小化了一个凸可微函数,但我真的不明白这段话

  • 谁能给我解释一下吗

2) 我对训练样本的权重更新程序有一些疑问

显然,应该这样做,以保证它们仍然是概率分布。所有参考文献均采用此选项:

D{t+1}(i)=D{t}(i)*e^(-a_ty_ih_t(x_i))/Z_t(其中Z_t是a) 选择标准化因子,以便D_{t+1}是一个分布)

  • 但是,为什么权重更新的特定选择与特定弱学习者的错误率指数相乘
  • 是否有其他可能的更新?如果是的话,是否有证据表明这一更新保证了学习过程的某种优化
我希望这是正确的地方张贴这个问题,如果没有请重定向我
提前感谢您提供的任何帮助。

1)您的第一个问题:

a_t = k * ln( (1-e_t) / e_t )
由于训练数据上的误差由Z_t)alpha)的乘积限定,且Z_t(alpha)是凸的w.r.t.alpha,因此只有一个“全局”最优alpha使误差的上限最小化。这是你如何找到魔法“阿尔法”的直觉

2) 你的第二个问题: 但是,为什么权重更新的特定选择与特定弱学习者的错误率指数相乘

简而言之:找到上述α值的直观方法实际上是提高精度。这并不奇怪:你实际上更信任(通过给予更大的alpha权重)比其他学习者表现更好的学习者,而不信任(通过给予更小的alpha权重)表现较差的学习者。对于那些没有比以前的学习者带来新知识的学习者,您将权重alpha指定为0

有可能证明(见)最终的增强假设产生的训练误差为

exp(-2 \sigma_t (1/2 - epsilon_t)^2 )
3) 你的第三个问题: 是否有其他可能的更新?如果是的话,是否有证据表明这一更新保证了学习过程的某种优化


这很难说。但请记住,这里的更新提高了“训练数据”的准确性(有过度拟合的风险),但很难说它的通用性。

您对凸优化有任何了解吗?如果不是,解释这篇文章需要一段时间(大学优化课程需要一个学期)是的,如果你选择不同的目标函数,可以使用不同的权重更新方案(在凸优化书中查找“目标函数”)。对于不同的权重更新方案,谷歌“LogitBoost”,关于凸优化的指南,请参见@AlexK-我熟悉凸优化,但仍然需要一些解释。你能帮我吗?这是我不久前在AB上做的一个演示:在幻灯片4上,看看你是否可以对Gab w.r.t alpha求一个导数,将其等于0,并得出AdaBoost更新的最佳alpha。这将是你第一个问题的一个很好的起点。@AlexK-thks为你的教程!在过去的几天里,我研究了它,它帮助我理解了一些方面,但并不是每件事都对我来说很清楚……你有没有可能想出一个完整的答案?