决策树算法浅析(ID3,C4.5,CART)

决策树模型

决策树呈树形结构,在分类问题中,表示基于特征对实例进行分类的过程。学习时,利用训练数据,根据损失函数最小化的原则建立决策树模型;预测时,对新的数据,利用决策模型进行分类。是一种描述对实例进行分类的树形结构,由节点和有向边组成。结点有三种类型:

  1. 根节点(root node):表示树根,代表整个样本集合,且可以进一步划分为两个或多个子集。
  2. 中间节点(internal node):表示特征
  3. 叶子节点(leaf node):表示类别,无法再拆分的节点。
    决策树从根节点一层一层往叶子节点走,上一层的节点称为下一层的父节点,下一层的结点称为上一层的子节点。用决策树进行分类,从根节点开始,对样例的某一个特征值进行测试,根据测试结果,将样例分配到其子节点,此时,每一个子节点对应着该特征的一个取值。然后再递推下去,直到叶子节点分到其类中。

在这里插入图片描述
如上图中:
灰色代表根节点
蓝色代表特征:天气,湿度,风力
红色代表特征值
*天气:晴朗,多云,雨天
*湿度:高,正常
*风力:弱,强
黄色、绿色代表叶子节点:黄色代表正类“是”,绿色代表反类“否”

树的生成

分裂属性作为构造决策树的关键因素。分裂属性就是在某个节点处按照某一特征属性的不同值构造不同的分支,其目标是让各个分裂子集尽可能的纯(即尽量使一个分裂子集中待分类项属于同一个类别)。

第一步:从树根开始,确定一个特征开始分裂,度量标准为分类误差率(错分样本数/测试样本总数),取分类误差率最小的特征。

第二步:分裂后检查每个特征值对应的分支,若某分支里所以样例都属于同一类(没有分错的),则停止分裂;否则选择分类误差率最小且该条支路上未用过的特征(避免出现重复特征使得树过于复杂)继续分裂。

第三步:递归生成完整的决策树,直到特征完全选取完后停止。

于是根据上面过程我们可以写出决策树算法的伪代码

DcisionTree(Samples,Attributes)
用所有样本创建一个节点;
if 当前节点为叶子节点
    给此叶子节点添加类别标签;
    返回;
else
    按照某种选取标准选择最好的分裂属性Best_Attribute;
    按照Best-Attribute的取值,在当前节点下增加若干子节点;
    for 每一个子节点
         按照某种条件从Samples中选择子集Samples_sub;
         创建子树:DcisionTree(Samples_sub,Attributes-{Best_Attribute});
     end
 end
ID3算法

在ID3算法中,运用信息论中的熵概念作为启发式函数。选择具有最大信息增益(information gain)的属性作为当前节点的分裂属性。
信息熵:
在这里插入图片描述
其中,pi是第i类样本的比例。

例:当一个样本中只有A类和B类,且A,B各占50%,则Entropy(A)=-[1/2log2(1/2)+ 1/2log2(1/2)]=1;若样本中只有A类,则Entropy(A)=-[1*log21+0]=0。可见,信息熵用来衡量一个样本中的类别混乱程度,信息熵越大,样本的分类越平均,信息熵越小,样本越倾向于某一类。当熵为1时,则分类效果是最差的,无法对划分类别做出选择。

假设属性A具有v个不同的离散属性值,可使用属性A把节点N划分成v个子节点{N1, N2, …, Nv}。用属性A对节点N划分后的v个子节点的平均信息熵为:
在这里插入图片描述

|Nj|/|N|表示属性取j时的样本数量和总体样本数量的比值,即信息熵的权重。
用属性A划分节点N的信息增益
在这里插入图片描述

为什么ID3算法会对可取值数目较多的属性有所偏好?

分析:当信息熵越小,即Entropy(N)越小,则在不考虑权重的情况下信息增益Gain(N,A)越大;信息熵越小,则样本越倾向于某一类,那么这样就达到了分类的目的。因此ID3算法采用最大信息增益原则选择当前节点的分裂属性。
所以信息增益越大就拥有更强的分类能力,如果某属性取值数目较多,那么用这个属性去划分原数据集时,原数据集会被划分为多个子集,这样会导致I(N,A)整体更小,那么Gain会更大,根据信息增益准则,这是当前最好的分类属性。这就是为什么ID3算法会对可取值数目较多的属性有所偏好的原因。

C4.5算法

C4.5与ID3算法唯一区别在于分裂属性的选择标准,C4.5为了解决ID3对可取值数目较多的属性有所偏好的问题,引入了信息增益率,采用最大信息增益率原则选择当前节点的分裂属性。
用属性A划分节点N的信息增益率:
在这里插入图片描述
假设属性A具有v个不同的离散属性值,可使用属性A把节点N划分成v个子节点{N1, N2, …, Nv}。用属性A对节点N划分后的划分熵
在这里插入图片描述

为什么C4.5能解决对取值数目较多的属性有所偏好的问题呢?

我的理解是:通过对划分熵Split(N,A)和信息熵Entropy()的公式对比,我们可发现一个是乘以该节点的权重,一个是乘以该样本的概率,总的来说公式大致相同,也可理解为划分熵与信息熵代表的意思大体相同,即这个属性的混乱程度,当N取值越多时,则信息熵越大,等价于划分熵Split(N,A)越大,那么信息增益率GainRatio越小,于是抵消了ID3算法对取值多的属性偏好。
但是C4.5也有缺点,就是对取值较少的属性有所偏好,N越少,那么与信息熵公式等同来看,划分熵Split(N,A)越小,那么信息增益率GainRatio越大,根据最大信息增益率原则,这就是当前最好的分裂属性。

CART

ID3、C4.5算法都是基于信息熵来进行划分节点选取的,主要用于分类问题。而CART决策树全称为分类回归树(Classification And Regression Tree),分类和回归问题都可以使用。CART和前面两种算法不同的地方是,在每一次节点做判断时,只考虑二分类的情况,即使能够取到多个值(比如有三种颜色的球,ID3和C4.5直接就划分为三个子类,而CART只能在一次划分时划分为是不是某一种颜色然后再进行判断),实际上是一棵二叉树。

CART划分的标准是使用基尼指数来进行划分:
基尼指数在这里插入图片描述
pk表示第k类样本所占的比例。代表总体内包含的类别越杂乱,GINI指数就越大(跟熵的概念很相似)。所以选取划分后基尼指数最小的属性(最能够区分样本的属性)进行划分。
定义属性a的基尼指数
在这里插入图片描述
于是我们将具有最小基尼指数的属性当作当前最好的分裂属性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章