决策树1- 基本概念

决策树

决策树
上图来自西瓜书,是决策树的一种树形。生成决策树的过程,不断的根据样本的属性( 样本的某个特 )划分样本子集。每个结点选择当前最优的属性作为划分依据,将样本集合不断的划分成更小的子集合,直到子集合中样本类别一致时或者没有可以划分的属性值时,则停止划分,标记为叶结点(叶节点代表一个类别)。

简单的介绍一下决策树的组成元素:

  1. 根节点: 所有的训练样本
  2. 内部节点: 对应某一个划分属性
  3. 叶节点: 对应某一种决策结果
  4. 判定测试序列: 某个样本在节点中传递的路径

所有节点都包含着不同数量的样本。

以上是分类树的例子,决策树也可以用作回归任务,如CART算法。决策树是GBDT,Xgboost等更高级结构的基础,所以尽量要掌握决策树的原理。

决策树算法的基本流程

假设有一个数据集,其中的每个样本有多种特征,每个特征有不同的取值。通过这个数据集来生成一个决策树的一般流程可以归纳为:

  • 特征选择

特征选择就是决策树分叉时,依据新节点的"纯度",选择最优的划分属性;

  • 决策树生成

树不断的分叉,直到样本的属性用光,或者树的深度达到了预定值,则结束分叉;

  • 剪枝

如果一直树杈分下去,一定能够使得所有的样本都正确的归类,但这样会产生对训练集的过拟合,泛化能力变差,可以通过剪枝操作来改善泛化能力。

通过这三步,就可以生成一颗决策树了。下面来学习一下具体怎么进行特征的选择和剪枝。

如何选择最优的划分属性?

决策树不断分叉的原因,是尽可能的让不同类别的样本划分到不同的节点,同类别的样本划分到同一个节点。而选择最优的划分属性(特征)的过程,相当于是遍历计算出所有特征的结果,找到能使分叉后子集合最 “纯” 的特征,就是最优的划分属性了。
所以,该如何定义 “纯” ,需要借助信息论中 “信息熵” 的概念了。

: 表示随机变量不确定性的度量,也就是混乱程度的一种度量。

假定数据集 D 中第 K 类样本所占的比例为 p k p_{k} pk,则信息熵定义为:

Ent ⁡ ( D ) = − ∑ k = 1 N p k log ⁡ 2 p k \operatorname{Ent}(D)=-\sum_{k=1}^{N} p_{k} \log _{2} p_{k} Ent(D)=k=1Npklog2pk

数据集包含的类别越少时越纯,Ent(D)也越小。

法1: 信息增益

ID3算法用到信息增益

直白的讲就是决策树分叉前的信息熵减去分叉后的信息熵。

信息增益最大的特征就是最佳划分属性。

假定分叉前样本集 D 中的特征 aV个可能的取值 { a 1 , a 2 , … , a V } \left\{a^{1}, a^{2}, \ldots, a^{V}\right\} {a1,a2,,aV} ,当选择 a 做划分属性时,会分V个节点,每个节点上的子样本集合为 D v D^{v} Dv,同时为不同节点赋权重(按照样本的比例),于是信息增益为:

Gain ⁡ ( D , a ) = Ent ⁡ ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ Ent ⁡ ( D v ) \operatorname{Gain}(D, a)=\operatorname{Ent}(D)-\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \operatorname{Ent}\left(D^{v}\right) Gain(D,a)=Ent(D)v=1VDDvEnt(Dv)

减数部分也叫 条件熵

缺点: 分叉时偏好取值较多的属性。

原因分析:

  1. 取值多的特征,样本更分散,所有得到的新节点"纯度" 趋于更高,熵更低,而划分前的增益不变的情况下,该特征增益更大。
  2. 比如,当特征的可能取值数量正好等于样本数量,那条件熵几乎为0,该特征一定会被选择。

法2: 信息增益率

C4.5算法用到信息增益率

