机器学习笔记之——决策树

决策树


1. 决策树基本思想

决策树是一种分类模型,由一个个的分支组成,每个分支可以看作一次决策,从上到下一个个分支组成了一棵树。比如,我们要判断一个苹果是不是好的,先看其颜色是不是鲜艳,若是颜色不好,则不是好的;若是颜色不错,则继续查看其色泽,然后再查看其香味,以此类推。每一次判断即是一次决策,决策后会得到两个或更多分支,分支之后可能立即得到结论(比如颜色不好,就能得出苹果不好的结论),也可能需要再次决策(比如颜色好,但是仍不能做出最终判断,需要查看其他属性,继续决策)。

Created with Raphaël 2.2.0 Start 颜色好? 色泽好? 香味好? End 不好 yes no yes no yes no

2. 决策过程

决策树每次选择样本的一个特征来进行划分,将样本集划分为两个几个子集,尽可能使得各个子集内类别一致。

2.1 停止条件

当下列三个条件满足其中一个时,此节点不再继续分支,成为叶子节点。

  • 当前节点所有样本都属于同一类
  • 当前节点样本的所有属性一致
  • 当前节点为空集,不含任何样本

2.2 如何决策

这里我们假设特征都是离散特征,选定特征之后,可以根据特征的不同取值划分为几个不同的子集。如果是连续特征,则还需要在连续区间内寻找一个或几个合适的划分点。至于如何选择特征,有几种不同的策略。

2.2.1 信息增益

信息熵是用于衡量集合纯度最常用的指标。假设集合 D 中第 k 类样本所占比例为 p k p_k pk,则信息熵公式为:
E n t ( D ) = − ∑ i = 1 K p k log ⁡ 2 p k Ent(D)=-\sum_{i=1}^Kp_k \log_2 p_k Ent(D)=i=1Kpklog2pk E n t ( D ) Ent(D) Ent(D) 越小,则集合 D 的纯度越高。极端情况下:

  • 当集合 D 中所有样本都属于同一类时,此时信息熵最小, K = 1 , p 1 = 1 , E n t ( D ) = 0 K=1, p_1=1, Ent(D)=0 K=1,p1=1,Ent(D)=0
  • 当集合 D 中各类样本数目相等,即 p 1 = p 2 = ⋯ = p K = 1 / K p_1=p_2=\dots =p_K=1/K p1=p2==pK=1/K ,此时信息熵最大
    E n t ( D ) = − K ⋅ 1 K log ⁡ 2 1 K = log ⁡ 2 K Ent(D)=-K\cdot \frac{1}{K} \log_2 \frac{1}{K}=\log_2 K Ent(D)=KK1log2K1=log2K 且 K 越大时,信息熵 E n t ( D ) Ent(D) Ent(D) 越大。

因此我们可以用信息熵来寻找最优特征,使得划分后子节点的纯度最大。假设样本集 D D D 中在属性 a a a 的取值有 V V V 种,则可以根据属性 a a a 划分为 V V V 个子节点,第 v v v 个子节点的样本集分别是 D v D_v Dv,那么如果用属性 a 来划分的话,其信息增益为:
G a i n ( D , a ) = E n t ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) Gain(D,a)=Ent(D)-\sum_{v=1}^V\frac{\vert D_v \vert}{\vert D \vert}Ent(D_v) Gain(D,a)=Ent(D)v=1VDDvEnt(Dv) 于是我们可以对每个属性都计算出以上信息增益,选取信息增益最大的特征来进行划分。ID3 决策树算法便是使用信息增益来选择划分属性。

2.2.2 信息增益率

信息增益有个缺点,会对取值数目较多的特征有所偏好,极端情况下,每个样本在此属性的取值均不相同(比如 ID 属性),则样本会被划分成一个子节点一个样本,这样每个子节点的纯度都是最大的,但是这样的划分意义不大,不仅泛化能力差,开销也很大。为了减少这种偏好可能带来的不利影响, C4.5 决策树算法使用信息增益率来选择划分属性,其定义如下:
G a i n r a t i o ( D , a ) = G a i n ( D , a ) I V ( a ) Gain_ratio(D,a)=\frac{Gain(D,a)}{IV(a)} Gainratio(D,a)=IV(a)Gain(D,a) 其中
I V ( a ) = − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ log ⁡ 2 ∣ D v ∣ ∣ D ∣ IV(a)=-\sum_{v=1}^V\frac{\vert D_v \vert}{\vert D \vert}\log_2 \frac{\vert D_v \vert}{\vert D \vert} IV(a)=v=1VDDvlog2DDv I V ( a ) IV(a) IV(a) 被称为属性 a 的固有值 (Instrinsic Value),实际上也是属性 a 的取值概率分布的信息熵,一般属性 a 的取值数目 V V V 越大, I V ( a ) IV(a) IV(a) 也会越大。
但是信息增益率会对取值数目较少的特征有所偏好,因此 C4.5 算法不是直接选择信息增益率最大的特征,而是先选择信息增益高于平均值的若干特征,再从中选择信息增益率最高的

2.2.3 基尼指数

CART (Classification and Regression Tree) 决策树则使用基尼指数来选择划分属性。基尼值的计算公式如下:
G i n i ( D ) = ∑ k = 1 K ∑ k ′ ≠ k p k p k ′ = 1 − ∑ k = 1 K p k 2 Gini(D)=\sum_{k=1}^K\sum_{k'\ne k}p_k p_{k'}=1-\sum_{k=1}^Kp_k^2 Gini(D)=k=1Kk̸=kpkpk=1k=1Kpk2 其反映了从数据集 D 中随机抽取两个样本,其类别不一样的概率,所以基尼值越小,纯度越高。
属性 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(D,a)=\sum_{v=1}^V\frac{\vert D_v \vert}{\vert D \vert} Gini(D_v) Giniindex(D,a)=v=1VDDvGini(Dv)

3. 剪枝

剪枝是为了降低决策树的复杂性,从而降低过拟合的风险。剪枝需要预留出部分数据作为验证集来辅助判断,倘若分裂不能带来泛化性能的提升,则不分裂,即相当于把子节点都剪掉。

3.1 预剪枝

预剪枝从上到下,是在决策树生成过程中执行,如果当前节点的划分不能使得决策树的泛化性能提升,则不进行划分,泛化性能使用验证集来评估。其优劣如下:

  • 优点:降低过拟合风险,减少训练和测试时间
  • 缺点:有些节点虽然分裂不能提高泛化性能,但是其后续分裂可以,预剪枝无法利用这种情况,有欠拟合风险。

3.2 后剪枝

后剪枝从下到上,首先按照完整的流程训练一棵决策树,然后自底向上对非叶子节点考察,倘若将其替换为叶子节点能提高泛化性能,则剪掉其子树。

  • 优点:比起预剪枝,欠拟合风险更小,泛化性能一般更好
  • 缺点:训练开销比预剪枝大得多
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值