引入
“这个瓜是好瓜吗?”我们对这样的问题进行决策时,通常会进行一系列的判断或子决策:我们先看“它是什么颜色?”如果它是“青绿色”的,那我们再看“它的根蒂是什么形态?”,如果是“蜷缩”,我们再判断“它敲起来是什么声音?”,如果是“浊响”,那么最后,我们得到最终的决策结果——它是个好瓜……这是人类在面临决策问题时一种很自然的处理机制,而决策树就是基于这样的树结构进行建立的。
一、简单概念
1. 决策树是一种常见的机器学习算法,它是基于树结构来进行决策的。
2. 一般的,一棵决策树包含一个根节点、若干个内部结点和若干个叶节点。
3. 叶结点对应于决策结果,其他每个结点则对应一个属性测试。
4. 每个结点包含的样本集合根据属性测试的结果被划分到子结点中,特别地,根节点包含样本全集。
5.从根节点到每一个叶节点的路径对应了一个判定测试序列。
6.决策树学习的目的是为了产生一棵泛化能力强,即处理未知样本能力强的决策树,其基本流程遵循简单而直观的“分而治之”策略。
二、决策树学习基本算法
先摆出基本算法的伪代码
解释:
决策树的生成是一个递归的过程,在决策树的基本算法中,有三种情形会导致递归返回:
(1)当前结点包含的样本全属于同一个类别,无需划分;
(2)当前属性集为空,或是所有样本在所有属性上的取值相同,无法划分;
在(2)中的情形下,我们把当前结点标记为当前叶节点,并将其类别设定为该节点所含样本最多的类别
(3)当前结点包含的样本集合为空,不能划分;
在(3)中的情形中下,同样把当前结点标记为叶节点,但将其类别设定为其父结点所含样本最多的样本
注意:情形(2)是在利用当前结点的后验分布,而情形(3)则是把父结点的样本分布作为当前节点的先验分布。
接下来用Titanic简化数据集来具体说明三种情况
数据集D中有7组数据,Xi代表各组数据下不同属性下的不同取值,y即存活情况,y i 代表最终分类结果。X i ={性别 i,船舱等级 i,登船港口 i},y i={0,1}
根据上面的数据集画出的决策树如下:
红色数字代表第几类递归返回,蓝色圆圈中的数字代表叶结点。
(1)结点1在“ 性别 = 女 ”这一分类下,所有的存活情况全部为1 ,没有继续划分的必要,遂把该结点直接作为叶结点,种类就为1.
(2)结点2在“ 船舱等级 = 1”这一划分之后,所有的经过结点2的数据集Dv在所有的属性上的取值相同,无法继续划分,所以把该结点标记为叶结点,划分的种类为Dv中出现次数最多的类别0. (数据集Dv包含数组3,4,7,均为M,1,S,结果种类为0,1,0)
结点4和结点5,同理所有属性取值相同或者说是划分完了所有的属性(新属性集为空),无法继续划分,直接标记为叶结点,虽然就只有一组数据但是他们也是属于第二类递归返回的范围。
(3)结点3,在“ 性别 = 男 ”之后,“ 船舱等级 = 3”的样本集合为空集,不能划分,直接标记为叶结点,返回的种类为父结点 (也就是“ 性别 = 男 ”时)数据集的类别中出现次数最多的类别0. (从全部数据集中我们可以看出Pclass属性的取值为1,2,3,但是数据组3,4,5,6,7中都没有“ 船舱等级 = 3”,所以该取值下为空集)
三、划分选择
决策树学习的关键是算法第8行,即如何选择最优划分属性。一般而言,随着划分过程不断进行,我们希望决策树的分支结点所包含的样本尽可能属于同一类别,即结点的“纯度”越来越高。
3.1度量样本集合纯度的指标
3.1.1信息增益
在使用信息增益之前我们先来了解一下信息熵。
信息熵是对事件中不确定信息的量度。自信息量是信源发出某一具体消息所含有的信息量,发出的消息不同所 含有的信息量不同。因此自信息量不能用来表征整个信源的不确定度。 我们定义平均自信息量来表征整个信源的不确定度。平均自信息量又称 为信息熵、信源熵,简称熵。
那么,如何计算信息熵?这是一个概率的计算问题: