构建决策树
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 时,才会发生这种情况,但它是在决策树中创建叶子的停止标准。
构建决策树时,在每个节点,我们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 时,才会发生这种情况,但它是在决策树中创建叶子的停止标准。