请问老师,为什么e = entropy(y_l) + entropy(y_r)?为什么将数据分为两类之后,信息熵=两个子类的信息熵之和?

来源:12-3 使用信息熵寻找最优划分

宝慕林4453330

2018-07-12

写回答

1回答

liuyubobobo

2018-07-13

抱歉,这里确实有问题。应该使用加权平均,而非算术平均。(在这里,我相当于使用算数平均值,直接除以2,只不过由于每个分类结果都除以2,在比较不同分类结果的时候,除以2就可以省略了。)


具体权值为尝试划分以后每个节点的数据量占全部数据量的百分比。假设尝试划分的节点中,数据总量为m,尝试划分以后,左孩子的数据量为m_l,右孩子的数据量为m_r,则左孩子的数据量占比p_l = m_l / m;右孩子的数据量占比为p_r = m_r / m,

我们尝试划分后的信息熵为:

e = p_l * entropy(y_l) + p_r * entropy(y_r)


由于在这里,我测试的数据集太小,整体分类结果也相对明显,使用算术平均和使用加权平均没有产生划分上的区别,所以没有测试出这个问题。抱歉。现在,我已经在课程官方的notebook上修改了这个问题,可以参考:

https://github.com/liuyubobobo/Play-with-Machine-Learning-Algorithms/blob/master/12-Decision-Tree/03-Entropy-Split-Simulation/03-Entropy-Split-Simulation.ipynb


另外,下一小节的gini系数牵扯同样的问题,我也进行了修改,参考:https://github.com/liuyubobobo/Play-with-Machine-Learning-Algorithms/blob/master/12-Decision-Tree/04-Gini-Index/04-Gini-Index.ipynb


非常抱歉!


感谢你的问题,如果愿意,可以加我微信,我会发给你一个小红包:)liuyubobobo


再次抱歉。感谢指正!加油!:)

6
1
宝慕林4453330
这次理解了,非常感谢bobo老师
2018-07-14
共1条回复

Python3入门机器学习 经典算法与应用  

Python3+sklearn,兼顾原理、算法底层实现和框架使用。

5850 学习 · 2437 问题

查看课程