我已经实现了AdaBoost增强算法的一个版本,我将决策树桩用作弱学习者。然而,经常我发现在训练AdaBoost算法之后,会创建一系列弱学习者,这样这个系列就会在整个集合中重复出现。例如,在训练之后,弱学习者的集合看起来像A,B,C,D,E,D,E,D,E,D,E,F,E,D,E,D,E
等。
我相信每次分配一个新的弱学习者后我都会正确更新数据的权重。在这里,我对每个数据点进行分类,然后设置此数据点的权重。
// After we have chosen the weak learner which reduces the weighted sum error by the most, we need to update the weights of each data point.
double sumWeights = 0.0f; // This is our normalisation value so we can normalise the weights after we have finished updating them
foreach (DataPoint dataP in trainData) {
int y = dataP.getY(); // Where Y is the desired output
Object[] x = dataP.getX();
// Classify the data input using the weak learner. Then check to see if this classification is correct/incorrect and adjust the weights accordingly.
int classified = newLearner.classify(x);
dataP.updateWeight(y, finalLearners[algorithmIt].getAlpha(), classified);
sumWeights += dataP.getWeight();
}
这是WeakLearner类中的classify方法
// Method in the WeakLearner class
public int classify(Object[] xs) {
if (xs[splitFeature].Equals(splitValue))
return 1;
else return -1;
}
然后我有一个更新DataPoint重量的方法
public void updateWeight(int y, double alpha, int classified) {
weight = (weight * (Math.Pow(e, (-y * alpha * classified))));
}
而且我不确定为什么会发生这种情况,是否有任何共同的因素通常会选择相同的弱学习者?
答案 0 :(得分:0)
您可以增加alpha的值并检查。也许,没有给错误分类的样本足够的权重,因此它们一次又一次地出现。