大家好,这是本居居第一次写博客。
希望以巩固自己的算法知识,以及用一种较为容易理解的方法阐述算法,让广大读者学习借鉴为目的,坚持写下去。
一、决策树算法定义:
百度的官方解释是这样的,决策树是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法。
看不懂?难以理解?很迷惑?我也一样,我觉得可以先用一张图来初步认识决策树
我个人理解的决策树大概是这样的:
以根节点为起点,进行一次判断,由此一分为二,接着由二分四,以此类推,直到各节点无法继续分列
并且判断语句全是特征变量(即x),而每一个分支的终点则全是标签(即y)
二、构建决策树的准备工作
在说明之前,先抛出几个问题,并自问自答:
1、为什么根节点是判断 “相亲对象有房子” 这个特诊,而不是判断其他的特征?
答:决策树中特征变量的先后顺序的根据变量的"信息增益"来确定,哪个x的“信息增益大”,就用那一个X。
2、为什么在判断 相亲对象有房子 为 “是” 之后,就终结了,无法分列?而在判断 相亲对象有房子 为 “否” 之后却继续分列?
答:这个需要在X判断之后,考虑是否有继续分列的必要。
3、为什么用信息增益这个指标来构建决策树?
答:其实还可以用gini,信息增益比等,有兴趣的朋友可以多了解一下
上面提到了一个重要的知识点--“信息增益”,究竟什么是信息增益?并且如何计算信息增益?
在回答这两个问题前,需要补充另外两个知识点--“总体的经验熵(香农熵)”,“条件经验熵(香农熵)”
1)总体的经验熵公式如图
2)条件经验熵公式如图
是不是又看不懂?没关系,这时候直接看代码讲解计算(代码先截图)
先创建数据集
计算总体经验熵
上图中红框的和 就是总体经验熵的计算公式,相比于来说实例化更多,所用的就是一个简单的公式再求和。
计算条件经验熵
条件经验熵是针对每个X而计算,上图是以年龄作为代表计算一次。
分别计算出年龄分组为0、1、2的条件经验熵,求和就是年龄的条件经验熵,即上图的红框部分求和。
条件经验熵与总体经验熵的公式类似,不同的在于条件经验熵需要乘以权重(权重即指每个分组占全部行数的占比)。
计算信息增益
到了这一步就很轻松了
X的信息增益=总体经验熵-X的条件经验熵,不要怀疑,就是这么简单,而代码只要短短几行遍可以搞定
所以,
总体经验熵表示的是 y标签的不确定性,越大代表 y有更多的可能性。(不信你可以试试(0为1,1为14)以及(0为7,1为8)两类的总体经验熵哪边更大 )
条件经验熵表示的是 在某个x的条件下,y标签的不确定性,也是y对这个x的期望(这个从公式可以看出来)
而信息增益=总体经验熵-条件经验熵,表示的是这个X的信息量,值越大,说明这个X越重要(似乎难以理解,请看下图)