我为一个项目实现了Adaboost,但不确定我是否正确理解了adaboost。这是我实现的方法,请让我知道这是否是正确的解释。
现在,我使用adaboost。我对adaboost的解释是,它将找到最终的分类器,作为我在上面训练过的分类器的加权平均值,其作用是找到这些权重。因此,对于每个训练示例,我都有8个预测,并且使用adaboost权重将它们组合在一起。请注意,通过这种解释,弱分类器在adaboost迭代过程中不会重新训练,只对权重进行更新。但是,更新后的权重实际上会在每次迭代中创建新的分类器。
这是伪代码:
all_alphas = []
all_classifier_indices = []
initialize all training example weights to 1/(num of examples)
compute error for all 8 networks on the training set
for i in 1 to T:
find the classifier with lowest weighted error.
compute the weights (alpha) according to the Adaboost confidence formula
Update the weight distribution, according to the weight update formula in Adaboost.
all_alphas.append(alpha)
all_classifier_indices.append(selected_classifier)
在
T
迭代之后,有T
alphas和T
分类器索引;这些T
分类器索引将指向8个神经网络预测向量之一。然后在测试集上,对于每个示例,我都通过对
alpha*classifier
求和来进行预测。我想将adaboost与神经网络结合使用,但是我认为我误解了adaboost算法。
最佳答案
提升摘要:
1-通过使用训练数据训练您的第一个弱分类器
2-训练有素的分类器在一些样本上犯了错误,并对其他样本进行了正确分类。增加错误分类的样本的权重,减少正确分类的样本的权重。使用这些权重重新训练您的分类器,以获得第二分类器。
在您的情况下,您首先必须使用这些更新的权重从数据中重新采样并进行替换,创建新的训练数据,然后在这些新数据上训练分类器。
3-重复第2步T次,并在每个回合结束时,根据公式计算分类器的alpha权重。
4-最终分类器是T个分类器的决策的加权和。
希望从该解释中可以清楚地看出您做错了一点。无需使用新数据集来重新训练网络,而是可以在整个原始数据集中对其进行训练。实际上,您使用的是随机森林类型分类器(除了您使用的是NN而不是决策树)外。
PS:无法保证提升会提高准确性。实际上,到目前为止,我所知道的所有增强方法都无法提高作为弱学习者的NN的准确性(原因是因为增强的工作方式并且需要进行更长时间的讨论)。
关于machine-learning - 神经网络的Adaboost,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35691636/