如果错误率为零,如何计算 alpha (Adaboost)
Posted
技术标签:
【中文标题】如果错误率为零,如何计算 alpha (Adaboost)【英文标题】:How to calculate alpha if error rate is zero (Adaboost) 【发布时间】:2013-02-07 19:58:11 【问题描述】:我一直想知道当 alpha(弱分类器的权重)具有错误率(完美分类)时,它的值应该是多少,因为 alpha 的算法是
(0.5) * Math.log(((1 - errorRate) / errorRate))
谢谢。
【问题讨论】:
【参考方案1】:我遇到过几次这个问题,通常我所做的是检查错误是否等于 0,如果是,则将其设置为等于最小权重的 1/10。这是一个 hack,但通常最终效果很好。
【讨论】:
设置为最小重量的 1/10 是什么意思? 作为 Adaboost 的一部分,您拥有用于训练的示例的权重。这些示例通常在开始时设置为 1/norm,并在 Adaboost 的每次迭代中更新。您的错误只是您的弱分类器不正确的示例的权重之和。如果您的错误为零,只需将其设置为这些权重的最小值的 1/10,从而说明您的分类器非常好(但不完美),它仅在最不重要示例的 1/10 处出错。【参考方案2】:如果您通过重新加权并将整个训练数据传递给弱学习器来进行提升,我会说您找到了一个实际上很强大的弱分类器,毕竟它完美地分类了您的数据。
在这种情况下,它应该发生在第一次 Adaboost 迭代中。将该弱分类器添加到您的强分类器中,并将 alpha 设置为 1,然后停止训练。
现在,如果在您通过重采样进行提升时发生这种情况,并且您的样本只是训练数据的一个子集,我认为您应该丢弃该子集并使用另一个样本重试。
我相信您达到了这样的结果是因为您正在使用一个非常简单的示例,或者您的训练数据集非常小或不具有代表性。也有可能是您的弱分类器太弱并且太快地接近随机猜测。
【讨论】:
【参考方案3】:名义上,零错误的弱分类器的 alpha 应该是大,因为它正确地分类了所有训练实例。我假设您正在使用所有训练数据来估计 alpha。您也可能仅使用该轮提升的训练样本来估计 alpha - 在这种情况下,根据样本大小,您的 alpha 应该稍微小一些 - 但同样的想法。
理论上,如果您的其他 alpha 未归一化,则此 alpha 应该接近无穷大。在实践中,检查您的错误是否为零并为这些 alpha 赋予一个非常高的值的建议是合理的,但零或接近零的错误率通常表明您过度拟合(或者训练数据太少而无法估计可靠的 alpha) .
这在 Adaboost 的Schapire & Singer's Confidence Rated Predictions 版本的第 4.2 节中有介绍。他们建议为您的分子和分母添加一个小 epsilon 以保持稳定性:
alpha = (0.5) * Math.log(((1 - errorRate + epsilon) / (errorRate + epsilon)))
无论如何,这个 alpha 值不应设置为小值(它应该很大)。只有当所有其他轮次提升的所有其他 alpha 都被归一化时,将其设置为 1 才有意义,因此所有 alpha 的总和几乎为 1,例如..
【讨论】:
【参考方案4】:实际上,如果您在预测 Adaboost 时不使用这样的分类器会更好,因为它不会对它有太大的改进,因为它不是一个弱分类器,而且往往会吃掉所有的权重。
【讨论】:
以上是关于如果错误率为零,如何计算 alpha (Adaboost)的主要内容,如果未能解决你的问题,请参考以下文章