决策树简单讲解

周志华老师的《机器学习》学习笔记

基本流程

决策树是一种常见的机器学习方法,用于解决分类和回归问题。在分类问题中,决策树通过对数据集进行反复划分,构建一棵树形结构,使得每个叶节点对应一个类别标签;而在回归问题中,每个叶节点对应一个数值。决策树的构建过程通常遵循“分而治之”的策略,递归地将数据集划分为较小的子集,在每个子集上构建子树,直到满足某种停止条件为止。

显然,决策树的生成是一个递归过程.在决策树基本算法中,有三种情形会导致递归返回: (1) 当前结点包含的样本全属于同一类别,无需划分; (2) 当前属性集为空,或是所有样本在所有属性上取值相同,无法划分; (3) 当前结点包含的样本集合为空,不能划分。 在第⑵种情形下,我们把当前结点标记为叶结点,并将其类别设定为该结点所含样本最多的类别;在第⑶种情形下,同样把当前结点标记为叶结点,但将其类别设定为其父结点所含样本最多的类别.注意这两种情形的处理实质不同:情形⑵是在利用当前结点的后验分布,而情形⑶则是把父结点的样本分布作为当前结点的先验分布。

来源: Decision Tree Algorithm. Demystifying Decision Tree Classifier… | by Abdul4code | GoPenAI

划分选择

一般而言,随着划分过程不断进行,我们希望决策树的分支结点所包含的样本尽可能属于同一类别,即结点的“纯度” (purity) 越来越高。

信息增益

信息增益是决策树中用于选择最优划分属性的一个重要指标,它衡量的是在划分数据集前后,基于某个属性(特征)获得的信息增益,即节点划分前后熵的减少量。信息增益越大,说明划分后的纯度提高得越多,这样的划分就越有利于构建一个更好的决策树模型。

具体来说,信息增益的计算过程如下:

1. 计算划分前数据集的熵 H(D)。熵用来衡量数据集的混乱程度,熵越高表示数据集的不确定性越大。熵的计算公式为:H(D) = - \sum_{i=1}^{c} p_i \log_2(p_i)其中,c是类别的数量,p_i是第i个类别在数据集D中的比例。

2. 对于每个属性a,计算其条件熵 H(D|a)。条件熵表示在属性a 的条件下,数据集D的熵。条件熵的计算公式为:H(D|a) = \sum_{i=1}^{n} \frac{|D_i|}{|D|} H(D_i)其中,n是属性a的取值数量,D_i是属性 a 取值为第i个取值时的样本子集,|D_i| 是样本子集的大小,|D|是数据集 D的大小。

3. 计算信息增益 IG(D, a)。信息增益表示划分数据集后熵的减少量,即划分前后的信息变化。信息增益的计算公式为:IG(D, a) = H(D) - H(D|a)

4. 选择信息增益最大的属性作为最优划分属性。即选择能够最大程度地减少数据集不确定性的属性作为划分属性。

增益率

实际上,信息增益准则对可取值数目较多的属性有所偏好,为减少这种偏好可能带来的不利影响,著名的C4.5决策树算法[Quinlan, 1993]不直接使用信息增益,而是使用“增益率”(gain ratio)来选择最优划分属性。

信息增益率是决策树中用于属性选择的一种方法,它是信息增益与属性熵的比值,旨在解决信息增益偏向选择取值较多的属性的问题。信息增益率能够对取值较多的属性进行一定程度的惩罚,更加公平地选择最优划分属性。

具体来说,信息增益率的计算过程如下:

1. 计算划分前数据集的熵H(D)。熵用来衡量数据集的混乱程度,熵越高表示数据集的不确定性越大。熵的计算公式为:H(D) = - \sum_{i=1}^{c} p_i \log_2(p_i)其中,c是类别的数量,p_i 是第 i 个类别在数据集D中的比例。

2. 对于每个属性  a ,计算其条件熵 H(D|a)。条件熵表示在属性a的条件下,数据集D的熵。条件熵的计算公式为:H(D|a) = \sum_{i=1}^{n} \frac{|D_i|}{|D|} H(D_i)其中,n是属性a的取值数量,D_i是属性a 取值为第i个取值时的样本子集,|D_i|是样本子集的大小,|D|是数据集 D的大小。

3. 计算属性a的熵H(a)。属性熵表示属性 a取值的不确定性,即属性 a可能取值的熵。属性熵的计算公式为:H(a) = - \sum_{i=1}^{n} \frac{|D_i|}{|D|} \log_2 \left( \frac{|D_i|}{|D|} \right)

