1.what is decision tree
所谓决策树,就是一个类似于流程图的树形结构,树内部的每一个节点代表的是对一个属性的测试,树的分支代表该属性的每一个测试结果,而树的每一个叶子节点代表一个类别。
在决策树中,所有的特征均为符号值,即离散值。如果某个特征的值为连续值,那么需要先将其离散化。
从根节点到叶节点的一条路径就形成对相应对象的类别预测,目的是希望决策树的分支节点所包含的样本尽可能属于同一类别,即节点的纯度越来越高。建立决策树的关键就在于在当前状态下选择哪个属性作为分类依据。
决策树大概有三个版本:ID3 C45 和 CART。
后来看到其他博客后的补充:通俗直白永不忘记的解释决策树(转载)
1.决策树是什么?
有一堆人,让你分出男女,你依靠头发长短分类,这就形成了一个简单的决策树。
2.划分依据是什么?
那你就提出疑问,为啥用头发,用鞋子也可以啊,‘是否穿高跟鞋’,或者‘有木有喉结’,等等来划分。当然可以啊,随意啊,哪一种效果好,就用哪一种啊
3.怎么样就是效果好?如何评价量化?
怎么判断“头发长短”或者“是否有喉结”…是最好的划分方式,效果怎么量化。很简单嘛,根据某个特征分类后,纯度越高则越好,比如说你分为两群,“女”那一群都是女的,“男”那一群全是男的,这个效果是最好的。那总得有个什么概率啊,数字什么的来量化纯度高低,这就有了信息增益(ID3)、信息增益率(C4.5)、基尼系数(CART)等等,来用来量化纯度
总结:决策树就是依靠某种指标进行树的分裂达到分类/回归的目的(上面的例子是分类),总是希望纯度越高越好。
ID3:采用信息熵指标度量样本集合的纯度,使用信息增益作为分类依据。
熵:通俗的讲,用来表征事物的混乱程度。值域[0,1],熵越小表示越有序,熵越接近1表示越无序。
信息增益
信息量
信息量是对信息的度量,信息的大小跟随机事件的概率有关。一个随机事件的信息量的大小与其发生概率成反相关。
香农定义的一个事件的信息量为:
I(X)=log2(1/p)
信息熵
信息熵是度量样本集合纯度最常用的指标。假定当前样本集合 D 中第 k类样本所占比例为 pk,则D 的信息熵的定义就是 D的加权信息量。
Ent(D)=∑i−1KPkI(xk)=−∑i−1KPklog2(Pk)
熵越小纯度越高
信息增益
在划分数据集之前和之后信息发生的变化称为信息增益。 假定离散属性aa有VV个可能取值 a1,a2,...,av,若用aa对样本集D进行划分,则会产生v个分支节点,记每个分支样本集合为Dv,可以计算出Dv的信息熵,再考虑不同分支节点样本数不同,给分支赋予权重|Dv|/|D|,可以计算出用属性a对样本集D进行划分所获得的信息增益:
Gain(D,a)=Ent(D)−∑v=1V|Dv||D|Ent(Dv)
知道如何计算信息增益,我们就可以计算每个特征值划分数据集获得的信息增益,获得信息增益最高的特征就是最好的选择。
基于信息增益准则对可取值数目较多的属性有所偏好
算法如下:
1.从根节点开始,若一个节点内所有节点都属于同一类别,那么该节点成为叶子节点。
2.否则,利用信息增益法来选择对样本的划分特征。
3.递归上述划分子集产生叶节点的过程,这样每一个子集都会产生一个决策树,直到所有节点变成叶结点。
递归停止的条件:
1.一个节点中所有的样本均为同一类别,那么产生叶节点
2.没有特征可以用来对该节点样本进行划分,此时也强制产生叶节点,该节点的类别为样本个数最多的类别。
3.没有样本能满足剩余特征的取值,此时也强制产生叶节点,该节点的类别为样本个数最多的类别。
如下例子:
C45:使用信息增益率作为划分依据
因为ID3使用的信息增益对可取值数目较多的属性有所偏好,比如使用序号作为划分依据效果很好。
增益率
Gain_ratio(D,a)=Gain(D,a)IV(a),IV(a)=−∑v=1V|Dv||D|log2(|Dv||D|)
基于信息增益率准则对可取值数目较少的属性有所偏好。所以C4.5 先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的。
I(s1j,s2j,…,smj)=−∑i=1mpij∗log(pij)
I(s1,s2,…,sm)=−∑i=1mpi∗log(pi)
CART:使用基尼指数作为分类依据。(分类回归树)
CART既可以用于回归也可以用于分类,事实上分类与回归是一样的,分类的结果是离散值,回归是连续值,本质是一样的,都是特征(feature)到结果/标签(label)的映射。
那怎么区别呢?
分类树的样本输出是类的形式,如判断蘑菇是有毒或者无毒,周末是否出去看电影,属于是否问题。
回归树的样本输出是数值的形式,比如给某人发放房屋贷款的数额就是具体的数值,可以是0到120万元之间的任意值。
基尼指数(分类)
Gini(D)=∑k=1|y|=1−∑k=1|y|p2k
反映从数据 D中随机抽取两个样本,其类别标记不一致的概率。越小越纯。属性 a的基尼指数定义为
Gini_index(D,a)=∑v=1V|Dv||D|Gini(Dv)
树枝修剪
由于噪声等因素的影响,会使得样本某些特征的取值与样本自身的类别不相匹配的情况,基于这些数据生成的决策树的某些枝叶会产生一些错误;尤其是在决策树靠近枝叶的末端,由于样本变少,这种无关因素的干扰就会突显出来;由此产生的决策树可能存在过拟合的现象。树枝修剪就是通过统计学的方法删除不可靠的分支,使得整个决策树的分类速度和分类精度得到提高。
树枝修剪包括事先修剪和事后修剪两种方法:
(1)事前修剪方法:在决策树生成分支的过程,除了要进行基础规则的判断外,还需要利用统计学的方法对即将分支的节点进行判断, 如果一个节点的训练实例树小于训练集的某个比例,比如5%,无论是否不纯或是有错误,都不再进一步分裂,因为基于过少实例的决策树会导致方差太大,从而泛化误差较大。
(2)事后修剪方法:在决策树充分生长后,修剪掉多余的分支。根据每个分支的分类错误率及每个分支的权重,计算该节点不修剪时预期分类错误率;对于每个非叶节点,计算该节点被修剪后的分类错误率,如果修剪后分类错误率变大,即放弃修剪;否则将该节点强制为叶节点,并标记类别。产生一系列修剪过的决策树候选之后,利用测试数据(未参与建模的数据)对各候选决策树的分类准确性进行评价,保留分类错误率最小的决策树。
除了利用分类错误率进行树枝修剪,也可以利用决策树的编码长度进行修剪。所谓最佳决策树是编码长度最短的决策树,这种修剪方法利用最短描述长度(MDL)原则来进行决策树的修剪。该方法基于的思想是:最简单的就是最好的。