构建决策树

Building a Decision Tree

构建决策树时,在每个节点,我们select最好的特征,然后是该特征的最佳分裂位置。 但是,当当前节点/集合中样本的最佳特征的所有值都为 0 时,我该怎么办?所有样本都被分组到一侧(<= 0 分支),并发生无限循环。 例如:

#left: 1500, #right: 0

那么,

#left: 1500, #right: 0

等等...

仅供参考,我遵循以下伪代码。

GrowTree(S)
if (y_i = C for all i in S and some class C) then {
 return new leaf(C)                             
 } else {
 choose best splitting feature j and splitting point beta (*)
 I choose the one that gives me the max entropy drop
 S_l = {i : X_ij < beta}                           
 S_r = {i : X_ij >= beta}
 return new node(j, beta, GrowTree(S_l), GrowTree(S_r))

}

这根本不可能。你应该 select 阈值,这会导致模型确定性的最大增加。使用将每个实例都放在同一分支中的阈值可以使模型确定性增加 0,因此这不是最佳拆分。当且仅当 impurity/entropy 在此特征中已经为 0 时,才会发生这种情况,但它是在决策树中创建叶子的停止标准。