为啥我的决策树会创建一个实际上并未划分样本的拆分?

Posted

技术标签:

【中文标题】为啥我的决策树会创建一个实际上并未划分样本的拆分?【英文标题】:Why is my decision tree creating a split that doesn't actually divide the samples?为什么我的决策树会创建一个实际上并未划分样本的拆分? 【发布时间】:2018-10-09 04:39:34 【问题描述】:

这是我对著名的Iris 数据集进行二特征分类的基本代码:

from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier, export_graphviz
from graphviz import Source

iris = load_iris()
iris_limited = iris.data[:, [2, 3]] # This gets only petal length & width.

# I'm using the max depth as a way to avoid overfitting
# and simplify the tree since I'm using it for educational purposes
clf = DecisionTreeClassifier(criterion="gini",
                             max_depth=3,
                             random_state=42)

clf.fit(iris_limited, iris.target)

visualization_raw = export_graphviz(clf, 
                                    out_file=None,
                                    special_characters=True,
                                    feature_names=["length", "width"],
                                    class_names=iris.target_names,
                                    node_ids=True)

visualization_source = Source(visualization_raw)
visualization_png_bytes = visualization_source.pipe(format='png')
with open('my_file.png', 'wb') as f:
    f.write(visualization_png_bytes)

当我检查我的树的可视化时,我发现了这个:

乍一看,这是一棵相当普通的树,但我发现它有些奇怪。节点 #6 总共有 46 个样本,其中只有一个是杂色的,因此该节点被标记为弗吉尼亚。这似乎是一个相当合理的停下来的地方。但是,由于某种我无法理解的原因,该算法决定进一步拆分为节点 #7 和 #8。但奇怪的是,仍然存在的 1 versicolor 仍然被错误分类,因为两个节点最终都具有Virginica 类。为什么要这样做?它是否只是盲目地只看基尼系数的下降,而不看它是否有任何影响——这对我来说似乎是一种奇怪的行为,而且我在任何地方都找不到它的记录。

是否可以禁用,或者这实际上是否正确?

【问题讨论】:

【参考方案1】:

为什么要这样做?

因为它提供了有关样本类别的更多信息。您是对的,这种拆分不会改变任何预测的结果,但模型现在更加确定。考虑节点 #8 中的样本:在拆分之前,模型大约 98% 确信这些样本是弗吉尼亚州。但是,拆分后,模型说这些样本肯定是弗吉尼亚州。

是不是一味地只看基尼系数下降,而不看有没有影响

默认情况下,DecisionTree 会继续分裂,直到所有叶子节点都是纯的。有一些参数会影响分裂行为。但是,它没有明确考虑拆分节点是否会在预测标签方面产生影响。

是否可以禁用,或者这实际上是否正确?

如果拆分产生两个具有相同标签的叶节点,我认为没有办法强制 DecisionTreeClassifier 不拆分。但是通过仔细设置min_samples_leaf 和/或min_impurity_decrease 参数,您可以实现类似的效果。

【讨论】:

以上是关于为啥我的决策树会创建一个实际上并未划分样本的拆分?的主要内容,如果未能解决你的问题,请参考以下文章

Decision tree——决策树

决策树一

为啥这棵决策树在每一步的值不等于样本数?

10、决策树集成--随机森林

R语言应用实战-基于R的C4.5算法和C5.0算法原理解析及应用案例

ID3决策树