决策树
一.基本流程:
决策树(decision tree)是一种常见的机器学习方法,以二分类任务为例,我们希望从给定的训练数据集学得一个模型用于对未知样本进行分类,,这个把样本分类的任务,可以看作对“当前样本属于正类吗?”这个问题的‘决策’或‘判断’过程。决策树是基于树结构来进行决策的。例如,我们要对‘这是好瓜吗?’这样的问题进行决策时,通常会进行一系列的判断或‘子决策’:我们先看‘它是什么颜色?’,如果是‘青绿色’,则我们再看‘它的根蒂是什么形态?’,如果是‘蜷缩’,我们再判断‘敲起来是什么声音?’最后,我们得出最终决策:这个是好瓜。这个决策过程如下图所示。
一般,一颗决策树包含一个跟结点,若干个内部结点和若干个叶子结点,叶子结点对应于决策树结果,其他每个结点对应一个属性测试,每个结点包含的样本集合根据属性测试的结果被划分到子结点中,根结点包含样本全集,从根结点到每一个叶子结点的路径对应了一个判定测试序列,决策树学习的目的是为了产生一颗泛化能力强,即处理未见示例能力强的决策树,其算法步骤如下:
生成决策树是一个递归的过程,在决策树算法中,当出现下列三种情况时,导致递归返回:
(1)当前节点包含的样本属于同一种类,无需划分;
(2)当前属性集合为空,或者所有样本在所有属性上取值相同,无法划分;
(3)当前节点包含的样本集合为空,无法划分。
在第二种情况下,我们把当前结点记为叶子结点,并将其类别设定为该结点所含样本最多的类别,在第三种情况下,同样把当前结点记为叶子结点,但将其类别设定为其父类结点所含样本最多的类别。二、寻找最优划分属性
一.信息熵和信息增益
信息熵(Entropy)、信息增益(Information Gain)概念解释
1、 信息熵:H(X) 描述X携带的信息量。 信息量越大(值变化越多),则越不确定,越不容易被预测。
对于抛硬币问题,每次有2种情况,信息熵为1
对于投骰子问题,每次有6中情况,信息熵为1.75
下面为公式:
其中log2(p)可以理解为p这个需要用几个bit位表示。如p(x1)=1/2, p(x2)=1/4, p(x3)=1/8, p(x4)=1/8,
可以用x1: 1, x2: 10, x3: 110, x4: 111表示,因为为了让平均的bit位最少,概率越大的bit为设的越短。而-log2(p)正好对应bit位数。
那么H(X)可以理解为比特位的期望值。
信息熵特点:(以概率和为1为前提哈)
a) 不同类别的概率分布越均匀,信息熵越大;
b) 类别个数越多,信息熵越大;
c) 信息熵越大,越不容易被预测;(变化个数多,变化之间区分小,则越不容易被预测)(对于确定性问题,信息熵为0;p=1; E=p*logp=0)
2、 信息增益IG(Y|X): 衡量一个属性(x)区分样本(y)的能力。 当新增一个属性(x)时,信息熵H(Y)的变化大小即为信息增益。 IG(Y|X)越大表示x越重要。
条件熵:H(Y|X),当X条件下Y的信息熵
信息增益: IG(Y|X)=H(Y)-H(Y|X)
熵(entropy):在信息论和概率统计中,熵是表示随机变量不确定性的度量
条件熵(conditional entropy):表示在一直随机变量X的条件下随机变量Y的不确定性度量。
信息增益(information gain):信息增益表示得知特征X的信息而使得类Y的信息的不确定性减少的程度。
信息增益比(information gain ratio):其信息增益g(D, A)与训练数据集D关于特征A的值的熵HA(D)之比
基尼指数(gini index):基尼指数Gini(D)表示集合D的不确定性,基尼指数越大,样本集合的不确定性也就越大,这一点与熵相似。
一. 决策树ID3算法的思路。
ID3算法就是用信息增益的大小来判断当前结点应该用哪个属性特征来构建决策树,用计算的信息增益最大的特征来建立决策树的当前结点,这里我们举一个信息增益计算的具体的例子。比如我们有15个样本D,输出为0或者1。其中有9个输出为0, 6个输出为1。 样本中有个特征A,取值为A1,A2和A3。在取值为A1的样本的输出中,有3个输出为1, 2个输出为0,取值为A2的样本输出中,2个输出为1,3个输出为0, 在取值为A3的样本中,4个输出为1,1个输出为0.
样本D的熵为: H(D)=−(9/15log2(9/15)+6/15log2(6/15)=0.971H(D)=0.971
样本D在特征下的条件熵为: H(D|A)=5/15H(D1)+5/15H(D2)+5/15H(D3)=0.888
对应的信息增益为 I(D,A)=H(D)−H(D|A)=0.083I(D,A)=H(D)−H(D|A)=0.083
输入的是m个样本,样本输出集合为D,每个样本有n个离散特征,特征集合为A,输出决策树为T。
算法的过程为:
1)初始化信息增益的阈值ϵϵ
2)判断样本是否为同一类输出DiDi,如果是则返回单节点树T。标记类别为DiDi
3) 判断特征是否为空,如果是则返回单节点树T,标记类别为样本中输出类别D实例数最多的类别。
4)计算A中的各个特征(一共n个)对输出D的信息增益,选择信息增益最大的特征AgAg
5) 如果AgAg的信息增益小于阈值ϵϵ,则返回单节点树T,标记类别为样本中输出类别D实例数最多的类别。
6)否则,按特征AgAg的不同取值AgiAgi将对应的样本输出D分成不同的类别DiDi。每个类别产生一个子节点。对应特征值为AgiAgi。返回增加了节点的数T。
7)对于所有的子节点,令D=Di,A=A−{ Ag}D=Di,A=A−{Ag}递归调用2-6步,得到子树