20240323-2-决策树面试题DecisionTree

决策树面试题

1. 简单介绍决策树算法

决策树算法是一种逼近离散函数值的方法。它是一种典型的分类方法,首先对数据进行处理,利用归纳算法生成可读的规则和决策树,然后使用决策对新数据进行分析。本质上决策树是通过一系列规则对数据进行分类的过程。

决策树将算法组织成一颗树的形式。其实这就是将平时所说的if-then语句 构建成了树的形式。决策树主要包括三个部分:内部节点、叶节点、边。内部节点是划分的特征,边代表划分的条件,叶节点表示类别。

构建决策树 就是一个递归的选择内部节点,计算划分条件的边,最后到达叶子节点的过程。 决策树在本质上是一组嵌套的if-else判定规则,从数学上看是分段常数函数,对应于用平行于坐标轴的平面对空间的划分。判定规则是人类处理很多问题时的常用方法,这些规则是我们通过经验总结出来的,而决策树的这些规则是通过训练样本自动学习得到的。

训练时,通过最大化Gini或者其他指标来寻找最佳分裂。决策树可以输特征向量每个分量的重要性。

决策树是一种判别模型,既支持分类问题,也支持回归问题,是一种非线性模型(分段线性函数不是线性的)。它天然的支持多分类问题。

2. 决策树和条件概率分布的关系?

决策树可以表示成给定条件下类的条件概率分布。

决策树中的每一条路径对应的都是划分的一个条件概率分布. 每一个叶子节点都是通过多个条件之后的划分空间,在叶子节点中计算每个类的条件概率,必然会倾向于某一个类,即这个类的概率最大。

3. 信息增益比相对信息增益有什么好处?

  • 使用信息增益时:模型偏向于选择取值较多的特征
  • 使用信息增益比时:对取值多的特征加上的惩罚,对这个问题进行了校正。

4. ID3算法--->C4.5算法---> CART算法

  • I D 3 ID3 ID3

    • I D 3 ID3 ID3算法没有考虑连续特征,比如长度,密度都是连续值,无法在ID3运用。这大大限制了ID3的用途。
    • I D 3 ID3 ID3算法采用信息增益大的特征优先建立决策树的节点,偏向于取值比较多的特征
    • I D 3 ID3 ID3算法对于缺失值的情况没有做考虑
    • I D 3 ID3 ID3算法没有考虑过拟合的问题
  • C 4.5 C4.5 C4.5在 I D 3 ID3 ID3算法上面的改进

    • 连续的特征离散化
    • 使用信息增益比
    • 通过剪枝算法解决过拟合
  • C 4.5 C4.5 C4.5的不足:

    • C 4.5 C4.5 C4.5生成的是多叉树
    • C 4.5 C4.5 C4.5只能用于分类,如果能将决策树用于回归的话可以扩大它的使用范围。
    • C 4.5 C4.5 C4.5由于使用了熵模型,里面有大量的耗时的对数运算,如果是连续值还有大量的排序运算
  • C A R T CART CART算法

    • 可以做回归,也可以做分类,
    • 使用基尼系数来代替信息增益比
    • C A R T CART CART分类树离散值的处理问题,采用的思路是不停的二分离散特征。

5. 决策树的缺失值是怎么处理的

主要需要解决的是两个问题,一是在样本某些特征缺失的情况下选择划分的属性,二是选定了划分属性,对于在该属性上缺失特征的样本的处理。

  • 如何在特征值缺失的情况下进行划分特征的选择?

    • 每个样本设置一个权重(初始可以都为1)

    • 划分数据,一部分是有特征值 a a a的数据,另一部分是没有特征值 a a a的数据,记为 D ~ \tilde{D} D~,

    • 没有缺失特征值 a a a的数据集 D ~ \tilde{D} D~,来和对应的特征 A A A的各个特征值一起计算加权重后的信息增益比 ,最后乘上一个系数 ρ \rho ρ 。

ρ = ∑ x ∈ D ~ w x ∑ x ∈ D w x \rho=\frac{\sum_{x \in \tilde{D}} w_{x}}{\sum_{x \in {D}} w_{x}} ρ=∑x∈Dwx∑x∈D~wx

p ~ k = ∑ x ∈ D ~ k w x ∑ x ∈ D ~ w x ( 1 ≤ k ≤ ∣ y ∣ ) \tilde{p}{k}=\frac{\sum{x \in \tilde{D}{k}} w{x}}{\sum_{x \in \tilde{D}} w_{x}} \quad(1 \leq \mathrm{k} \leq|y|) p~k=∑x∈D~wx∑x∈D~kwx(1≤k≤∣y∣)

