决策树是一种基于树结构来进行决策的,这跟人类在面临一些决策问题时的自然反应机制很类似。
决策树包含一个根节点、若干个内部节点、若干个叶子节点。 一般的,根节点和内部节点只用于划分数据集,而叶子节点对应决策的结果
ID3算法---基于信息增益
1、信息增益
信息增益是ID3算法划分数据集的一种方法。而在划分数据集前后信息发生的变化就是信息增益。那么我们如何计算信息增益呢?要计算信息增益首先要了解信息熵。
信息熵
定义:信息熵是度量样本集合纯度最常见的一种指标。
假定样本集合D 中第k 类样本所占比例为,则D的信息熵为:
。
Ent(D)的值越小,说明D纯度越高。
计算信息增益
假定离散属性a有V个可能的取值,若使用a这个属性来划分数据集D,则会产生V个分支节点,其中第v个分支节点包含了D中所有在属性a上的取值为av的样本,记作
。既有信息增益公式:
注:其中 主要考虑到不同分支节点所包含的样本数不同,所附加的权重,即样本数越多权重越大,影响越大。
一般而言,信息增益越大意味着使用此属性来划分的纯度提升越大。因此我们在选取划分属性列时总是选取信息增益较大的那个属性。
例:
一个简单的数据集以便于理解
编号 | 是否有房 | 是否有车 | 是否结婚(标签) |
1 | 是 | 是 | 是 |
2 | 是 | 是 | 是 |
3 | 否 | 是 | 否 |
4 | 是 | 否 | 是 |
5 | 否 | 是 | 否 |
6 | 是 | 否 | 是 |
7 | 否 | 否 | 否 |
8 | 是 | 是 | 是 |
9 | 是 | 是 | 否 |
10 | 否 | 是 | 否 |
此数据集有10条数据其中正例5条,负例5条。因此可计算数据集的熵为:
然后我们要计算出单前属性集合{是否有车,是否有房}的每一个属性的信息增益,以 ‘是否有房‘ 为例(设为D1),它有两个取值{‘是’,‘否’},其中取值为‘是’的编号有{1,2,4,6,8,9}6个,其中正例有5个(也就是 ‘是否有房’==是&&‘是否结婚’==是)占比为,负例为1个占比为
。因此
同理可得‘是否有房’(设为D2) 取值为否:{3,5,7,10}4个,其中正例为0,负例为4,所以有
于是可“是否有房”这一列的计算信息增益为
同理可得是否有车的信息增益为
选择信息增益较大的一列作为划分数据集的标准,即使用‘是否有房’作为划分标准。
继续对数据集的其他列进行划分,已划分的列不在划分。因此最终的决策树如下:
C4.5----基于信息增益比
C4.5对于ID3的优化是在于惩罚了列中属性值类别较多的列。比如:ID3算法既然要选择要信息增益大的,为什么不直接选择编号那一列呢?选择编号那一列的信息增益为最大值1。那么这个决策树就有10个分支节点。这样的决策树不具有泛化能力。也存在着严重的过拟合。而C4.5对这种属性值类别较多列进行了惩罚。
信息增益比
公式:
其中。这就是惩罚项,Gian(D,a)为信息增益(计算参照ID3),而IV(a)表示,当列的属性值较多时IV(a)越大,Gain_ratio()越小。自然不选择此列作为划分标准。
同样基于上面的数据集进行计算。
Gain_ratio(D1)=Gain(D1)/IV(D1) 由于Gain(D1)=0.61
由此可得Gain_ratio(D1)=0.628
同理计算'是否有车'
Gain_ratio(D2)=Gain(D2)/IV(D2) 由于Gain(D2)=0.035
由此可得Gain_ratio(D2)=0.0397
我们还可以计算一下“编号”
Gain_ratio(D0)=Gain(D0)/IV(D0) 由于Gain(D0)=1
由此可得Gain_ratio(D0)=0.301
所以按照“是否有房”来划分数据集。
Cart决策树--基于基尼系数
Cart决策树不同于ID3、C4.5的地方在于:Cart决策树二分决策树,及Cart决策树构建出来的模型是二叉树每个节点最多有两个子节点,而ID3、C4.5不一定是二叉树(取决于特征的类别数目)
--分类树
基尼系数和信息熵一样都是用来衡量数据集的纯度的。选择具有最小Gain_GINI的属性及其属性值,作为最优分裂属性以及最优分裂属性值。Gain_GINI值越小,说明二分之后的子样本的“纯净度”越高,即说明选择该属性(值)作为分裂属性(值)的效果越好。
对于样本集D,GINI计算如下:
其中表示在样本集中第k个类别出现的频率;
对于含有N个样本的样本集D,根据属性A的第i个属性值,将数据集D划分成两部分(及A和非A),则划分成两部分之后,Gain_GINI计算如下:
于是我们在候选属性集A中,选择那个使得划分后的基尼系数最小的那个属性作为最优划分属性,即:
回归树--待测数据为连续型数据
回归树选取Gain_σ为评价分裂属性的指标。选择具有最小Gain_σ的属性及其属性值,作为最优分裂属性以及最优分裂属性值。Gain_σ值越小,说明二分之后的子样本的“差异性”越小,说明选择该属性作为分裂属性的效果越好。
对于待测数据集D 计算样本集的总方差:
其中 是待测数据,
是均值
同样的根据属性A的第i个属性值,将数据集D划分成两部分,则划分成两部分之后(及>Ai和<Ai),Gain_σ计算如下:
这里的D1,D2即是指两个部分的数据集一个>Ai 一个<Ai
对于属性A,分别计算任意属性值将数据集划分成两部分之后的Gain_σ,选取其中的最小值,作为属性A得到的最优二分方案: 去最小值的那个,作为划分属性;