我为一个项目实现了Adaboost,但我不确定我是否正确理解了Adaboost。以下是我实现的内容,请告诉我这是否是正确的解释。
- 我的弱分类器是8个不同的神经网络。这些网络在完全训练后预测准确率约为70%。
- 我完全训练了所有这些网络,并收集了它们对训练集的预测结果;所以我有8个关于训练集的预测向量。
现在我使用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 setfor 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
个alpha和T
个分类器索引;这些T
个分类器索引将指向8个神经网络预测向量中的一个。
然后在测试集上,对于每个样本,我通过对alpha*classifier
求和来预测。
我想使用Adaboost与神经网络,但我认为我对Adaboost算法的理解是错误的..
回答:
Boosting总结:
1- 使用训练数据训练你的第一个弱分类器
2- 第一个训练的分类器会对一些样本出错,而对其他样本正确分类。增加错误分类的样本的权重,降低正确分类的样本的权重。使用这些权重重新训练你的分类器,以获得你的第二个分类器。
在你的情况下,你首先需要根据这些更新的权重从你的数据中进行有放回的重抽样,创建新的训练数据,然后在这些新数据上训练你的分类器。
3- 重复第2步T次,并在每一轮结束时,根据公式计算分类器的alpha权重。4- 最终分类器是T个分类器决策的加权和。
希望从这个解释中可以清楚地看出,你的做法有点错误。你没有用新的数据集重新训练网络,而是对原始数据集进行了训练。实际上,你使用的是类似于随机森林类型的分类器(只是你使用的是神经网络而不是决策树)集成。
附注:提升方法并不能保证提高准确性。事实上,到目前为止,我所知道的所有使用神经网络作为弱学习器的提升方法都没有成功提高准确性(原因是提升方法的工作方式,需要更长的讨论)。