《统计学习方法》——第五章、决策树的构造及其算法(下)

作者简介:整个建筑最重要的是地基,地基不稳,地动山摇。而学技术更要扎稳基础,关注我,带你稳扎每一板块邻域的基础。
博客主页:

特征选择

特征选择问题
  • 划分数据集的大原则就是:将无序的数据变得更有序。
  • 特征选择在于选取对训练数据具有分类能力的特征。如果利用一个特征进行分类的结果与随机分类的结果没有很大差别,则称这个特征是没有分类能力的。
  • 通常特征选择的准则是信息增益或信息增益比。
  • 如果一个特征具有更好的分类能力,或者是按照这一特征将训练数据集分割成子集,使得各个子集在当前条件下有最好的分类,那么就更应该选择这个特征。
信息增益
  • 在信息论中,熵用于表示随机变量不确定性的度量。
    • 事件出现的概率越小,信息量越大,信息量的大小与事件发生的概率大小是相反的。
  • 信息熵被定义为对平均不确定性的度量,是信息杂乱程度的量化描述。
    • 信息熵是对随机变量不确定性的度量,随机变量X的熵越大,不确定性就越大。

总之,信息熵用来度量信息的混乱程度。
那熵与分类⼜有什么关系呢?如下图:哪个图的熵值更大?
在这里插入图片描述

  • 熵的公式:
    在这里插入图片描述
  • p表示概率
  • 概率越大,混乱程度越低,熵值越低
    • 熵值越低表示数据越纯,分类越明显
    • 根据公式可知,p为0或1时,熵值最小,那么p=0.5时,熵值最大,此时随机变量不确定性最大
  • 计算概率从0到1的信息熵
import numpy as np
import matplotlib.pyplot as plt

eps = 1e-4
p = np.linspace(eps, 1 - eps, 100)
h = -(1 - p) * np.log2(1 - p) - p * np.log2(p)
plt.plot(p, h)
plt.show()
print(max(h))
print(list(h).index(max(h)))
print(p[list(h).index(max(h))])

输出结果:
0.999926428806495
50
0.5050494949494949

在这里插入图片描述

条件熵
  • 条件熵是条件概率分布对熵的一个延伸。如果知道另一个随机变量Y的取值为y,那么X的后验分布即为P(X|Y=y)。
  • 利用条件分布可以定义条件熵,表示在已知随机变量Y的条件下随机变量X的不确定性。
信息增益
  • 熵表示样本集合的不确定性,熵越大,样本的不确定性就越大。

  • 因此可以使用划分前后集合的熵的差值来衡量使用当前特征对于样本集合划分效果的好坏。

  • 那么,信息增益表示得知特征X的信息而使得类Y的不确定性减少的程度。

    • 即熵值减小,而熵就是不确定性,不确定性减少了多少就是信息增益。
      信息增益的公式
    • 特征A对训练数据集D的信息增益g(D,A),定义为集合D的信息熵H(D)与特征A给定条件下D的信息条件熵H(D|A)之差
    • 即公式为:
      在这里插入图片描述
      在这里插入图片描述
  • 两者之差称为互信息。决策树学习中信息增益等价于训练数据集中类与特征的互信息。

  • 决策树学习用信息增益选择特征。信息增益大的特征具有更强的分类能力。

  • 根据信息增益准则的特征选择方法:

    • 对训练数据集或子集D,计算每个特征的信息增益,并比较它们的大小,选择信息增益最大的特征。
  • 信息增益的计算过程:

    • 计算初始熵
    • 计算各特征的熵
    • 进行求差得信息增益
    • 选择信息增益最大的
  • 以上通过信息增益获得决策树,实际上只是决策树算法的一种,称为ID3算法,ID3算法的核心是在决策树各个结点上用信息增益准则选择特征,递归地构建决策树。

  • ID3算法相当于用极大似然法进行概率模型的选择,但ID3算法有一个缺陷就是信息增益倾向于分类较多的特征。

