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

1 什么是决策树

决策树是一种常见的机器学习算法,它的思想十分朴素,类似于我们平时利用选择做决策的过程。
它是类似流程图的结构,其中每个内部节点表示一个测试功能,即类似做出决策的过程(动作),每个叶节点都表示一个类标签,即在计算所有特征之后做出的决定(结果)。
标签和分支表示导致这些类标签的功能的连接。从根到叶的路径表示分类规则。
比如下面这个“相亲决策树”:
在这里插入图片描述

2 决策树的构建

决策树通常有三个步骤:

  • 特征选择
  • 决策树的生成
  • 决策树的修剪

决策树学习的算法通常是一个递归地选择最优特征,并根据该特征对训练数据进行分割,使得对各个子数据集有一个最好的分类的过程。
这一过程对应着对特征空间的划分,也对应着决策树的构建。

  1. 构建根节点,将所有训练数据都放在根节点,选择一个最优特征,按照这一特征将训练数据集分割成子集,使得各个子集有一个在当前条件下最好的分类。
  2. 如果这些子集已经能够被基本正确分类,那么构建叶节点,并将这些子集分到所对应的叶子节点去。
  3. 如果还有子集不能够被正确的分类,那么就对这些子集选择新的最优特征,继续对其进行分割,构建相应的节点,如此递归进行,直至所有训练数据子集被基本正确的分类,或者没有合适的特征为止。
  4. 每个子集都被分到叶节点上,即都有了明确的类,这样就生成了一颗决策树。

以上方法就是决策树学习中的特征选择和决策树生成,这样生成的决策树可能对训练数据有很好的分类能力,但对未知的测试数据却未必有很好的分类能力,即可能发生过拟合现象。
需要对已生成的树自下而上进行剪枝,将树变得更简单,从而使其具有更好的泛化能力。
决策树生成和决策树剪枝是个相对的过程,决策树生成旨在得到对于当前子数据集最好的分类效果(局部最优),而决策树剪枝则是考虑全局最优,增强泛化能力。

3 特征选择

3.1 相关概念

3.1.1 信息熵

信息熵表示随机变量的不确定度。对于一组数据来说,越随机、不确定性越高,信息熵越大;不确定性越低,信息熵越小。
为了计算熵,我们需要计算所有类别所有可能值所包含的信息期望值,著名的香农公式:
在这里插入图片描述
在一个系统中,有k类的信息,pi其中是选择该分类的概率(n/k),再乘p的对数,求和后加上负号。这是因为概率pi是小于1的数,log(pi)是小于0的数,我们要求得到的熵是大于0的。

3.1.2 条件熵

设有随机变量(X,Y)。条件熵H(X|Y)表示在已知随机变量X的条件下随机变量Y的不确定性。
随机变量X给定的条件下随机变量Y的条件熵H(X|Y)定义为X给定条件下,Y的条件概率分布的熵对X的数学期望:
在这里插入图片描述
其中,pi = P(X=xi) , i = 1,2,3…,n
注意 :与信息熵不同的是,条件熵是数学期望,而不是变量的不确定性。

3.1.3 信息增益

在划分数据集前后信息发生的变化称为信息增益,获得信息增益最高的特征就是最好的选择。
划分前,样本集合D的熵(也称经验熵)是为H(D);使用某个特征A划分数据集D,计算划分后的数据子集(给定特征A的情况下,数据集D)的条件熵(经验条件熵)H(D|A)。则公式为:
在这里插入图片描述
在计算过程中,使用所有特征划分数据集D,得到多个特征划分数据集D的信息增益(列表)。
从这些信息增益中选择最大的,因而当前结点的划分特征便是使信息增益最大的划分所使用的特征。

3.1.4 信息增益率

特征A对训练数据集D的信息增益比定义为:其信息增益g(D,A)与训练数据集D关于特征A的值的熵HA(D)之比,即:
在这里插入图片描述
注意: 其中的HA(D)是:对于样本集合D,将当前特征A作为随机变量(取值是特征A的各个特征值),求得的经验熵。
**信息增益比本质:是在信息增益的基础之上乘上一个惩罚参数。**特征个数较多时,惩罚参数较小;特征个数较少时,惩罚参数较大。
信息增益比 = 惩罚参数 * 信息增益
所谓惩罚参数,是数据集D以特征A作为随机变量的熵的倒数,即:将特征A取值相同的样本划分到同一个子集中(之前所说数据集的熵是依据类别进行划分的)。

3.1.5 基尼系数

基尼系数(Gini),也被称为基尼不纯度,表示在样本集合中一个随机选中的样本被分错的概率
Gini系数越小表示集合中被选中的样本被分错的概率越小,也就是说集合的纯度越高,反之,基尼指数集合越不纯。
基尼指数(基尼不纯度)= 样本被选中的概率 * 样本被分错的概率
如下公式:
在这里插入图片描述

3.2 特征选择的准则

直观上,如果一个特征具有更好的分类能力,或者说,按照这一特征将训练数据集分割成子集,使得各个子集在当前条件下有最好的分类,那么就更应该选择这个特征。比如身高、长相、收入等。
在找到特征维度之后,还要确定划分阈值,如收入定在多少,作为划分标准比较合适?
因此,首先找到一个维度,然后在维度上找到一个阈值,然后以这个维度的这个阈值为依据进行划分。

4 决策树算法

选择最优划分特征的标准不同,也导致了决策树算法的不同。

4.1 ID3算法

