机器学习-决策树详解

本文深入探讨了决策树的算法原理,包括ID3、C4.5和CART。介绍了信息熵、信息增益、信息增益率、基尼指数等特征选择准则,以及连续值处理和缺失值处理的方法。同时,讨论了决策树的剪枝策略,包括预剪枝和后剪枝,以防止过拟合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


决策树是一种基本的 分类回归方法,其主要的优点为模型具有可读性,分类速度快。学习时,根据损失函数最小化的原则建立决策树模型。预测时,利用决策树模型进行分类。决策树学习通常有三个步骤: 特征选择决策树生成决策树的裁枝

1 算法原理

决策树是一种简单但是广泛使用的分类器,递归的选择最优特征并用最优特征对数据集进行分割,通过训练数据构造决策树可以高效的对未知的数据进行分类

1.)树模型 , 分类决策树模型是一种描述对实例进行分类的树形结构。结点有两种类型,内部结点表示一个特征或属性,叶结点表示一个类。 用决策树分类,从根结点开始,对实例的某一特征进行测试,根据测试结果,将实例分配到其子节点;这时,每一个子结点对应着该特征的一个取值,如此递归下去,直到到达叶子结点。最后将实例分到叶结点的类中。
2.) if-then规则集合 , 由决策树的根结点大叶结点的每一条路径构建一条规则;路径内部结点的特征对应着规则的条件,而叶结点的类对应着规则的结论。其有一个重要性质为:互斥且完备。也就是每一个实例都有路径覆盖且只有一条。
3.) 条件概率分布 , 表示给定特征条件下类的条件概率分布。这一条件概率分布定义特征空间的一个划分。将特征空间划分为互不相交的单元区域,并在每个单元定义一个类的概率分布就构成了一个条件概率分布。决策树的一条路径对应于划分中的一个单元。假设X为特征的随机变量,Y为类的随机变量。那这个条件概率分布为P(Y|X),各个叶结点上的条件概率往往偏向某一个类,即属于某一类的概率较大。决策树分类时将该结点的实例分到条件概率大的那一类去。
4.) 算法思想, 基本流程遵循分而治之的思想。

输入:训练集D={
   
   (X1,Y1),(X2,Y2), …(Xm,Ym)};
      属相集A={
   
   a1,a2,...ad}.
过程:函数TreeGenerate(D,A)
1:生成结点 node;
2if D中的样本全属于同一类别C then
3:   将 node 标记为C类叶节点;return
4 :end if
5if A=Φ  OR  D中样本在A上取值相同  then
6:   将 node 标记为叶节点,其类别标记为D中样本数最多的类;return
7 :end if
8 :从A中选择最优划分属性a*9for a*中的每一个值a*v do
10:    为node生成一个分支;令Dv表示D中在a*上取值为a*v 的样本子集;
11if Dv为空 then
12:      将分支结点标记为叶节点,其类别标记为D中样本最多的类;return
13else
14:      以TreeGenerate(Dv,A\{
   
   a*})为分支结点
15:    end if
16 :end for
输出:以node为根节点的一颗决策树

决策树学习的本质是从训练数据归纳出一组分类规则,选择一个与训练数据矛盾较小的决策树,同时具有很好的泛化能力。

2 特征选择

目的:通过一种衡量标准来计算通过不同特征进行分枝选择后的分类情况,找出最好的那个当根节点,以此类推。

信息熵:用来度量样本集合的纯度(表示物体内部的混乱程度。例如杂货店和专卖店)
设X是一个取有限个值得离散随机变量,其概率分布为:
P ( X = x i ) = p i , i = 1 , 2 , . . . , n ( 1.1 ) P(X=xi)=pi, i=1,2,...,n (1.1) P(X=xi)=pii=1,2,...,n1.1
则随机变量X的熵定义为:
E n t ( D ) = − ∑ k = 1 K p k l o g 2 p k ( 1.2 ) Ent(D)=-\sum_{k=1}^{K}p_{k}log_{2}p_{k} (1.2) EntD=k=1Kpklog2pk1.2
当随机变量只取两个值,例如0,1时,熵的变化曲线如正弦图。当 p=0 或 p=1 时,Ent(D)=0,随机变量完全没有不确定性,当p=0.5时,熵取值最大,随机变量不确定性最大。 我们当然希望划分后的属性尽量的属于同一类别,样本集合的纯度越高越好,所以 Ent(D) 的值越小越好。

