你想知道的决策树原理及推导

本篇博客的目录:
特征
思想
信息增益
几个小知识点
决策树直观的例子
ID3,CART,C4.5算法


决策树的特征

优点:计算复杂度不高,输出结果易于理解,对中间值的缺失不敏感,可以处理不相关特征数据
缺点:可能会产生过度匹配问题,不能有效利用特征间的关联关系
适用数据类型:数值型和标称型

决策树构造思想

要构造决策树,就需要根据样本数据集的数据特征对数据集进行划分,直到针对所有特征都划分过,或者划分的数据子集的所有数据的类别标签相同。然而要构造决策树,面临的第一个问题是先对哪个特征进行划分,即当前数据集上哪个特征在划分数据分类时起决定性作用。

信息增益

这块可以参考这篇文章https://blog.csdn.net/blank_tj/article/details/82056413

通过量化的方法将信息度量出来,利用信息论度量信息是一种有效方法。所以,我们可以在划分数据前后使用信息论量化度量信息的内容。
在划分数据集前后信息发生的变化成为信息增益,知道如何计算信息增益,就可以计算根据每个特征划分数据集获得的信息增益,获得信息增益最高的特征就是最好的选择。
例如: A B + C ,那么信息增益为:增益 = A - B - C


例如:一个盒子中分别有5个白球和5个红球,随机取出一个球,问,这个球是红色还是白色?这个问题信息量多大呢?由于红球和白球出现的概率都是1/2,那么久可以得到其信息熵为: H ( x ) = ( 1 2 l o g 2 ( 1 2 ) + 1 2 l o g 2 ( 1 2 ) ) = 1 ,是的,这个信息量是1bit。

如果一个盒子里有10个红球,随机取出一个,这个球什么颜色?这个问题的信息量是多少?信息量是0,因为这是一个确定事件,概率P(x)=1


在信息科学中,信息越混乱,熵越大。信息熵其实是一个随机变量信息量的数学期望,要明确这个概念,就要知道信息的定义。如果待分类的事务可能划分在多个分类之中,则符号 x i 的信息定义为:

l ( x i ) = l o g 2   p ( x i ) 其中 p ( x i ) 是选择该分类的概率

为了计算熵,我们需要计算所有类别所有可能值包含的信息期望值,通过下面的公式得到:

H = i = 1 n p ( x i ) l ( x i ) = i = 1 n p ( x i ) l o g 2   p ( x i ) 其中n是分类的数目,即特征的数目

得到熵之后,我们就可以按照获取最大信息增益(熵减最多)的方法划分数据集。

划分数据集

知道如何度量数据的无序程度,即如何计算信息熵之后,还需要进行的步骤是划分数据集,通过度量划分数据集的熵,以便判断当前是否正确地划分了数据集,因此需要对每个特征进行划分数据集,并且计算划分后的数据集信息熵,熵减最多时划分数据集所根据的特征就是划分数据集的最优特征。


几个知识点

1)数据离散化
如果一个特征值连续值怎么办?此时需要进行离散化,对连续数据进行离散化处理,比如:
当成绩大于90标识为优,当成绩大于70小于90,标识为良,当成绩大于60小于70,标识为及格,当成绩小于60标识为不及格。经过离散化处理就可以构建决策树了
2)正则项
信息增益的一个大问题就是容易造成偏向选择分支多的属性导致,那么我们能想到的解决办法就是加上一个与类别个数成正比的正则项来作为最终的信息熵。
另外一个解决办法是使用信息增益比来作为特征选择的标准,就是特征的增益值除以特征熵,可以解决优先选取类别多的特征的问题。
3)基尼不纯度
信息熵是衡量信息不确定性的指标,实际上是 衡量信息纯度的指标,除此之外,基尼不纯度也是衡量信息不纯度的指标,公式如下:

G i n i ( D ) = 1 i = 1 n p i 2

解决过拟合问题

使用决策树模型拟合数据时,容易过拟合,解决过拟合的方法一般是对决策树进行剪枝,有两种思路,前剪枝和后剪枝
1)前剪枝
前剪枝是在构建决策树的同时进行剪枝,在构建过程中,如果无法进一步降低信息熵,就是停止创建分支,为了避免过拟合,可以设定一个阈值,当信息熵减小的数量小于这个阈值,计算还会降低熵,也要停止继续创建分支。还可以限制叶子节点样本个数,当样本个数小于设定值,则不再继续创建分支
2)后剪枝
后剪枝是在决策树构建完成后进行剪枝。剪枝的过程就是对拥有同样父节点的一组节点进行检查,判断其如果合并是否信息熵的增加量小于某一个阈值,如果小于阈值,这一组节点可以合并成一个节点。后剪枝是目前比较普遍都得做法


理解决策树的例子

套用别人的一个例子
这里写图片描述
最后一列为y值也就是目标值,而诸如天气,是否周末为特征,现在通过计算特征的信息熵来决定先对哪个特征进行分割。

1)计算总信息熵。数据记录34条,销量为高的有18条,为低的16条

总信息熵H(x)=-(18/34)*log2(18/34)-(16/34)*log2(16/34)=0.997503

2)计算各个属性的信息熵

对于天气,属性值有好与坏,其中好天气下,销量为高的记录11条,为低的记录6条