ID3算法是一种分类预测算法,算法以信息论中的“信息增益”为基础。
核心是通过计算每个特征的信息增益,每次划分选取信息增益最高的属性为划分标准,递归地构建决策树。
ID3相当于用极大似然法进行概率模型的选择。
具体方法是:

  1. 从根结点(root node)开始,对结点计算所有可能的特征的信息增益,选择信息增益最大的特征作为结点的特征。
  2. 由该特征的不同取值建立子节点,再对子结点递归地调用以上方法,构建决策树;直到所有特征的信息增益均很小或没有特征可以选择为止;
  3. 最后得到一个决策树。

从ID3的构建树过程而言,它可以看成使用贪心算法得到近似最优的一颗决策树,它无法保证是全局最优的。

4.2 C4.5算法

C4.5算法是数据挖掘十大算法之一,它是对ID3算法的改进,相对于ID3算法主要有以下几个改进:

  1. 用信息增益比来选择属性
  2. 在决策树的构造过程中对树进行剪枝
  3. 对非离散数据也能处理
  4. 能够对不完整数据进行处理

C4.5算法与ID3算法过程相似,仅在特征选择时,使用信息增益比作为特征选择准则。

4.3 CART算法

CART算法:Classification And Regression Tree。顾名思义,CART算法既可以用于创建分类树(Classification Tree),也可以用于创建回归树(Regression Tree)、模型树(Model Tree),两者在建树的过程稍有差异。
既可以解决分类问题,也可以解决回归问题。根据某一个维度d和某一个阈值v进行二分,得到的决策树是二叉树。
ID3中使用了信息增益选择特征,增益大优先选择。
C4.5中,采用信息增益比选择特征,减少因特征值多导致信息增益大的问题。
CART分类树算法使用基尼系数来代替信息增益比,基尼系数代表了模型的不纯度,基尼系数越小,不纯度越低,特征越好。这和信息增益(比)相反。

4.3.1 CART作为分类树

CART作为分类树时,特征属性可以是连续类型也可以是离散类型,但观察属性(即标签属性或者分类属性)必须是离散类型。
CART分类树算法流程:
算法从根节点开始,用训练集递归建立CART分类树。
输入:训练集D,基尼系数的阈值,样本个数阈值。
输出:决策树T。

  1. 对于当前节点的数据集为D,如果样本个数小于阈值或没有特征,则返回决策子树,当前节点停止递归。
  2. 计算样本集D的基尼系数,如果基尼系数小于阈值,则返回决策树子树,当前节点停止递归。
  3. 计算当前节点现有的各个特征的各个特征值对数据集D的基尼系数。
  4. 在计算出来的各个特征的各个特征值对数据集D的基尼系数中,选择基尼系数最小的特征A和对应的特征值a。根据这个最优特征和最优特征值,把数据集划分成两部分D1和D2,同时建立当前节点的左右节点,做节点的数据集D为D1,右节点的数据集D为D2。
  5. 对左右的子节点递归的调用1-4步,生成决策树。

4.3.2 CART作为回归树

回归树的目标是连续数据,树被用来预测目标变量的值是多少。
CART回归树和CART分类树的建立类似,
区别在于样本的输出,如果样本输出是离散值,这是分类树;样本输出是连续值,这是回归树。
分类树的输出是样本的类别,回归树的输出是一个实数。
分类树采用基尼系数的大小度量特征各个划分点的优劣。
而回归树采用最小化均方差和进行最优划分特征的选择,对于划分特征A,划分点s两边的数据集D1和D2,求出使D1和D2各自集合的均方差最小,同时D1和D2的均方差之和最小,对应的特征和特征值划分点。

5 决策树剪枝

决策树是依据训练集进行构建的,为了尽可能正确地分类训练样本,结点划分过程将不断重复,有时会造成决策树分支过多。这就可能会把训练样本学的“太好”了,以至于把训练集自身的一些特点当作所有数据都具有的一般性质而导致过拟合。
因此,对于决策树的构建还需要最后一步,即决策树的修剪。
两个目的:

  • 降低复杂度
  • 解决过拟合
    决策树的修剪,也就是剪枝操作,主要分为两种:
  • 预剪枝(Pre-Pruning)
  • 后剪枝(Post-Pruning)

5.1 预剪枝

预剪枝是指在决策树生成过程中,对每个节点在划分前先进行估计,若当前节点的划分不能带来决策树泛化性能的提升,则停止划分并将当前节点标记为叶节点。
预剪枝使得决策树的很多分支都没有“展开”,这不仅降低了过拟合的风险,还显著减少了决策树的训练时间开销和测试时间开销。
但是,另一方面,因为预剪枝是基于“贪心”的,所以,虽然当前划分不能提升泛化性能,但是基于该划分的后续划分却有可能导致性能提升,因此预剪枝决策树有可能带来欠拟合的风险。
使用性能评估中的留出法,即预留一部分数据用作“验证集”以进行性能评估。

5.2 后剪枝

后剪枝是先从训练集生成一颗完整的决策树,然后自底向上地对非叶节点进行考察,若将该节点对应的子树完全替换为叶节点能带来决策树繁花性的提升,则将该子树替换为叶节点。

5.3两种剪枝对比

  • 后剪枝决策树通常比预剪枝决策树保留了更多的分支。
  • 后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝决策树。
  • 后剪枝决策树训练时间开销比未剪枝决策树和预剪枝决策树都要大的多。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值