AdaBoost反复选择同样弱的学习者

时间:2018-04-07 17:45:02

标签: c# machine-learning decision-tree adaboost boosting

我已经实现了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))));
}

而且我不确定为什么会发生这种情况,是否有任何共同的因素通常会选择相同的弱学习者?

1 个答案:

答案 0 :(得分:0)

您可以增加alpha的值并检查。也许,没有给错误分类的样本足够的权重,因此它们一次又一次地出现。