r ~ v = ∑ x ∈ D ~ v w x ∑ x ∈ D ~ w x ( 1 ≤ v ≤ V ) \tilde{r}{v}=\frac{\sum{x \in \tilde D^{v}} w_{x}}{\sum_{x \in \tilde{D}} w_{x}} \quad(1 \leq v \leq V) r~v=∑x∈D~wx∑x∈D~vwx(1≤v≤V)

​ 假设特征 A A A有 v v v个取值 { a 1 , a 2 ... a v } \{a_1,a_2 \dots a_v\} {a1,a2...av}

​ D ~ \tilde D D~:该特征上没有缺失值的样本

​ D ~ k \tilde D_k D~k: D ~ \tilde D D~中属于第 k k k类的样本子集

​ D ~ v \tilde D^v D~v: D ~ \tilde D D~中在特征 a a a上取值为 a v a_v av的样本子集

​ ρ \rho ρ:无特征 A A A缺失的样本加权后所占加权总样本的比例。

​ p ~ k \tilde{p}_{k} p~k:无缺失值样本第 k k k类所占无缺失值样本的比例

​ r ~ v \tilde{r}_{v} r~v:无缺失值样本在特征 a a a上取值 a v a^v av的样本所占无缺失值样本的比例

​ 新的信息增益公式:
Gain ⁡ ( D , a ) = ρ × Gain ⁡ ( D ~ , a ) = ρ × ( Ent ⁡ ( D ~ ) − ∑ v = 1 V r ~ v Ent ⁡ ( D ~ v ) ) Ent ⁡ ( D ~ ) = − ∑ k = 1 ∣ y ∣ p ~ k log ⁡ 2 p ~ k \begin{aligned} &\operatorname{Gain}(D, a)=\rho \times \operatorname{Gain}(\tilde{D}, a)=\rho \times\left(\operatorname{Ent}(\tilde{D})-\sum_{v=1}^{V} \tilde{r}{v} \operatorname{Ent}\left(\tilde{D}^{v}\right)\right)\\ &\operatorname{Ent}(\tilde{D})=-\sum{k=1}^{|y|} \tilde{p}_{k} \log {2} \tilde{p}{k} \end{aligned} Gain(D,a)=ρ×Gain(D~,a)=ρ×(Ent(D~)−v=1∑Vr~vEnt(D~v))Ent(D~)=−k=1∑∣y∣p~klog2p~k

  • 给定划分特征,若样本在该特征上的值是缺失的,那么该如何对这个样本进行划分?

    (即到底把这个样本划分到哪个结点里?)
    
    • 让包含缺失值的样本以不同的概率划分到不同的子节点中去。

      比如缺失特征A的样本a之前权重为1,特征A有3个特征值A1,A2,A3。 3个特征值对应的无缺失A特征的样本个数为2,3,4.则a同时划分入A1,A2,A3。对应权重调节为2/9,3/9, 4/9。

6. 决策树的目标函数是什么?

C α ( T ) = ∑ t = 1 ∣ T ∣ N t H t ( T ) + a ∣ T ∣ C_{\alpha}(T)=\sum_{t=1}^{|T|} N_{t} H_{t}(T)+a|T| Cα(T)=t=1∑∣T∣NtHt(T)+a∣T∣

H t ( T ) = − ∑ k N t k N t log ⁡ N t k N t H_{t}(T)=-\sum_{k} \frac{N_{t k}}{N_{t}} \log \frac{N_{t k}}{N_{t}} Ht(T)=−k∑NtNtklogNtNtk

其中 ∣ T ∣ |T| ∣T∣代表叶节点个数

N t N_t Nt表示具体某个叶节点的样本数

H t ( T ) H_t(T) Ht(T) 表示叶节点 t t t上的经验熵

α ∣ T ∣ \alpha|T| α∣T∣为正则项,$\alpha \geqslant 0 $ 为参数

7. 决策树怎么处理连续性特征?

