Adaboost与神经网络

6

我在项目中实现了Adaboost,但我不确定是否正确理解了Adaboost。这是我的实现过程,请告诉我是否正确。

  1. 我的弱分类器是8个不同的神经网络。每个分类器在完全训练后的准确率约为70%。
  2. 我对所有这些网络进行完全训练,并收集它们在训练集上的预测结果;因此,我有8个训练集预测向量。

现在我使用Adaboost。我对Adaboost的理解是它会将我训练出的8个分类器加权平均得到一个最终的分类器,而它的作用是找到这些权重。因此,对于每个训练示例,我有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 个 alpha 值和 T 个分类器索引;这 T 个分类器索引将指向 8 个神经网络预测向量之一。

然后在测试集上,对于每个示例,通过对 alpha*classifier 进行求和进行预测。

我想使用 AdaBoost 算法与神经网络结合,但我认为我可能误解了 AdaBoost 算法的含义。


那么,实际上会发生什么? - WestCoastProjects
@javadba 精度多少保持不变。我以前没有使用过增强,但我已经读到它总是会将精度提高1到2%.. - sanjeev mk
另一个问题,在 Adaboost 过程中,基本/元分类器必须支持 sample_weight 属性。但神经网络的权重是通过 SGD 或其他优化器更新的。如何向神经网络添加样本权重? - machen
1个回答

11
Boosting概览:
1- 使用训练数据训练第一个弱分类器。
2- 第一个训练好的分类器会对一些样本进行错误分类并正确分类其他样本。增加被错误分类样本的权重并降低正确分类样本的权重。使用这些权重重新训练你的分类器,得到第二个分类器。在你的情况中,你首先需要使用这些更新后的权重进行有放回地重采样数据,创建新的训练数据,然后在这些新数据上训练你的分类器。
3- 重复第二步T次,在每轮结束时,根据公式计算分类器的alpha权重。
4- 最终分类器是T个分类器决策的加权和。
从这个解释中可以清楚地看出,你做错了一点。你没有使用新数据集重新训练你的网络,而是在原始数据集上全都进行了训练。事实上,你正在使用随机森林类型的分类器(除了你使用神经网络代替了决策树)集合。
PS:没有保证boosting增加准确性。事实上,迄今为止我所知道的所有以NN作为弱学习方法的boosting方法都未能成功提高准确性(原因是boosting的工作方式需要更加详细的讨论)。

2
谢谢,我改用adaboost直接提供的权重来计算损失函数。现在每个训练样本的损失都有相应的权重,这些权重来自于adaboost。 - sanjeev mk
1
甚至更好。这是精确的实现,如果你想将其推广到多类别提升,那么它会更加容易。 - TNM
@TNM另一个问题,在adaboost过程中,基分类器(base/meta classifier)必须支持sample_weight属性。但是神经网络的权重是通过SGD或其他优化器更新的。如何将sample-weight添加到神经网络中? - machen
现在的日子变得相当容易了。几乎所有深度学习框架都支持样本权重。无论如何,如果您想自己实现它,最简单的方法是根据样本权重(带替换)绘制训练样本,并将其传递给您的网络。 - TNM
1
@sanjeevmk 你能否给一些解释,如何将adaboost与keras的损失函数相关联。 - Hitesh
我也很期待能够看到演示。 - heresthebuzz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接