话说小张在女朋友小美家发现了一张观影记录单,他猜想这是小美故意给自己的,目的是让他以后能有的放矢地邀请她看电影,他决定好好研究一下小美喜欢什么类型的电影。
他发现按照类型划分:3个科幻片她看了2个,5个动画片她看了3个,2个剧情片看了1个;按照产地划分:3个美国的她看了2个,5个中国的她看了4个,2个日本的她都没有看;按照评分划分的话:6个高分的影片她看了5个,4个低分的影片她看了1个。如图所示。
单看每种划分方式都难以得出结论,小美喜欢什么类型的电影,比如不能说小美喜欢看所有动画片吧,因为毕竟5部她只看了3部,也不能说只要评分高的电影她就喜欢,毕竟有一部评分高的她也没看。那该怎么找规律呢?小张尝试在已有划分的基础上,根据条件继续细分,直到所得数据都完成分类。他使用三个属性分别进行划分,如下图所示。
这样确实可以清晰展示出小美喜欢什么类型的电影,她喜欢中国的科幻片,对美国的科幻片只有评分高的才看,她喜欢国产动漫和美国动画片不喜欢日本动画片。以上构建出来的就是决策树,但以不同条件作为根节点构建的树,怎么衡量它们的分类效果呢?这就需要考虑构建决策树的标准,我们希望选取的根节点是能最大化分类所有数据的,也就是数据经过根节点的条件判断后,得到的子节点应该尽可能的属于同一类。这里引入两个概念:熵和基尼系数,它们都可以帮助我们找到最适合的根节点。
熵是衡量样本集合纯度最常用的指标,热力学中用来它衡量系统的混乱程度,其实两者是一回事,混乱程度高熵值自然高,纯度当然低。想要选取最能区分所有数据的属性作为根节点,然后在此基础上再找到剩余属性中区分度最好的作为二级子节点,以此类推,最终构建的出来的树应该随着深度的增加熵值不断降低。
接着我们需要计算信息增益,从而查看降熵效果。类型的信息增益=最终观影结果熵-类型熵=0.97-0.96=0.01,产地的信息增益=最终观影结果熵-产地熵=0.97-0.64=0.33,评分的信息增益=最终观影结果熵-评分熵=0.97-0.71=0.26,这样就确定了最优根节点为产地,接着可以在根节点已经完成的分类基础上进一步计算类型和评分的信息增益,从而确定下一级节点,最终完成一颗决策树的构建。
基尼系数反映了数据标记不一致的概率,因为基尼系数越小,混乱程度越低样本纯度越高。
通过计算可以发现基尼系数最小的为产地0.29,这和刚才用信息增益计算得出的结果是一样的。接着和计算信息增益构建决策树一样,需要在根节点的基础再次计算新的类型和评分的基尼系数,从而构建下一级节点,最终完成决策树的构建。
下面我把表格数据输入计算机,使用python中的sklearn库生成决策树。代码如下。
以上代码有参考《深入浅出机器学习》
生成分类图像
决策树分类图,使用graphviz函数生成
最后故事的结尾是小张看到的观影记录其实属于小美的弟弟,所以动画片才会占比50%。革命尚未成功,小张还需多加努力。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。