我对AdaBoost算法还不太熟悉。在sklearn中,SAMME算法的_boost_discrete()函数返回分类器的权重为”estimator_weight“
def _boost_discrete(self, iboost, X, y, sample_weight): ....... return sample_weight, estimator_weight, estimator_error
但是,对于SAMME.R算法,”_boost_real()”函数返回的是’1’,而不是分类器的权重。
def _boost_real(self, iboost, X, y, sample_weight): ....... return sample_weight, 1., estimator_error
我的问题是为什么SAMME.R算法返回的estimator_weight是’1’。我参考了文献[1]。请帮助我理解这个算法。提前感谢。
参考文献:[1]J. Zhu, H. Zou, S. Rosset, T. Hastie, “Multi-class AdaBoost”, 2009.
回答:
以下是我对SAMME.R算法中权重可能被设置为’1’的原因的理解,参考了2006年的Multi-class Adaboost论文。你提到的2009年论文中并没有包括SAMME.R算法。
在该论文(2006年)中,sample_weight
用w表示,estimator_weight
用alpha表示。
如果你查看算法2 SAMME
一旦w和alpha被学习后,新的样本将根据C(x)进行分类。请注意,estimator_weight
(alpha^(m))出现在C(x)中,可以解释为弱学习器m更新的强度。
现在让我们看算法4 SAMME.R。
请注意,estimator_weight
(alpha)在这个算法中没有任何出现。相反,弱学习器通过加权类概率估计来表征,新的样本根据这个新的C(x)进行分类。尽管estimator_weight
(alpha)没有直接出现在C(x)中,但可以将其放在h_k^(m)(x)前面(作为乘数),并定义所有alpha为1:
这导致所有estimator_weight
在训练结束时取值为1。