因为连续特征的可取值数目不再有限,因此不能像前面处理离散特征枚举离散特征取值来对结点进行划分。因此需要连续特征离散化,常用的离散化策略是二分法,这个技术也是 C 4.5 C4.5 C4.5中采用的策略。下面来具体介绍下,如何采用二分法对连续特征离散化:

  • 训练集D,连续特征 A A A,其中A有n个取值

  • 对 A A A的取值进行从小到大排序得到: { a 1 , a 2 ... a n } \{a_1,a_2\dots a_n\} {a1,a2...an}

  • 寻找划分点 t t t, t t t将D分为子集 D t − D_{t}^{-} Dt−与 D t + D_{t}^{+} Dt+

    • D t − D_{t}^{-} Dt−:特征 A A A上取值不大于 t t t的样本
    • D t + D_{t}^{+} Dt+:特征 A A A上取值大于 t t t的样本
  • 对相邻的特征取值 a i a_i ai与 a i + 1 a_{i+1} ai+1,t再区间 [ a i , a i + 1 ) [a_i,a_{i+1}) [ai,ai+1)中取值所产生的划分结果相同,因此对于连续特征 A A A,包含有 n − 1 n-1 n−1个元素的后选划分点集合

T a = { a i + a i + 1 2 ∣ 1 ≤ i ≤ n − 1 } T_a = \{\frac{a_i + a_{i+1}}{2}|1\leq{i}\leq{n-1} \} Ta={2ai+ai+1∣1≤i≤n−1}

  • 把区间 [ a i , a i + 1 ) [a_i,a_{i+1}) [ai,ai+1)的中位点 a i + a i + 1 2 \frac{a_i + a_{i+1}}{2} 2ai+ai+1作为候选划分点

  • 按照处理离散值那样来选择最优的划分点,使用公式:
    G a i n ( D , a ) = m a x ⏟ t ∈ T a G a i n ( D , a , t ) = m a x ⏟ t ∈ T a ( E n t ( D ) − ∑ λ ∈ { − , + } ∣ D t λ ∣ ∣ D ∣ E n t ( D t λ ) ) Gain(D,a) =\underbrace{max}{t\in T_a}Gain(D,a,t) = \underbrace{max}{t\in T_a}\ (Ent(D) - \sum_{\lambda \in \{-,+ \}}\frac{|D_t^{\lambda}|}{|D|}Ent(D_t^{\lambda})) Gain(D,a)=t∈Ta maxGain(D,a,t)=t∈Ta max (Ent(D)−λ∈{−,+}∑∣D∣∣Dtλ∣Ent(Dtλ))

    其中 G a i n ( D , a , t ) Gain(D,a,t) Gain(D,a,t)是样本集 D D D基于划分点 t t t二分之后的信息增益。划分点时候选择使用 G a i n ( D , a , t ) Gain(D,a,t) Gain(D,a,t)最大的划分点。

8. 决策树对离散值的处理

思想和 C 4.5 C4.5 C4.5相同,都是将连续的特征离散化。唯一区别在选择划分点时,C4.5是信息增益比,CART是基尼系数。

CART采用的是不停的二分。会考虑把特征 A A A分成 A 1 {A1} A1和 A 2 , A 3 {A2,A3} A2,A3、 A 2 {A2} A2和 A 1 , A 3 {A1,A3} A1,A3、 A 3 {A3} A3和 A 1 , A 2 {A1,A2} A1,A2三种情况,找到基尼系数最小的组合,比如 A 2 {A2} A2和 A 1 , A 3 {A1,A3} A1,A3,然后建立二叉树节点,一个节点是 A 2 A2 A2对应的样本,另一个节点是 A 1 , A 3 {A1,A3} A1,A3对应的样本。由于这次没有把特征 A A A的取值完全分开,后面还有机会对子节点继续选择特征 A A A划分 A 1 A1 A1和 A 3 A3 A3。这和 I D 3 、 C 4.5 ID3、C4.5 ID3、C4.5不同,在 I D 3 ID3 ID3或 C 4.5 C4.5 C4.5的一颗子树中,离散特征只会参与一次节点的建立。

9. 决策树怎么防止过拟合?

  • 对于决策树进行约束:根据情况来选择或组合

    • 设置每个叶子节点的最小样本数,可以避免某个特征类别只适用于极少数的样本。

    • 设置每个节点的最小样本数,从根节点开始避免过度拟合。

    • 设置树的最大深度,避免无限往下划分。

    • 设置叶子节点的最大数量,避免出现无限多次划分类别。

    • 设置评估分割数据是的最大特征数量,避免每次都考虑所有特征为求"最佳",而采取随机选择的方式避免过度拟合。

  • 预剪枝(提前停止):控制深度、当前的节点数、分裂对测试集的准确度提升大小

    • 限制树的高度,可以利用交叉验证选择
    • 利用分类指标,如果下一次切分没有降低误差,则停止切分
    • 限制树的节点个数,比如某个节点小于100个样本,停止对该节点切分
  • 后剪枝(自底而上):生成决策树、交叉验证剪枝:子树删除,节点代替子树、测试集准确率判断决定剪枝

    • 在决策树构建完成之后,根据加上正则项的结构风险最小化自下向上进行的剪枝操作. 剪枝的目的就是防止过拟合,是模型在测试数据上变现良好,更加鲁棒。