信息增益比
  • 为避免ID3算法的缺陷,C4.5采用信息增益比的方式来选择特征。这是特征选择的另一准则。
  • 信息增益比的公式:
    • 特征A对训练数据集D的信息增益比,定义为其信息增益g(D,A)与训练数据集D关于特征A的值的熵之比
    • 公式:信息增益比 = 信息增益 / 特征的熵

决策树的剪枝

  • 若产生的决策树对训练数据集的分类很准确,但对未知的测试数据集的分类却没有那么准确,即出现过拟合现象
  • 另种说法:
    • 在学习的过程中为了尽可能的正确的分类训练样本,会不停地对结点进行划分。
    • 因此这会导致整棵树的分支过多,也就会出现过拟合的现象。
  • 过拟合的原因在于学习时过多地考虑如何提高对训练数据的正确分类,从而构建出过于复杂的决策树
  • 解决这个问题的办法就是考虑决策树的复杂度,对已生成的决策树进行简化,修剪决策树中比较不太重要的分支
预剪枝
  • 指定树的高度或者深度

  • 每一个结点所包含的最小样本数目

  • 指定结点的熵小于某个值,不再划分

  • 预剪枝就是在构造决策树的过程中,先对每个结点在划分前进行估计。

  • 若当前结点的划分不能带来决策树模型泛化性能的提升,则不对当前结点进行划分并且将当前结点标记为叶结点。

后剪枝
  • 在已生成过拟合的决策树上进行剪枝,可以得到简化版的剪枝决策树

  • 后剪枝就是先把整棵决策树构造完毕,然后自下而上的对非叶结点进行考察。

  • 若将该结点对应的子树换为叶结点能够带来泛化性能的提升,则把该子树替换为叶结点。

CART算法

CART
  • CART算法又称为分类回归树,即CART决策树即可以做分类树,又可以做回归树。
    • 对于分类树,采用基尼指数最小化准则
    • 对于回归树,采用的是平方误差最小化准则
  • CART 算法由以下两步组成:
    • 决策树生成:基于训练数据集生成决策树,生成的决策树要尽量大
    • 决策树剪枝 用验证数据集对己生成的树进行剪枝并选择最优子树,这时用损失函数最小作为剪技的标准。
CART生成
  • 分类树的生成
    • 在特征选择的衡量标准采用的是基尼系数,同时决定该特征的最优二值切分点
      • 将乱序的值进行从小到大排序
      • 不断地二分
    • 基尼系数构建决策树:
      • 计算初始基尼系数
      • 分别计算各特征的基尼系数
      • 做差计算基尼系数增益
    • 基尼系数本身反映了样本的不确定度。当基尼系数越小时,说明样本之间的差异性小,不确定程度低
    • 基尼指数越小表示集合中被选中的样本被分错的概率越小,也就是说集合的纯度越高,反之,集合越不纯
    • GINI公式:
      • 基尼指数(Gini(D)) = 样本被选中的概率 * 样本被选错的概率
      • 假设有K个类别,样本点属于第k类的概率为pk
        在这里插入图片描述
  • 比较基尼系数与信息熵
import numpy as np
import matplotlib.pyplot as plt

eps = 1e-4
p = np.linspace(eps, 1 - eps, 100)
h = -(1 - p) * np.log2(1 - p) - p * np.log2(p)
gini = 2 * (1 - p) * p
plt.plot(p, gini, 'r-', lw=3, label="Gini")
plt.plot(p, h / 2, 'g-', lw=3, label="entropy")
plt.title('Gini/Entropy', fontsize=16)
plt.legend()
plt.show()

在这里插入图片描述

  • 回归树的生成
    • 用平方误差最小化准则选择最优特征
    • 假设已将输入空间划分为M个单元R1,R2…Rm,并且在每个单元Rm上有一个固定的输出值Cm
      在这里插入图片描述
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王者与CV

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值