相当于在法1基础上,增加了惩罚系数,可取值越多,系数越大。

G a i n _ r a t i o ( D , a ) = G a i n ( D , a ) I V ( a ) Gain\_ratio\left( D,a \right) =\frac{Gain\left( D,a \right)}{IV\left( a \right)} Gain_ratio(D,a)=IV(a)Gain(D,a)

I V ( a ) = − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ log ⁡ 2 ∣ D v ∣ ∣ D ∣ \mathrm{IV}(a)=-\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \log _{2} \frac{\left|D^{v}\right|}{|D|} IV(a)=v=1VDDvlog2DDv

IV(a) 是属性 a 的 “固有值”,内部属性。

缺点: 分叉时偏好取值较少的属性。

法3:基尼指数

CART决策树算法用到基尼指数

反应从节点样本集合中随机抽取两个样本,类别不一致的概率。CART决策树默认为二叉树。

基尼值的定义:

Gini ⁡ ( D ) = ∑ k = 1 ∣ Y ∣ ∑ k ′ ≠ k p k p k ′ \operatorname{Gini}(D)=\sum_{k=1}^{|\mathcal{Y}|} \sum_{k^{\prime} \neq k} p_{k} p_{k^{\prime}} Gini(D)=k=1Yk̸=kpkpk

= ∑ k = 1 ∣ y ∣ p k ( 1 − P k ) =\sum_{k=1}^{|y|} p_{k}\left(1-P_{k}\right) =k=1ypk(1Pk)

= 1 − ∑ k = 1 ∣ Y ∣ p k 2 =1-\sum_{k=1}^{|\mathcal{Y}|} p_{k}^{2} =1k=1Ypk2

选择特征 A 的情况下,针对 A 所有可能取值 a, 分别计算基尼指数:

G i n i _ i n d e x ( D , a ) = ∑ v = 1 V ∣ D v ∣ ∣ D ∣ G i n i ( D v ) Gini\_index\left( D,a \right) =\sum_{v=1}^V{\frac{\left| D^v \right|}{|D|}}\text{}Gini\left( D^v \right) Gini_index(D,a)=v=1VDDvGini(Dv)

选择基尼指数最小的特征和切分点,作为最优划分属性。

三种决策树模型:

算法特征选择标准
ID3信息增益
C4.5信息增益率
CART基尼指数

对抗过拟合 – 剪枝处理

分支太多,容易过拟合,泛化能力变差。所以要适当剪枝,常用方法是预剪枝后剪枝

剪枝操作包括的点也很多,这里只是简单描述一下,详细的参考未来的博客。www.elgong.top

预剪枝

  1. 预剪枝是在决策树生成的过程中,对每个结点在划分前先估计,根据划分前后验证集的精度,来决定是否划分;

  2. 只能估计当前结点可划分性,不能预测到未来节点划分的必要性,是贪心算法;

  3. 容易造成欠拟合。

后剪枝

  1. 先生成完整的树,再从叶结点往回计算,根据验证集精度是否提升决定是否剪枝;

  2. 泛化能力往往优于预剪枝,欠拟合风险小;

  3. 时间开销大。

属性为连续值时?

C4.5 算法采用二分法将连续值离散化

与离散属性不同,连续的属性可以在后代节点中再次使用

当数据中含有缺失值时?

处理方法:

通过无缺失数据计算出三个参数:

  1. 无缺失样本占总样本比例
  2. 无缺失样中 K类别 占比 pk
  3. 无缺失样本中 v 属性样本占比 rv

对单样本增加一个权值 Wx, 无缺失样本的Wx = 1, 有缺失样本的Wx = rv*Wx

在计算分支时,同一样本以不同的概率划分到不同的子节点中

  • 当样本的属性已知:则把该样本划分进对应的子节点,权值=1;

  • 当样本的该属性缺失:则把该样本同时划入所有的子节点,样本权值需要更新为`Wx = rv*Wx。

转载自我的博客

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值