文章目录
- 决策树
-
- 下面对决策树的理解哪些是有问题的?
- 错误修正
-
- [**1. 问题分析**](#1. 问题分析)
-
- [**(1) "信息熵"的描述问题**](#(1) "信息熵"的描述问题)
- [**(2) "信息增益倾向于选择最多类的属性"**](#(2) “信息增益倾向于选择最多类的属性”)
- [**(3) "基尼指数越小,纯度越高"**](#(3) “基尼指数越小,纯度越高”)
- [**(4) 剪枝部分**](#(4) 剪枝部分)
- [**(5) CART生成的树总是二叉树"**](#(5) CART生成的树总是二叉树”)
- [**(6) ID3需要对连续特征进行离散化"**](#(6) ID3需要对连续特征进行离散化")
- [**(7) 多变量决策树**](#(7) 多变量决策树)
- [**(8) C4.5的缺点**](#(8) C4.5的缺点)
- **2.面试常考问题
决策树
下面对决策树的理解哪些是有问题的?
在机器学习中,决策树是一种常用的机器学习方法,既可以用于分类任务也可以用于回归任务。决策树一般包括节点和边,在分类任务中,节点一般表示样本的属性,边表示该样本中节点属性是否满足某个条件,通过若干个节点和边构成的树的形状,可以将其看作决策树。
我们还是从一个例子触发开始回顾,假设我们现在的任务是一个西瓜的分类任务,我需要根据西瓜的某些特征来判断这个西瓜是好瓜还是坏瓜,假设我们得到了一组样本,那我们如何构建这样一个决策树来完成西瓜分类的任务呢?
根节点里有所有的西瓜,我们需要选出一个属性以及属性条件,将这些西瓜进行分类,然后再在该分类的基础上继续进行分类。
其实本质上决策树在做这样一件事情:每一个属性表示一坐标轴,由这些属性构成一个特征空间,每一次选定属性以及分类条件后,就相当于得到了一个垂直于该属性坐标轴的直线或者超平面,最后,由这些超平面组成的组合超平面将这些样本进行分类。
我们现在先来介绍几种构建决策树时属性的选择方法。
特征选择
在介绍信息增益之前,我们先来回顾一下信息熵,一般来说,信息熵表示表示样本集合中的纯度,假设有两类样本,并且数目相同,那么此时随机抽取一个样本,得到正反例的概率都是0.5,也就是完全随机,此时信息熵为最大,如果全是正样本,此时信息熵为0.
E n t r ( D ) = − ∑ k = 1 ∣ y ∣ p k l o g p k Entr(D)=-\sum_{k=1}^{|y|}p_klogp_k Entr(D)=−k=1∑∣y∣pklogpk
每一次分类之后,我们可以定义此次经过该属性的信息增益,将其表示为:
G a i n ( D , a ) = E n t r ( D ) − ∑ v = 1 ∣ V ∣ ∣ D v ∣ D E n t r ( D v ) Gain(D,a)=Entr(D)-\sum_{v=1}^{|V|}\frac{|D^v|}{D}Entr(D^v) Gain(D,a)=Entr(D)−v=1∑∣V∣D∣Dv∣Entr(Dv)
我们一般会尝试选择信息增益最大的属性,所谓此时扩展的依据。但是信息增益有一个问题是,他一般倾向于选择能将该样本集合分为最多类的属性,因为此时每一个子类都是确定的,也就是每一个子类此时的信息熵都为0,算出来的信息增益此时为最大,所以一般选择它,但是这中做法可能并不好。
为了缓解这个问题,提出了信息增益率,增益率定义为:
G a i n r a t i o n ( D , a ) = G a i n ( D , a ) I V ( a ) Gain_ration(D,a)=\frac{Gain(D,a)}{IV(a)} Gainration(D,a)=IV(a)Gain(D,a)
I V ( a ) = − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ l o g 2 ∣ D v ∣ ∣ D ∣ IV(a)=-\sum_{v=1}^{V}\frac{|D^v|}{|D|}log_2\frac{|D^v|}{|D|} IV(a)=−v=1∑V∣D∣∣Dv∣log2∣D∣∣Dv∣
除了这个指标之外还提出了基尼指数:
基尼指数越小,纯度越高
G i n i ( D ) = 1 − ∑ p k 2 Gini(D)=1-\sum{p_k^2} Gini(D)=1−∑pk2
G i n i _ i n d e x ( D , a ) = ∑ ∣ D v ∣ ∣ D ∣ G i n i ( D v ) Gini\_index(D,a)=\sum\frac{|D^v|}{|D|}Gini(D^v) Gini_index(D,a)=∑∣D∣∣Dv∣Gini(Dv)
主要体现的是一种随机性,基尼指数越小,随机性越小,纯度越高,那么基尼指数如果越小,说明经过该属性分类之后的新的子类纯度越高,分类效果就越好,
剪枝
在决策树中,将剪枝分为预剪枝和后键值,预剪枝就是预先计算该属性分类后的泛化性是否有所提高,提高了,那么就进行扩展,每提高,则不进行扩展。后剪枝则是根据之前讲的信息增益扩展出一个完整的决策树之后,从叶子节点开始剪枝,因为此时泛化性可能不高,剪枝的时候也是预先计算泛化性能有没有提高,提高再进行剪枝,这里的泛化性能是在测试集熵验证得到的。
多变量决策树
前面我们说过,决策树的本质还是在其特征空间中,找到平行该空间章某些坐标轴的特征以及值,这种做法导致的问题是所有的平面都是平行于特征坐标轴的,其实我们也可以使用多个属性的线性组合对决策树进行扩展,每一个非叶节点可以看所是一个形如 ∑ i = 1 d w i a i = t \sum_{i=1}^dw_ia_i=t ∑i=1dwiai=t的线性分类器。
经典决策树介绍
ID3
ID3通过信息增益来进行特征选择和节点划分
优点是计算效率高,比较简单,可以有效处理离散特征
缺点是具有明显的偏向性问题,容易过拟合,而且不适用于连续特征值,需要对其进行离散化才成,为什么呢?
C4.5
C4.5是上面ID3的改进版本,采用增益率作为指标来进行特征选择,有效解决了上面的偏向性问题,并且采用后剪枝,可以很好的缓解过拟合的问题
缺点是计算开销较大,需要大量的内存和时间进行训练
CART(分类和回归树)
主要采用基尼指数作为性能指标来进行特征选择,并且生成的决策树总是二叉树,采用的是预剪枝的方法
算法可以处理分类和回归任务,生成的是二叉树,计算效率较高,能够处理缺省值
但是对噪声比较敏感
错误修正
1. 问题分析
下面是针对该描述中潜在问题的分析,以及面试中可能考察的知识点。
(1) "信息熵"的描述问题
- 你提到信息熵是"表示样本集合中的纯度",这部分的表述并不完全准确。信息熵反映的是样本集合的 不确定性**,而不是纯度。纯度指的是样本是否属于同一类别,信息熵反映的是混乱程度。**
- 更准确的表述应该是:"信息熵衡量的是一个数据集的纯度或不确定性,值越大,表示数据集中的样本类别分布越混乱,值越小,表示数据集中的样本越集中在某一类别上。"
(2) "信息增益倾向于选择最多类的属性"
- 你提到信息增益倾向于选择将样本分成最多类的属性,这一点是正确的,但没有充分说明背后的原因。**信息增益偏好选择类别数目较多的属性,因为每次划分时,信息增益的计算是通过减少每个子集的信息熵来评估的。如果某个属性将数据分为多个子集(即更多的类别),每个子集的熵较小,结果信息增益较大,但这会导致过拟合。**更具体地说,可以补充说明:
- "信息增益倾向于选择能够将样本集划分为更多子集的属性,因为这样可以快速减少子集的熵,但这种做法往往导致模型过拟合。因此,C4.5引入了信息增益率来解决这一问题。"
(3) "基尼指数越小,纯度越高"
- 基尼指数是正确的,但描述中缺少更详细的解释。基尼指数是度量样本分布不均匀度的指标,越小代表样本更纯。可以补充更清晰的说明:
- "基尼指数的值越小,表示数据集中的样本分布越集中在某一类别上,类别纯度越高。基尼指数是通过计算每个类别的样本比例的平方和来衡量数据集的不纯度。"
(4) 剪枝部分
- 预剪枝和后剪枝 :描述中提到预剪枝和后剪枝,但"泛化性"这一术语的使用不够准确。应该是泛化能力 ,即模型对新数据的适应能力。剪枝的目的是提高模型的泛化能力,避免过拟合。
- 可以补充说明:"剪枝的目的是减少树的复杂度,防止过拟合。预剪枝通过提前停止树的扩展,后剪枝则在生成完整的树之后,通过删除一些子树来简化模型,从而提高泛化能力。"
(5) CART生成的树总是二叉树"
- 这部分是正确的,但可以进一步解释为什么CART总是生成二叉树:
- "CART(分类回归树)算法每次只根据一个特征值进行二分,这意味着每个节点只能有两个子节点,因此CART生成的树总是二叉树。这样做的优势是简化了树的结构,方便计算和解释。"
(6) ID3需要对连续特征进行离散化"
- ID3的离散化问题 :ID3不能直接处理连续特征的问题描述是正确的,但缺少对ID3为何不能处理连续特征的进一步解释。可以补充说明:
- "ID3算法只能处理离散特征值,因为它依赖于将样本根据特征的不同取值进行分裂。而对于连续特征,需要先将其离散化为多个区间,才能在ID3算法中使用。"
(7) 多变量决策树
- 这里介绍了多变量决策树,但该部分的表达不够清晰。多变量决策树指的是每个节点可以使用多个特征的线性组合来划分样本,而不仅仅是单一特征。建议修改为:
- "传统的决策树通过单个特征来划分数据,但多变量决策树使用多个特征的线性组合(如 ∑ i = 1 d w i a i = t \sum_{i=1}^d w_i a_i = t ∑i=1dwiai=t)来构建分类边界,这样可以避免决策树在高维空间中出现平行于坐标轴的划分,从而增强模型的表达能力。"
(8) C4.5的缺点
- C4.5的缺点提到"计算开销较大,需要大量的内存和时间进行训练",这部分是正确的,但可以进一步补充C4.5的实际应用中的挑战:
- "C4.5虽然能有效处理信息增益偏向性问题,但在计算上相对复杂,特别是在特征数量较多时,生成的决策树可能会非常大,从而导致训练时间和内存消耗较高。"
**2.面试常考问题
1. 决策树的基本原理:决策树如何在每个节点选择特征,以及如何处理不同类型的特征(离散特征 vs 连续特征)
决策树的基本原理: 决策树通过一系列的节点和边进行决策,最终形成一棵树。在决策树中:
- 节点代表特征(属性)。
- 边代表特征的不同值或条件。
每个节点根据某个特征将数据集分成不同的子集,直到达到叶节点(即最终的预测结果)。决策树的构建过程可以分为两步:特征选择 和数据分裂。
特征选择 :决策树算法在每个节点选择最佳的特征,这通常基于某种评价标准,如信息增益、基尼指数等。特征选择的目标是找到一个最能划分数据、使得子集纯度尽可能高的特征。
如何处理不同类型的特征:
- 离散特征:**离散特征值是离散的类别(如"晴天"、"阴天"、"雨天")。对于离散特征,决策树直接将其取值作为划分条件。**例如,"天气"特征的值可能包括"晴天"和"雨天",决策树会选择最佳的划分条件,如"如果天气是晴天,则属于某一类,否则属于另一类"。
- 连续特征 :对于连续特征(如年龄、收入),决策树会选择一个**分割点(阈值)**将其分为两个部分。例如,特征"年龄"可能在节点处被分割成"年龄 <= 30" 和 "年龄 > 30"。连续特征的分割通常通过找到能够最大化数据纯度的阈值来实现。
2. ID3、C4.5、CART的优缺点
ID3(Iterative Dichotomiser 3):
- 优点 :
- 算法简单,易于理解。
- 适用于离散特征。
- 计算效率较高,处理速度快。
- 缺点 :
- 信息增益的偏向性 :ID3倾向于选择具有更多取值的特征进行分裂,这可能导致过拟合。比如,当一个特征有很多类别时,它的分类效果可能过于精细,导致模型过于复杂。
- 不能处理连续特征 :ID3无法直接处理连续特征,需要进行离散化处理,且离散化方式不一定合理。
C4.5:
- 优点 :
- 解决信息增益的偏向性 :C4.5使用信息增益率来代替信息增益,从而避免了ID3中对多值特征的偏好。
- 支持连续特征:C4.5能够自动处理连续特征,通过选择合适的阈值进行分裂。
- 剪枝机制:C4.5具有后剪枝机制,能够减少过拟合,提高模型的泛化能力。
- 能处理缺失值:C4.5能处理带有缺失值的数据。
- 缺点 :
- 计算开销大 :由于需要计算增益率并进行多次分裂,C4.5的训练时间较长,计算开销较大。
- 内存消耗大:由于数据结构复杂,C4.5在内存消耗上较高。
CART(Classification and Regression Tree):
- 优点 :
- 适用范围广:CART既可以用于分类任务(生成分类树),也可以用于回归任务(生成回归树)。
- 基尼指数:CART使用基尼指数来选择最佳分裂特征,这种方法简单有效。
- 二叉树结构:CART生成的决策树始终是二叉树,这使得树的结构非常简洁。
- 可以处理缺失值:CART能有效处理缺失值,且对噪声有一定的鲁棒性。
- 能够处理连续特征:CART能够直接处理连续特征,且通过二分法进行分裂。
- 缺点 :
- 过拟合问题:与其他决策树算法一样,CART也容易过拟合。
- 剪枝:CART的剪枝过程比较简单,但并不像C4.5那样具有后剪枝机制,从而可能导致树的过度生长。
3. 剪枝方法:预剪枝 vs 后剪枝
预剪枝 和后剪枝是解决决策树过拟合的两种常见策略:
-
预剪枝:在决策树构建过程中,判断是否需要停止分裂(即"剪枝")。当生成某个节点的分裂导致泛化性能下降时,提前停止分裂。
- 优点:减少了模型的复杂度,防止过拟合。
- 缺点:可能会停止某些本应继续分裂的节点,导致欠拟合。
-
后剪枝:在决策树完全生成后,从叶子节点开始,逐步剪去一些不重要的节点(剪枝),从而简化树的结构。
- 优点:更能保证树的泛化能力,避免了模型过度复杂。
- 缺点:计算开销大,可能需要多次迭代。
影响:
- 预剪枝通常可以较早控制树的复杂度,但可能会损失一些潜在的决策信息;后剪枝通常更能保留决策树的决策能力,但需要额外的计算和时间。
4. 基尼指数和信息增益的差异:
基尼指数 和信息增益都是用来评估特征划分效果的指标,但它们的计算方式和使用场景不同:
- 信息增益 :信息增益是基于信息熵 (Entropy)的概念,衡量的是通过某个特征划分后,数据的不确定性减少了多少。信息增益越大,说明通过该特征划分后的子集越纯净(不确定性越小)。
- 公式 :
G a i n ( D , a ) = E n t r o p y ( D ) − ∑ v = 1 ∣ V ∣ ∣ D v ∣ D E n t r o p y ( D v ) Gain(D,a) = Entropy(D) - \sum_{v=1}^{|V|}\frac{|D^v|}{D}Entropy(D^v) Gain(D,a)=Entropy(D)−v=1∑∣V∣D∣Dv∣Entropy(Dv) - 特点:信息增益偏向于选择取值多的特征,因为这些特征能划分出更多的子集,从而使得熵的减小较多。
- 公式 :
- 基尼指数 :基尼指数衡量的是一个数据集中的随机性或杂乱程度,基尼指数越小,表示数据集的纯度越高。与信息增益不同,基尼指数偏向于选择最"纯"的子集。
- 公式 : G i n i ( D ) = 1 − ∑ k = 1 ∣ y ∣ p k 2 Gini(D) = 1 - \sum_{k=1}^{|y|} p_k^2 Gini(D)=1−k=1∑∣y∣pk2
- 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{|D^v|}{|D|}Gini(D^v) Gini_index(D,a)=v=1∑∣V∣∣D∣∣Dv∣Gini(Dv)
- 特点:基尼指数计算起来较为简单,且通常对于类别比较平衡的数据集较为有效。
总结:
- 信息增益:适用于离散数据,但容易受到多值特征的偏向性影响。
- 基尼指数:适用于分类树,计算简便且对于所有类型的特征表现良好,特别是对于不平衡数据集更为稳定。
通俗解释:
- 信息增益:可以理解为某个特征通过划分数据,减少了多少"混乱",理论上它能告诉我们选择哪个特征最能清晰地区分不同的类别。但它会倾向于选择具有更多分类的特征。
- 基尼指数:可以看作是"杂乱度"的度量,基尼指数越低,说明通过该特征划分后每个子集越"纯粹"或"干净",即类别越集中。
小结:
- CART:使用基尼指数,生成二叉树。
- ID3:使用信息增益,适用于离散特征,但偏向多值特征。
- C4.5:使用信息增益率,改进了ID3的偏向性问题,适用于离散和连续特征。