Adaboost 与神经网络
Adaboost with neural networks
我为一个项目实现了 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 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 算法..
提升总结:
1- 使用训练数据训练你的第一个弱分类器
2-第一个训练的分类器在一些样本上犯了错误,并正确地分类了其他样本。增加错误分类样本的权重,减少正确分类样本的权重。使用这些权重重新训练您的分类器以获得您的第二个分类器。
在您的情况下,您首先必须使用这些更新后的权重从您的数据中进行替换重采样,创建新的训练数据,然后在这些新数据上训练您的分类器。
3-重复第2步T次,每轮结束时,根据公式计算分类器的alpha权重。
4- 最终分类器是 T 个分类器决策的加权和。
希望从这个解释中可以清楚地看出您做错了。您不是使用新数据集重新训练您的网络,而是在整个原始数据集上训练它们。实际上,您有点在使用随机森林类型分类器(除了您使用的是 NN 而不是决策树)集成。
PS:不能保证提升会提高准确性。事实上,到目前为止,我所知道的所有提升方法都未能成功提高 NN 作为弱学习者的准确性(原因是因为提升的工作方式需要更长时间的讨论)。
我为一个项目实现了 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 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 算法..
提升总结:
1- 使用训练数据训练你的第一个弱分类器
2-第一个训练的分类器在一些样本上犯了错误,并正确地分类了其他样本。增加错误分类样本的权重,减少正确分类样本的权重。使用这些权重重新训练您的分类器以获得您的第二个分类器。
在您的情况下,您首先必须使用这些更新后的权重从您的数据中进行替换重采样,创建新的训练数据,然后在这些新数据上训练您的分类器。
3-重复第2步T次,每轮结束时,根据公式计算分类器的alpha权重。 4- 最终分类器是 T 个分类器决策的加权和。
希望从这个解释中可以清楚地看出您做错了。您不是使用新数据集重新训练您的网络,而是在整个原始数据集上训练它们。实际上,您有点在使用随机森林类型分类器(除了您使用的是 NN 而不是决策树)集成。
PS:不能保证提升会提高准确性。事实上,到目前为止,我所知道的所有提升方法都未能成功提高 NN 作为弱学习者的准确性(原因是因为提升的工作方式需要更长时间的讨论)。