4. 计算信息增益率 GR(D, a)。信息增益率的计算公式为:GR(D, a) = \frac{IG(D, a)}{H(a)}

5. 选择信息增益率最大的属性作为最优划分属性。即选择能够最大程度地减少数据集不确定性,并且属性取值较少的属性作为划分属性。

信息增益率的引入解决了信息增益容易偏向选择取值较多的属性的问题,能够更加合理地选择最优划分属性。

基尼系数

CART 决策树 [Breiman et al, 1984] 使 用 “基尼指数" (Gini index) 来选择划分属性,直观来说, Gini(P) 反映了从数据集 D 中随机抽取两个样本,其类别标记不一致的概率.因此, Gini(D) 越小,则数据集 D 的纯度越高。于是,我们在候选属性集合 4 中,选择那个使得划分后基尼指数最小的属
性作为最优划分属性。

具体来说,对于一个数据集D,假设有K个类别,基尼系数的计算公式为:

Gini(D) = 1 - \sum_{k=1}^{K} (p_k)^2

其中,p_k 是数据集中属于第 k类别的样本占比。

在决策树的构建过程中,基尼系数可以用于选择最优划分属性。对于属性 A 的某个取值 a,可以计算在属性A的条件下数据集D的基尼系数 Gini(D|A=a),然后根据不同取值的基尼系数来选择最优划分属性。

基尼系数与信息增益在一定程度上是等价的,它们都可以用来衡量数据集的纯度。

剪枝处理

剪枝 (pruning) 是决策树学习算法对付“过拟合”的主要手段.在决策树学习中,为了尽可能正确分类训练样本,结点划分过程将不断重复,有时会造成决策树分支过多,这时就可能因训练样本学得“太好” 了,以致于把训练集自身的一些特点当作所有数据都具有的一般性质而导致过拟合.因此,可通过主动去掉一些分支来降低过拟合的风险.

决策树剪枝的基本策略有“预剪枝” (prepruning) 和 “后 剪 枝 " (post-pruning) [Quinlan, 1993]. 预剪枝是指在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点;后剪枝则是先从训练集生成一棵完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能

预剪枝

预剪枝(Pre-pruning)是决策树剪枝(Pruning)策略中的一种,它是在决策树构建过程中,在决策树生长过程中就进行判断和剪枝,而不是在决策树构建完成后再进行剪枝。预剪枝的目的是在决策树过拟合之前尽早停止树的生长,以避免过拟合,提高模型的泛化能力。

预剪枝的主要思想是在每次进行节点划分时,先评估划分后的性能提升(比如信息增益或基尼系数等),如果划分后性能提升不足或不明显,就停止该节点的划分,将该节点标记为叶节点,不再继续生长子树。

预剪枝的优点包括:

1. 减少了决策树的复杂度,提高了训练速度和预测速度。
2. 避免了过拟合,提高了模型的泛化能力。
3. 可以减少不必要的计算,节省了计算资源。

预剪枝的缺点包括:

1. 可能会导致欠拟合,即模型过于简单,不能很好地拟合训练数据。
2. 对于不均衡的数据集,可能会导致模型偏向于多数类别。

后剪枝

后剪枝的主要思想是从决策树的底部开始逐层向上对每个节点进行评估,判断如果将该节点替换为叶节点是否能够提高决策树的泛化能力。评估的方法通常是使用验证集或交叉验证来估计剪枝后模型的性能,如果剪枝后性能提升或变化不大,则剪枝该节点或子树。

后剪枝的优点包括:

1. 能够在保持模型性能的情况下减少决策树的复杂度,提高模型的泛化能力。
2. 相对于预剪枝,后剪枝可以在不损失训练精度的情况下更有效地减少决策树的大小。

后剪枝的缺点包括:

1. 需要额外的验证集或交叉验证来评估剪枝后模型的性能,增加了计算成本。
2. 后剪枝可能会导致一些节点或子树被剪掉,从而减少了模型的表达能力,可能会导致欠拟合。

连续与缺失值

连续值处理

当遇到连续型的特征数据时,决策树需要进行处理才能有效地进行分类。处理连续型特征数据的方法通常有两种:二元划分和多元划分。

二元划分

二元划分是将连续型特征数据转化为离散型特征数据的一种方法,常用于决策树等算法中处理连续型特征的方式。具体来说,二元划分将连续特征的取值范围划分为两个区间,即将连续特征转化为二元特征,以便于决策树等算法进行处理。

二元划分的步骤如下:

1. 对连续特征的取值进行排序。
2. 遍历每个特征取值的中间点作为划分点,计算使用当前划分点划分后的信息增益(或其他评价指标)。
3. 选择信息增益最大的划分点作为最优划分点,将连续特征转化为二元特征。
4. 使用最优划分点将数据集划分为两部分,分别对应新生成的两个离散取值。

举例来说,假设有一个连续型特征“年龄”,取值范围是 0 到 100,我们可以遍历每个年龄值的中间点作为划分点,比如 50,计算使用年龄小于等于 50 和大于 50 的两部分数据集划分后的信息增益,选择信息增益最大的划分点作为最优划分点,将年龄转化为一个二元特征:“年龄 <= 50” 和 “年龄 > 50”。

二元划分的优点是简单易懂,计算效率高,能够有效地处理连续型特征。但是,二元划分可能会引入一定的信息损失,因为将连续型特征转化为离散型特征会丢失一部分信息。因此,在使用二元划分时需要注意平衡信息损失和模型性能。

多元划分

多元划分是将连续型特征数据转化为多元(多个取值)离散型特征数据的一种方法。与二元划分不同的是,多元划分将连续特征的取值范围划分为多个区间,每个区间作为一个离散的取值,以便于决策树等算法进行处理。

多元划分的步骤如下:

1. 对连续特征的取值进行排序。
2. 根据需要将连续特征的取值范围划分为多个区间,每个区间作为一个离散的取值。
3. 使用划分后的离散取值将数据集划分为多个部分,每个部分对应一个离散取值。

举例来说,假设有一个连续型特征“年龄”,取值范围是 0 到 100,我们可以将年龄划分为几个区间,比如 0-20、20-40、40-60、60-80、80-100,这样就将年龄转化为一个多元特征,每个区间对应一个离散取值:“年龄<=20”、“20<年龄<=40”、“40<年龄<=60”、“60<年龄<=80”、“80<年龄<=100”。

多元划分的优点是能够更精细地处理连续型特征,避免了二元划分可能引入的信息损失。但是,多元划分会导致生成的决策树更加复杂,增加了模型的复杂度,可能会导致过拟合。因此,在使用多元划分时需要注意平衡模型的复杂度和性能。

缺失值处理

在决策树中处理缺失值的方法通常有两种:一种是在划分数据集时处理缺失值,另一种是在已经构建好的决策树上处理缺失值。

  1. 划分数据集时处理缺失值:在选择最优划分属性时,可以考虑对缺失值进行处理。一种常用的方法是计算每个属性的信息增益,并将缺失值视为一种特殊取值,将缺失值也考虑在内计算信息增益,然后选择信息增益最大的属性作为划分属性。

  2. 已构建决策树上处理缺失值:在决策树构建完成后,如果遇到新样本中有缺失值的情况,可以采用多数表决的方法进行处理。即对于缺失值所在的节点,根据已有样本的类别信息,选择占比最多的类别作为缺失值所属类别。

多变量决策树

多变量决策树(Multivariate Decision Trees)是一种决策树的变体,与传统的单变量决策树不同,它允许每个节点同时考虑多个特征(变量)进行划分。多变量决策树在处理高维数据和特征相关性较强的数据时具有一定优势,能够更好地捕捉特征之间的复杂关系,提高模型的性能和泛化能力。

来源: Decision Tree Regression. Before knowing about decision tree… | by Rishabh Jain | Medium

多变量决策树的构建过程与传统的单变量决策树类似,但在每个节点的划分过程中,不再只考虑单个特征,而是考虑多个特征的组合。具体来说,多变量决策树的构建过程包括以下几个步骤:

1. 选择划分属性:在每个节点,选择一个或多个特征的组合作为划分属性。这可以通过启发式方法(如信息增益、基尼系数等)来选择最优的划分属性。

2. 划分数据集:根据选定的划分属性将数据集划分为多个子集。

3. 递归构建子树:对每个子集递归地构建子树,直到满足停止条件。

4. 剪枝处理:可以采用预剪枝或后剪枝等方法对生成的树进行剪枝,以防止过拟合。

多变量决策树的优点包括:

1. 能够处理高维数据和特征相关性较强的数据,提高模型的表现和泛化能力。
2. 能够捕捉特征之间的复杂关系,更好地理解数据。

然而,多变量决策树也面临着一些挑战,包括:

1. 计算复杂度较高:考虑多个特征的组合可能导致计算复杂度的增加。
2. 可解释性较差:与单变量决策树相比,多变量决策树的模型结构更复杂,可解释性较差。

  • 27
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值