局部最优
- 决策树的训练过程是贪心的
决策树采用自顶向下的递归分裂,每一步都做局部最优选择,无法回溯。每次分裂时,它只关心当前这一步如何分割数据能带来最大收益(信息增益最大、基尼不纯度下降最多等),而不会去考虑这个选择对后续分裂的整体影响。
-
没有全局规划 它不会尝试所有可能的树结构来找到全局最优解(那会是NP难问题)。
-
早期分裂影响巨大 根节点的分裂决策会极大影响后续所有分支,一旦早期选择不佳,整个树都难以达到全局最优。
-
如何缓解局部最优问题
- 剪枝:后剪枝可以移除一些次优的分裂
- 集成方法:随机森林、梯度提升树通过多棵树组合减轻局部最优影响
- 特征随机选择:随机森林中每次分裂只考虑部分特征
- 调整分裂标准:如对类别不平衡数据使用加权不纯度
易过拟合
- 它会一直分裂直到叶子节点只包含同一类样本(或达到最小样本数)
- 对训练数据中的噪声和异常值非常敏感
- 模型方差大,微小数据变化就会导致树结构剧变
不要求特征间完全独立
它的分割点选择(比如 ID3 的信息增益、CART 的基尼不纯度)是基于单个特征对数据的区分能力,即使特征之间有相关性,它也能正常训练和预测。 换句话说,决策树对特征相关性是“容忍”的,不会像朴素贝叶斯那样明确假设条件独立性。
- 如果特征之间有关联,会发生什么?
1. 影响分割顺序 如果两个特征高度相关,决策树可能会先选择区分度稍高的那个,另一个特征在后续分裂中作用就变小。 结果是:模型可能会过度依赖某几个特征,而忽略其他信息。
2. 降低模型稳定性 相关性强的特征在不同训练集上可能会交换重要性,导致模型结构变化较大(方差变大)。
3. 对预测精度影响不一定大 相关性本身不会直接让决策树失效,有时甚至会提高分割的纯度;但在特征冗余很多的情况下,可能增加计算量,也可能让模型对噪声更敏感。
-
处理方法
-
特征选择 / 降维 用 PCA、互信息、方差分析等方法剔除冗余特征。
-
随机森林 / 梯度提升树 随机森林通过随机选择特征子集来减轻相关性的影响,提升鲁棒性。
-
特征工程 将高度相关的特征合并或转换(如求和、比例、主成分)。
-
正则化 在某些树模型中(如 XGBoost、LightGBM)可以通过调整 max_features 或 reg_lambda 来抑制冗余特征的过度使用。
剪枝的两种常见方式
- 预剪枝(Pre-pruning)
- 时机:在树生长过程中就停止分裂。
- 方法:
- 设置树的最大深度( max_depth )。
- 设定叶子节点的最小样本数( min_samples_leaf )。
- 设定分裂所需的最小信息增益( min_impurity_decrease )。
- 逻辑:如果继续分裂带来的信息增益很小,就直接停止,避免长出不必要的分支。
- 后剪枝(Post-pruning)
- 时机:让树先完全生长,再从叶子往根回溯,剪掉“贡献不大”的分支。
- 方法(以 CART 树为例):
- 计算每个子树剪枝前后的成本复杂度(Cost Complexity Pruning)。
- 如果剪掉某分支后,模型在验证集上的误差没有显著上升,就剪掉它。
- 逻辑:用一个“惩罚项”来平衡树的复杂度和训练误差,找到最优复杂度的树。