决策树分类

59 阅读3分钟

局部最优

  • 决策树的训练过程是贪心的

决策树采用自顶向下的递归分裂,每一步都做局部最优选择,无法回溯。每次分裂时,它只关心当前这一步如何分割数据能带来最大收益(信息增益最大、基尼不纯度下降最多等),而不会去考虑这个选择对后续分裂的整体影响。

  • 没有全局规划 它不会尝试所有可能的树结构来找到全局最优解(那会是NP难问题)。 ​

  • 早期分裂影响巨大 根节点的分裂决策会极大影响后续所有分支,一旦早期选择不佳,整个树都难以达到全局最优。

  • 如何缓解局部最优问题

    • 剪枝:后剪枝可以移除一些次优的分裂
    • 集成方法:随机森林、梯度提升树通过多棵树组合减轻局部最优影响
    • 特征随机选择:随机森林中每次分裂只考虑部分特征
    • 调整分裂标准:如对类别不平衡数据使用加权不纯度

易过拟合

  • 它会一直分裂直到叶子节点只包含同一类样本(或达到最小样本数) ​
  • 对训练数据中的噪声和异常值非常敏感 ​
  • 模型方差大,微小数据变化就会导致树结构剧变

不要求特征间完全独立

它的分割点选择(比如 ID3 的信息增益、CART 的基尼不纯度)是基于单个特征对数据的区分能力,即使特征之间有相关性,它也能正常训练和预测。 换句话说,决策树对特征相关性是“容忍”的,不会像朴素贝叶斯那样明确假设条件独立性。

 

  • 如果特征之间有关联,会发生什么?

1. 影响分割顺序 如果两个特征高度相关,决策树可能会先选择区分度稍高的那个,另一个特征在后续分裂中作用就变小。 结果是:模型可能会过度依赖某几个特征,而忽略其他信息。

2. 降低模型稳定性 相关性强的特征在不同训练集上可能会交换重要性,导致模型结构变化较大(方差变大)。

3. 对预测精度影响不一定大 相关性本身不会直接让决策树失效,有时甚至会提高分割的纯度;但在特征冗余很多的情况下,可能增加计算量,也可能让模型对噪声更敏感。

 

  • 处理方法

  • 特征选择 / 降维 用 PCA、互信息、方差分析等方法剔除冗余特征。

  • 随机森林 / 梯度提升树 随机森林通过随机选择特征子集来减轻相关性的影响,提升鲁棒性。

  • 特征工程 将高度相关的特征合并或转换(如求和、比例、主成分)。

  • 正则化 在某些树模型中(如 XGBoost、LightGBM)可以通过调整  max_features  或  reg_lambda  来抑制冗余特征的过度使用。

剪枝的两种常见方式

  1. 预剪枝(Pre-pruning)
  • 时机:在树生长过程中就停止分裂。 ​
  • 方法: ​
  • 设置树的最大深度( max_depth )。 ​
  • 设定叶子节点的最小样本数( min_samples_leaf )。 ​
  • 设定分裂所需的最小信息增益( min_impurity_decrease )。 ​
  • 逻辑:如果继续分裂带来的信息增益很小,就直接停止,避免长出不必要的分支。
  1. 后剪枝(Post-pruning)
  • 时机:让树先完全生长,再从叶子往根回溯,剪掉“贡献不大”的分支。 ​
  • 方法(以 CART 树为例): ​
  • 计算每个子树剪枝前后的成本复杂度(Cost Complexity Pruning)。 ​
  • 如果剪掉某分支后,模型在验证集上的误差没有显著上升,就剪掉它。 ​
  • 逻辑:用一个“惩罚项”来平衡树的复杂度和训练误差,找到最优复杂度的树。