模拟相亲的过程,通过相亲决策图,男的去相亲,会先选择性别为女的,然后依次根据年龄、长相、收入、职业等信息对相亲的另一方有所了解。
通过决策图可以发现,生活中面临各种各样的选择,基于我们的经验和自身需求进行一些筛选,把判断背后的逻辑整理成结构图,会发现呈现树状的结构,也就是所说的树状图。
我们在做决策的时候,会经历两个阶段:构造和剪枝。
构造就是生成一颗完整的决策树,简单来说,构造的过程就是选择什么属性作为节点的过程,那么在构造过程中,会存在三种节点:
所以在构造树的过程中,我们要解决三个重要的问题:
根节点选择的不同会导致树的选择也存在差异。
问题: 我们怎么来用程序选择根节点呢
目标:通过一种衡量标准,来计算通过不同特征进行分支选择后的分类情况,找出来最好的那个当成根节点,依次类推。
利用根节点可以更好的去切分数据,内部节点是为了更好的细分数据。
信息熵是表示随机变量不确定性的度量。熵是物理学中的知识点,表示物体内部的混乱程度,比如口红种类色号繁多,意味着在商场中轻松买到一支完全满意的口红的概率非常低,说明当种类比较混乱的话,不确定性就越大,熵值也就越大;比如要买华为的手机,进入华为专卖店就可以购买,确定性越大,意味着熵值就越小。
1图进行分类后更混乱了,混乱程度越大,不确定性越大,熵值就越大,2图分类后数据比较纯,分类明确规整,熵值就越小。
用程序去实现的话,就要把指标进行量化。
单位:1bit
一枚硬币有正反两面,抛硬币出现反面的概率是50%,出现证明的概率也是50%,这是最简单的二分类的问题,抛一个硬币的不确定性记为1bit,抛硬币的个数,与它呈现的不确定的结果是指数的关系。
1枚硬币:不确定性为2,正反
2枚硬币:不确定性为4,全正,全反,一正一反,一反一正
3枚硬币:不确定性为8
n枚硬币:不确定性为2^n
4种不确定结果 = 2 2 2^2 22,熵为2bit, 2 = l o g 2 4 2=log_24 2=log24
8种不确定结果 = 2 3 2^3 23,熵为3bit, 3 = l o g 2 8 3=log_28 3=log28
m种不确定结果 = 2 n 2^n 2n,熵为nbit, n = l o g 2 m n=log_2m n=log2m
概率都是相等的情况, n = l o g 2 m n=log_2m n=log2m,m为不确定性结果的个数。
把 D D D分为6种情况,不确定性结果为6,也即为 m = 6 m=6 m=6, D D D的熵为: E n t ( D ) = l o g 2 6 Ent(D)=log_26 Ent(D)=log26
真实的情况可能更加复杂,如下图, D D D的不确定性分为 A 、 B 、 C A、B、C A、B、C三种, A A A又有三种情况为1/2的概率, B B B有两种情况为1/3的概率, C C C有一种情况为1/6的概率。 A A A有三种可能,对应的m(A)=3,单个A的熵为 l o g 2 3 log_23 log23, D D D的数据更纯,纯度高的减去纯度低的得到数据本身的纯度,再考虑概率的问题,乘以权重。
A A A处的熵为 E n t ( A ) = 1 2 ( l o g 2 6 − l o g 2 3 ) Ent(A)=\frac{1}{2}(log_26-log_23) Ent(A)=21(log26−log23)。
B 、 C B、C B、C的熵依此类推。
E n t ( B ) = 1 3 ( l o g 2 6 − l o g 2 2 ) Ent(B)=\frac{1}{3}(log_26-log_22) Ent(B)=31(log26−log22)
E n t ( C ) = 1 6 ( l o g 2 6 − l o g 2 1 ) Ent(C)=\frac{1}{6}(log_26-log_21) Ent(C)=61(log26−log21)
D D D的熵为: E n t ( D ) = E n t ( A ) + E n t ( B ) + E n t ( C ) Ent(D)=Ent(A)+Ent(B)+Ent(C) Ent(D)=Ent(A)+Ent(B)+Ent(C),推导之后可得:
下图为对数的图形,必要过点 ( 1 , 0 ) (1,0) (1,0),横坐标为 P k P_k Pk,纵坐标为 E n t ( A ) Ent(A) Ent(A), P k = 1 P_k=1 Pk=1的时候意味着概率为1,熵为0,表示数据纯度最高。 P k = 1 P_k=1 Pk=1的作用域为0到1之间,所以图形中大于1的部分是没有的。
也就是说概率越大,混乱程度越低,熵值就越低。
下图中,图2的熵值大,混乱程度高,图1数据比较纯,都是圆圈,不确定性小,熵值就越小。
熵可以表示样本集合的不确定性,熵越大,样本的不确定性就越大。因此可以使用划分前后集合熵的差值来衡量使用当前特征对于样本集合Y划分结果的好坏。
信息增益表示特征X使得类Y的不确定性减少的程度,决策一个节点的选择。
下图中根节点Y的熵数据比较大为0.9,数据比较混乱,现对Y划分为Y_1和Y_2,熵分布为0.2和0.5,可以看出Y_1的分类效果比较明显。 0.9 − 0.2 > 0.9 − 0.5 0.9-0.2>0.9-0.5 0.9−0.2>0.9−0.5
特征A对训练数据集D的信息增益 g ( D , A ) g(D,A) g(D,A),定义为集合 D D D的信息熵 H ( D ) H(D) H(D)与特征 A A A给定条件下 D D D的信息条件熵 H ( D ∣ A ) H(D|A) H(D∣A)之差。即公式为: g ( D , A ) = H ( D ) − H ( D ∣ A ) g(D,A)=H(D)-H(D|A) g(D,A)=H(D)−H(D∣A)
本质上为初始熵和信息熵的差距。
计算结果为温度的信息增益最大,选择温度作为根节点,再从湿度、天气、刮风中选择子节点构建完整的决策树。
通过信息增益获得决策树,是决策算法的一种,称为ID3算法。
如果在刚才的表格上增加一列ID,ID列的每个数字都不一样,以ID特征来进行分类,每一个ID值不相等且均为单独的一类,每个类都只有自己,意味着数据比较纯,每个数据出现的概率都是100%,意味着ID为0,它的熵为0;ID为6,熵依然为0。如果使用信息增益的话,ID列被作为根节点,它跟最后的结果打球不打球没有关系。
所以ID3算法是由缺陷的,信息增益倾向于分类较多的特征,有些噪音数据就会影响整体的分类,甚至整个树的构造,为了解决这个缺陷,提出了信息增益率。
ID3在计算的时候,倾向于选择取值比较多的属性。为了避免这个问题,C4.5采用信息增益率的方式来选择属性。信息增益率 = 信息增益 / 属性熵,属性就是特征。熵代表数据的混乱程度,数据的不确定性。如果一个属性有多个值,数据就会被划分为多份,数据的概率变大了,虽然信息增益变大了,属性熵也会变大,整体的信息增益率就没有变的那么大。分成多份后,每个类别的熵变低了,对于整个样本来说,不确定性增强了,熵变大了,分类越多,信息增益就越大,信息熵也就变大了。信息增益和熵是同时同向变化的,所以二者的比值就会减少影响,二者成正比的关系,减少信息增益的变大。
CART算法,英文全名为(Classification And Regression Tree),中文叫做分类回归树。ID3和C4.5算法可以生成二叉树或多叉树,而CART只支持二叉树。同时CART决策树比较特殊,既可以作分类树,又可以作回归树。
CART分类树与C4.5算法类似,只是在属性选择的衡量指标采用的是基尼系数,用的不再是信息增益或信息增益率。基尼系数是用来衡量一个国家收入差距的常用指标。基尼系数本身反映了样本的不确定度,当基尼系数越小的时候,说明样本之间的差异性小,不确定程度低。分类的过程本身就是提纯的过程,使用CART算法在构造分类树的时候,会选择基尼系数最小的作为属性的划分,跟熵是相反的。
GINI系数公式: G i n i ( D ) = 1 − ∑ k = 1 ∣ y ∣ P k 2 Gini(D)= 1-\displaystyle{\sum_{k=1}^{|y|}P_k^2} Gini(D)=1−k=1∑∣y∣Pk2
如果概率为1,数据的纯度越高,基尼系数就为0。二分类的问题,y不是0就为1,
基尼系数构建决策树:
在实际过程中,我们有很多连续值,比如下图年收益就是连续的值,其实就是数值型的属性,那我们怎么来计算基尼系数呢?
流程如下:
剪枝就是给决策树瘦身,这一步想实现的目标就是,不需要太多的判断,同样可以得到不同的结果。比如梯度下降的时候进行了1万次,可能在几百次的时候已经出现了最好的结果,剪枝是为了防止“过拟合”(Overfitting)现象的发生,得到最好结果的时候就停止。过拟合训练集太过完美,测试集在测试的时候结果就会不是很满意。
需要使用剪枝防止过拟合的发生,如果不剪枝一直进行分裂,那样本数据100%会被分割到一个正确的结果。如下图所示,一直进行分裂。
不停的分下去跟分到一半的效果是一样的,就没有必要一直往下分了,否则会一直占用计算机的资源。
在构造树枝前进行一些设定:
在已生成过拟合决策树上进行剪枝,可以得到简化版的剪枝决策树。