(1) 信息增益

考虑到不同分支结点所包含的样本数不同,会对分类效果产生较大的影响,给分支结点赋予权重 ∣ D v ∣ / ∣ D ∣ \left | D^{v} \right |/\left | D \right | Dv/D, 其中 ∣ D v ∣ \left | D^{v} \right | Dv表示第v个分支结点所包含了D中所有在属性a上取值为 a v a^{v} av的样本。这样可计算出属性a对样本集D进行划分所获得的信息增益

分类后的专一性,希望分类后的结果是同类在一起

特征a对训练数据集D的信息增益g(D,a),定义为集合D的经验熵Ent(D)与特征A给定条件下D的经验条件熵Ent(D|A)之差,即
G a i n ( D , a ) = E n t ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( ∣ D v ∣ ) ( 1.3 ) Gain(D,a)=Ent(D)-\sum_{v=1}^{V}\frac{\left | D^{v} \right |}{\left | D \right |}Ent(\left | D^{v} \right |)(1.3) GainD,a=EntDv=1VDDvEntDv1.3
一般来说,信息增益越大,意味着使用属性a来进行划分所获得的纯度提升越大,因此Gain越大越好。

在决策树的每一个非叶子结点划分之前,先计算每一个属性所带来的信息增益,选择最大信息增益的属性来划分,因为信息增益越大,区分样本的能力就越强,越具有代表性,很显然这是一种自顶向下的贪心策略。以上就是ID3算法的核心思想。ID3算法相当于用极大似然法进行概率模型的选择 。

ID3算法原理

输入:训练数据集D,特征集A,阈值ϵ 
输出:决策树T 
 (1) 若D中所有实例属于同一类 Ck,则T为单结点树,并将类 Ck 作为该结点的类标记,返回T; 
 (2) 若 A=∅,则T为单结点树,并将D中实例数最大的类 Ck 作为该结点的类标记,返回T; 
 (3) 否则,计算A中各特征对D的信息增益,选择信息增益最大的特征 Ag; 
 (4) 如果Ag 的信息增益小于阈值ϵ,则置T为单结点树,并将D中实例数最大的类 Ck 作为该结点的类标记,返回T; 
 (5) 否则,对Ag 的每一个可能值ai,依 Ag=ai 将D分割为若干非空子集Di,将 Di 中实例数最大的类作为标记,构建子结点,由结点及其子结点构成树T,返回T; 
 (6) 对第i个子子结点,以Di为训练集,以 A−{
   
   Ag} 为特征集,递归地调用步(1)~(5),得到子树Ti,返回Ti;

ID3算法的实现
C++ 实现可参考 https://blog.youkuaiyun.com/fly_time2012/article/details/70210725
python实现可参考 https://blog.youkuaiyun.com/u014688145/article/details/53212112

以信息增益作划分存在对可取值数目较多的属性有所偏好(从公式(1.3)可以看出ID3更愿意选择那些包括很多种类的特征属性,即哪个A中的n多,那么这个A的信息增益就可能更大),所以引入了信息增益比可以对这个问题进行校正。

(2) 信息增益率

特征A对训练数据集D的信息增益比G_r(D,a)定义为其信息增益G(D,a)与训练数据集D关于特征A的值的熵Ent(D)之比,即 G a i n   r a t i o = g a i n ( D , a ) I V ( a ) Gain\, ratio=\frac{gain(D,a)}{IV(a)} Gai

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值