问题如下所示
来源:12-3 使用信息熵寻找最优划分

莫非你好棒
2018-08-12
想问一下,信息熵是否是分开之后两个子类各自的信息熵之和,如果是的话为啥第二次的两个子类之和是0.4左右而不是0.69
还有一个问题,就是通过sklearn得到的决策树之后,如何看该决策树的信息熵是多少
非常感谢!
1回答
-
随着逐渐的分类,信息熵降低,就对了!我们决策树的划分过程,就是为了不断降低信息熵:)
再回忆一下,信息熵描述的就是系统的“混乱”程度,信息越混杂,信息熵越高。在决策树划分的过程中,就是将原始包含混杂信息的样本,慢慢抽离开,随着逐渐的划分,在每个节点,将越来越单纯的只聚集某一类样本。可以设想这种极端情况:如果我们的决策树不设立最高的层数和每个节点的最小样本个数,最终,决策树最底层的每个节点,都将只包含同类样本,此时信息熵降为0:)
在决策树某一个节点分开以后,严格来说,信息熵不是分开的两个子类各自信息熵的和,而是加权和,其中的权值是每个子类的样本个数占总样本的比例。这点课程视频中实验里有误。具体可以参考这个问答:https://coding.imooc.com/learn/questiondetail/68117.html 不过这个计算在我们的测试用例中不会影响最终的计算结果(也正是因为如此,我没有发现它:-(),所以我们的理论部分是没有错误的。请一定理解:决策树逐渐划分的过程,就是为了减少信息熵。
---
sklearn中的DecisionTreeClassifier中没有提供一个接口,可以直接访问其中每一个节点的信息熵。DecisionTreeClassifier将自动根据传入的训练数据集内容,最小化信息熵,建立出整棵决策树,用于后续的预测。
不过,DecisionTreeClassifier提供了tree_属性,可以获得这棵决策树,进而你可以以你自己希望的方式遍历这棵决策树,获得你希望获得的信息(包括每个节点的信息熵,当然,你需要把每个节点的信息整合,然后计算出相应的信息熵,决策树本身依旧没有提供这个接口:-()
sklearn文档中有一个例子,展示了如何使用DecisionTreeClassifier中的tree_属性,可以参考:http://scikit-learn.org/stable/auto_examples/tree/plot_unveil_tree_structure.html
加油!:)
012018-08-12
相似问题