10. 如果特征很多,决策树中最后没有用到的特征一定是无用吗?

不是无用的,从两个角度考虑:

  • 特征替代性 ,如果可以已经使用的特征 A A A和特征 B B B可以提点特征 C C C,特征 C C C可能就没有被使用,但是如果把特征 C C C单独拿出来进行训练,依然有效

  • 决策树的每一条路径就是计算条件概率的条件,前面的条件如果包含了后面的条件,只是这个条件在这棵树中是无用的,如果把这个条件拿出来也是可以帮助分析数据.

11.决策树的优缺点?

  • 优点:

    • 简单直观,生成的决策树很直观。
    • 基本不需要预处理,不需要提前归一化,处理缺失值。
    • 既可以处理离散值也可以处理连续值。很多算法只是专注于离散值或者连续值。
    • 可以处理多维度输出的分类问题。
    • 相比于神经网络之类的黑盒分类模型,决策树在逻辑上可以得到很好的解释
    • 可以交叉验证的剪枝来选择模型,从而提高泛化能力。
    • 对于异常点的容错能力好,健壮性高。
    • 用白盒模型,可清洗观察每个步骤,对大数据量的处理性能较好,更贴近人类思维。
  • 缺点:

    • 决策树算法非常容易过拟合,导致泛化能力不强。可以通过设置节点最少样本数量和限制决策树深度来改进。
    • 决策树会因为样本发生一点点的改动,就会导致树结构的剧烈改变。这个可以通过集成学习之类的方法解决。
    • 寻找最优的决策树是一个NP难的问题,我们一般是通过启发式方法,容易陷入局部最优。可以通过集成学习之类的方法来改善。
    • 有些比较复杂的关系,决策树很难学习,比如异或。这个就没有办法了,一般这种关系可以换神经网络分类方法来解决。
    • 如果某些特征的样本比例过大,生成决策树容易偏向于这些特征。这个可以通过调节样本权重来改善。

12. 树形结构为什么不需要归一化?

  • 计算信息增益前,按照特征值进行排序,排序的顺序不变,那么所属的分支以及分裂点就不会有不同。

  • 数值缩放不影响分裂点位置,对树模型的结构不造成影响

13. 如果特征很多,决策树中最后没有用到的特征一定是无用吗?

不是无用的,从两个角度考虑:

  • 特征替代性,如果可以已经使用的特征 A A A和特征 B B B可以提点特征 C C C,特征 C C C可能就没有被使用,但是如果把特征 C C C单独拿出来进行训练,依然有效.

  • 决策树的每一条路径就是计算条件概率的条件,前面的条件如果包含了后面的条件,只是这个条件在这棵树中是无用的,如果把这个条件拿出来也是可以帮助分析数据。

相关推荐
FreeLikeTheWind.22 分钟前
C语言实例之9斐波那契数列实现
c语言·开发语言·算法
cherry_rainyyy1 小时前
力扣整理版九:贪心算法(待整理)
算法·leetcode·贪心算法
醉颜凉2 小时前
计算(a+b)/c的值
java·c语言·数据结构·c++·算法
真理Eternal2 小时前
手搓人工智能—聚类分析(下)谱系聚类与K-mean聚类
人工智能·机器学习
武昌库里写JAVA3 小时前
SpringCloud+SpringCloudAlibaba学习笔记
java·开发语言·算法·spring·log4j
小咖拉眯3 小时前
第十六届蓝桥杯模拟赛第二期题解—Java
java·数据结构·算法·蓝桥杯·图搜索算法
Sunyanhui13 小时前
力扣 最长回文字串-5
算法·leetcode·职场和发展
csdn_aspnet3 小时前
C# 程序来计算三角形的面积(Program to find area of a triangle)
算法·c#
xiangxiang-4 小时前
目标检测,图像分割,超分辨率重建
算法·机器学习·支持向量机
一直学习永不止步4 小时前
LeetCode题练习与总结:数组中两个数的最大异或值--421
java·算法·leetcode·字典树·数组·位运算·哈希表