机器学习面试题之决策树(三)

1.什么是决策树
首先从训练样本矩阵中选择第一个特征进行子表划分,使每个子表中该特征的值全部相同,然后再在每个子表中选择下一个特征按照同样的规则继续划分更小的子表,不断重复直到所有的特征全部使用完为止,此时便得到叶级子表,其中所有样本的特征值全部相同。对于待预测样本,根据其每一个特征的值,选择对应的子表,逐一匹配,直到找到与之完全匹配的叶级子表,用该子表中样本的输出,通过平均(回归)或者投票(分类)为待预测样本提供输出。

  • 一棵树
  • if-then规则的集合,该集合是决策树上的所有从根节点到叶节点的路径的集合
  • 定义在特征空间与类空间上的条件概率分布,决策树实际上是将特征空间划分成了互不相交的单元,每个从根到叶的路径对应着一个单元。决策树所表示的条件概率分布由各个单元给定条件下类的条件概率分布组成。实际中,哪个类别有较高的条件概率,就把该单元中的实例强行划分为该类别。

2.决策树和条件概率分布的关系?
决策树可以表示成给定条件下类的条件概率分布

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

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

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

4. ID3算法—>C4.5算法—> CART算法
在这里插入图片描述
5.决策树的缺失值是怎么处理的
原始数据为:
在这里插入图片描述
(比如“色泽”这个属性有的样本在该属性上的值是缺失的,那么该如何计算“色泽”的信息增益?)

  • 每个样本设置一个权重(初始可以都为1)
  • 划分数据,一部分是有特征值A的数据D1,另一部分是没有特征值A的数据D2.
  • 对没有缺失特征值A的数据集D1来和对应的A特征的各个特征值一起计算加权重后的信息增益比,最后乘上一个系数,这个系数是无特征值A缺失的样本加权后所占加权总样本的比例。
    Gain(all_data) = p * (Gain(not_missing_data))
    Gain(not_missing_data) = H1 - H2
    在这里插入图片描述
    H1 = -( (6 / 14) * np.log2(6 / 14) + (8 / 14) * np.log2(8 / 14) ) = 0.985228
    在这里插入图片描述
    H2 = - ( (6 / 14) * ( (4 / 6) * np.log2(4 / 6) + (2 / 6) * np.log2(2 / 6) ) ) -
    ( (4 / 14) * ( (2 / 4) * np.log2(2 / 4) + (2 / 4) * np.log2(2 / 4) ) ) - 0 = 0.6792696
    Gain(not_missing_data) = H1 - H2 = 0.985228 - 0.6792696 = 0.305958

p为非缺失值样本个数占所有样本的个数,即14 / 17
Gain(all_data) = p * (Gain(not_missing_data)) = (14 / 17) * (0.305958) = 0.251966。

6.既然信息增益可以计算,为什么C4.5还使用信息增益比?
在使用信息增益的时候,如果某个特征有很多取值,使用这个取值多的特征会的大的信息增益,这个问题是出现很多分支,将数据划分更细,模型复杂度高,出现过拟合的机率更大。使用信息增益比就是为了解决偏向于选择取值较多的特征的问题. 使用信息增益比对取值多的特征加上的惩罚,对这个问题进行了校正。

7.基尼指数可以表示数据不确定性,信息熵也可以表示数据的不确定性。为什么CART使用基尼指数
信息熵0, logK都是值越大,数据的不确定性越大. 信息熵需要计算对数,计算量大;信息熵是可以处理多个类别,基尼指数就是针对两个类计算的,由于CART树是一个二叉树,每次都是选择yes or no进行划分,从这个角度也是应该选择简单的基尼指数进行计算。

8.基尼系数存在的问题?
基尼指数偏向于多值属性;当类数较大时,基尼指数求解比较困难;基尼指数倾向于支持在两个分区中生成大小相同的测试。

9.如何学习一棵决策树?
决策树的学习本质上就是从训练数据集中归纳出一组分类规则,使它与训练数据矛盾较小的同时具有较强的泛华能力。从另一个角度看,学习也是基于训练数据集估计条件概率模型(至此,回答完了模型部分,下面接着说策略和算法)。
决策树的损失函数通常是正则化的极大似然函数,学习的策略是以损失函数为目标函数的最小化(说完了策略,该说算法了)。

由于这个最小化问题是一个NP完全问题,现实中,我们通常采用启发式算法(这里,面试官可能会问什么是启发式算法,要有准备,SMO算法就是启发式算法)来近似求解这一最优化问题,得到的决策树是次最优的。

该启发式算法可分为三步:

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

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

  • 限制树的高度,可以利用交叉验证选择
  • 利用分类指标,如果下一次切分没有降低误差,则停止切分
  • 限制树的节点个数,比如某个节点小于100个样本,停止对该节点切分

后剪枝(自底而上):生成决策树、交叉验证剪枝:子树删除,节点代替子树、测试集准确率判断决定剪枝

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

11. 如果特征很多,决策树中最后没有用到的特征一定是无用吗?
不是无用的,从两个角度考虑:

  • 特征替代性,如果可以已经使用的特征A和特征B可以提点特征C,特征C可能就没有被使用,但是如果把特征C单独拿出来进行训练,依然有效
  • 决策树的每一条路径就是计算条件概率的条件,前面的条件如果包含了后面的条件,只是这个条件在这棵树中是无用的,如果把这个条件拿出来也是可以帮助分析数据.

12.决策树的优缺点
优点:

  1. 简单直观,生成的决策树很直观。

  2. 基本不需要预处理,不需要提前归一化,处理缺失值。

  3. 使用决策树预测的代价是O(log2m)O(log2m)。m为样本数。

  4. 既可以处理离散值也可以处理连续值。很多算法只是专注于离散值或者连续值。

  5. 可以处理多维度输出的分类问题。

  6. 相比于神经网络之类的黑盒分类模型,决策树在逻辑上可以得到很好的解释

  7. 可以交叉验证的剪枝来选择模型,从而提高泛化能力。

  8. 对于异常点的容错能力好,健壮性高。

    模型具有可解释性,容易向业务部门人员描述。
    分类速度快

缺点:

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

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

  • 数值缩放不影响分裂点位置,对树模型的结构不造成影响。
  • 按照特征值进行排序的,排序的顺序不变,那么所属的分支以及分裂点就不会有不同。
  • 树模型是不能进行梯度下降的,因为构建树模型(回归树)寻找最优点时是通过寻找最优分裂点完成的,因此树模型是阶跃的,阶跃点是不可导的,并且求导没意义,也就不需要归一化。

14.其他面试案例
引自知乎——数据取经团:吕洞宾

15.决策树怎么剪枝?
一般算法在构造决策树的都是尽可能的细分,直到数据不可划分才会到达叶子节点,停止划分. 因为给训练数据巨大的信任,这种形式形式很容易造成过拟合,为了防止过拟合需要进行决策树剪枝. 一般分为预剪枝和后剪枝,预剪枝是在决策树的构建过程中加入限制,比如控制叶子节点最少的样本个数,提前停止. 后剪枝是在决策树构建完成之后,根据加上正则项的结构风险最小化自下向上进行的剪枝操作. 剪枝的目的就是防止过拟合,是模型在测试数据上变现良好,更加鲁棒。

在这里插入图片描述

发布了12 篇原创文章 · 获赞 0 · 访问量 293

猜你喜欢

转载自blog.csdn.net/jaffe507/article/details/105004324