决策树的实现会检查节点数是否超过2 * min_samples_leaf,然后才调用分割器,这一切都很好。
接着,在分割器的实现中,按照选择的特征进行排序后,我们有一个while循环,它会遍历所有可能的分割点,并根据不纯度选择最佳分割点:
https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/tree/_splitter.pyx#L401
在我看来,由于这个while循环,完全有可能找不到任何合适的分割点。一个例子是:
Xf = [0,0,0,1]min_samples_leaf = 2
在这种情况下,我们找不到任何合适的分割点,’最佳位置’会默认设置为’结束位置’。我在这里是不是遗漏了什么?
回答:
找到了自己的答案,哈-
如果我们找不到任何合适的分割点,’最佳位置’会默认设置为’结束位置’,但’结束位置’不是一个有效的位置,分割器的调用者会检查这一点,如果发生这种情况,会将自己标记为叶节点。