在坏天气下,销量为高记录7条,为低的记录10条

H(天气=好)= -(11/17)*log2(11/17)-(6/17)*log2(6/17)=0.936667

H(天气=坏)= -(7/17)*log2(7/17)-(10/17)*log2(10/17)=0.977418

H(天气)=(17/34)* H(天气=好)+(17/34)* H(天气=坏) = 0.957043

对于是否周末,属性值有是与否,其中是周末下,销量为高的记录11条,为低的记录3条

在否周末下,销量为高记录7条,为低的记录13条

H(周末=是)= -(11/14)*log2(11/14)-(3/14)*log2(3/14)=0.749595

H(周末=否)= -(7/20)*log2(7/20)-(13/20)*log2(13/20)=0.934068

H(周末)=(14/34)* H(周末=是)+(10/34)* H(周末=否) = 0.858109

对于是否促销,属性值有是与否,其中促销下,销量为高的记录15条,为低的记录7条

在否促销下,销量为高记录3条,为低的记录9条

H(促销=是)= -(15/22)*log2(15/22)-(7/22)*log2(7/22)=0.902393

H(促销=否)= -(3/12)*log2(3/12)-(9/12)*log2(9/12)=0.811278

H(促销)=(22/34)* H(促销=是)+(12/34)* H(促销=否) = 0.870235

3)计算天气,是否周末,是否促销的信息增益值

Gain(天气)= H(x)- H(天气)=0.04046

Gain(是否周末)= H(x)- H(周末)=0.139394

Gain(是否促销)= H(x)- H(促销) = 0.1272684

4)由第三步可知,是否周末的信息增益最大,他的两个属性’是’,’否’作为跟结点的两个分支,然后从未被选择的特征中继续进行一至三步,选择最优数据划分特征来划分子数据集。何时停止?一是一直到所有的特征都用完了,二是划分后额信息增益足够小,就可以停止了,最终构成一颗决策树。


ID3算法

ID3由Ross Quinlan在1986年提出。ID3决策树可以有多个分支,但是不能处理特征值为连续的情况。决策树是一种贪心算法,每次选取的分割数据的特征都是当前的最佳选择,并不关心是否达到最优。在ID3中,每次根据“最大信息熵增益”选取当前最佳的特征来分割数据,并按照该特征的所有取值来切分,也就是说如果一个特征有4种取值,数据将被切分4份,一旦按某特征切分后,该特征在之后的算法执行中,将不再起作用,所以有观点认为这种切分方式过于迅速。在建立决策树的过程中,根据特征属性划分数据,使得原本“混乱”的数据的熵(混乱度)减少,按照不同特征划分数据熵减少的程度会不一样。在ID3中选择熵减少程度最大的特征来划分数据(贪心),也就是“最大信息熵增益”原则。

(1)计算数据集D的经验熵H(D)

H ( D ) = k = 1 K | C k | | D | l o g 2 | C k | | D |

(2)计算特征A对数据集D的经验条件熵H(D | A)

H ( D | A ) = i = 1 n | D i | | D | H ( D i ) = i = 1 n | D i | | D | k = 1 K | D i k | | D i | l o g 2 | D i k | | D i |

(3)计算信息增益

g ( D , A ) = H ( D ) H ( D | A )

C4.5算法

C4.5是Ross Quinlan在1993年在ID3的基础上改进而提出的。ID3采用的信息增益度量存在一个缺点,它一般会优先选择有较多属性值的Feature,因为属性值多的Feature会有相对较大的信息增益?(信息增益反映的给定一个条件以后不确定性减少的程度,必然是分得越细的数据集确定性更高,也就是条件熵越小,信息增益越大)。为了避免这个不足C4.5中是用信息增益比率(gain ratio)来作为选择分支的准则。信息增益比率通过引入一个被称作分裂信息(Split information)的项来惩罚取值较多的Feature。除此之外,C4.5还弥补了ID3中不能处理特征属性值连续的问题。但是,对连续属性值需要扫描排序,会使C4.5性能下降。

S p l i t I n f o r m a t i o n ( D , A ) = i = 1 n | D i | | D | l o g | D i | | D |

G a i n R a t i o ( D , A ) = g ( D , A ) S p l i t I n f o r m a t i o n ( D , A )

CART算法

CART(Classification and Regression tree)分类回归树由L.Breiman,J.Friedman,R.Olshen和C.Stone于1984年提出。ID3中根据属性值分割数据,之后该特征不会再起作用,这种快速切割的方式会影响算法的准确率。CART是一棵二叉树,采用二元切分法,每次把数据切成两份,分别进入左子树、右子树。而且每个非叶子节点都有两个孩子,所以CART的叶子节点比非叶子多1。相比ID3和C4.5,CART应用要多一些,既可以用于分类也可以用于回归。CART分类时,使用基尼指数(Gini)来选择最好的数据分割的特征,gini描述的是纯度,与信息熵的含义相似。CART中每一次迭代都会降低GINI系数。回归时使用均方差作为loss function。基尼系数的计算与信息熵增益的方式非常类似。

G i n i ( D ) = 1 i = 0 n ( D i D ) 2

G i n i ( D | A ) = i = 0 n D i D G i n i ( D i )

猜你喜欢

转载自blog.csdn.net/blank_tj/article/details/82081002