一、基础概念
1、核心定义
决策树是一种以树状结构为载体的预测模型,它通过对数据特征的层层判断(如 “特征 A 是否满足条件?”),将复杂数据集逐步拆分到不同分支,最终在叶节点给出明确的预测结果(分类任务为类别,回归任务为数值)。
简单说,决策树就像一个 “流程图”:从根节点开始,每一步根据某个特征的取值做判断,沿着不同分支向下,直到叶节点得到结论。
2、树的基本结构
- 根节点(Root Node):树的起点,包含全部训练样本。
- 内部节点(Internal Node):树的中间节点,代表一次 “特征判断”(如 “年龄 > 30?”“性别是否为男?”),每个内部节点会根据判断结果将样本分配到不同子节点。
- 叶节点(Leaf Node):树的终点,代表最终的预测结果(如分类任务中的 “批准贷款”“拒绝贷款”,回归任务中的 “房价 50 万”)。
- 分支(Branch):连接节点的边,代表特征判断的结果(如 “是”“否”“≤30”“>30”)。
3、核心原理
- 核心逻辑是 “分而治之”,每次选择最优特征拆分数据,让拆分后的数据更 “纯粹”(同类样本集中)。
- 拆分依据是量化的纯度指标,避免随机拆分。
二、关键步骤
1、特征选择:纯度指标量化
a. 回归树通过计算误差(MSE,MAE,RMAE等)筛选最优拆分特征。
b. 分类树用信息熵、信息增益、信息增益比(ID3/C4.5 算法)或基尼系数(CART 算法)筛选最优拆分特征。




2、树的构建:递归拆分的完整逻辑
决策树的构建是一个 “自顶向下、贪心递归” 的过程,核心目标是让每个子节点的样本尽可能 “纯”。具体步骤如下:
2.1. 初始状态:根节点
根节点包含全部训练样本,此时需要解决第一个问题:“用哪个特征拆分,才能让子节点最纯?”
2.2. 特征选择与数据拆分
-
特征选择:计算每个特征的 “纯度提升指标”(如上述的计算误差,信息熵、信息增益、基尼系数下降量),选择指标最优的特征作为当前节点的拆分依据。
- 例:假设当前节点有 100 个样本(60 个 “批准贷款”,40 个 “拒绝”),计算 “信用分”“收入”“年龄” 三个特征的信息增益,发现 “信用分 > 600” 的信息增益最大(拆分后左子树 80 个样本全为 “批准”,右子树 20 个全为 “拒绝”),则选择 “信用分” 作为当前节点的拆分特征。
-
数据拆分:根据选中特征的取值,将当前节点的样本分配到子节点:
- 离散特征(如性别:男 / 女):每个取值对应一个子节点(如 “男”→左子节点,“女”→右子节点)。
- 连续特征(如年龄):需要确定一个阈值(如 30 岁),将样本分为 “≤阈值” 和 “> 阈值” 两个子节点(CART 树固定为二叉拆分,ID3/C4.5 可多叉)。
2.3. 递归过程:子节点重复拆分
对每个新生成的子节点,重复上述 “特征选择→数据拆分” 过程:
- 若子节点样本已足够 “纯”(如全为 “批准”),则停止拆分,成为叶节点,输出该类别。
- 若子节点仍有混合样本,则继续选特征拆分,直到满足终止条件。
2.4. 终止条件(停止拆分的判断)
递归不能无限进行,否则会 “记住” 训练数据的所有细节(包括噪声),导致过拟合。终止条件通常有:
- 纯度达标:节点内所有样本属于同一类别(分类树),或目标值的方差 / 均方误差小于阈值(回归树)。
- 无特征可用:所有特征已用于拆分,或剩余特征无法进一步提升纯度(如特征取值全相同)。
- 样本量太少:节点内样本数小于设定阈值(如≤5 个),即使不纯也停止拆分(避免因少量样本拆分出无意义的分支)。
3、剪枝优化:解决 “过拟合” 的关键手段
未剪枝的决策树容易长得 “枝繁叶茂”—— 对训练数据拟合得极好(准确率接近 100%),但对新数据(测试集)表现很差(过拟合)。剪枝的本质是去除 “冗余分支”,降低树的复杂度,具体分为两种方式:
3.1. 预剪枝(Pre-pruning):“长出来之前就限制”
在树的构建过程中提前停止分支生长,避免树过深。核心是设定 “生长门槛”,常见方法:
- 限制最大深度:比如设定树的最大深度为 5,当树的深度达到 5 时,即使子节点仍不纯,也停止拆分(强制作为叶节点)。
- 限制最小样本数:
- 最小分裂样本数:若节点样本数小于该值(如 10),不允许拆分(避免用少量样本生成分支)。
- 最小叶节点样本数:拆分后子节点的样本数若小于该值(如 5),则不拆分当前节点。
- 限制纯度提升阈值:若用某个特征拆分后,纯度提升(如信息增益)小于设定阈值(如 0.01),则不拆分。
优点:简单高效,训练速度快(避免构建完整的树)。
缺点:可能 “过早停止”,导致模型欠拟合(没学到足够的模式)。
3.2. 后剪枝(Post-pruning):“长完之后再修剪”
先构建完整的决策树(允许过拟合),再从叶节点向上逐层删除 “无效分支”,保留对泛化有利的结构。核心是用验证集评估分支的必要性,常见方法:
- 代价复杂度剪枝(CCP,CART 树常用):为每个分支定义 “代价”(树的复杂度,如节点数)和 “误差”(预测错误率),计算 “复杂度 - 误差” 权衡指标,删除 “增加复杂度但误差下降不明显” 的分支。
- 错误率降低剪枝(REP):对每个叶节点的父节点(内部节点),尝试将其改为叶节点(即删除该父节点的所有子分支),若修改后验证集的错误率不变或降低,则保留删除(认为该分支是冗余的)。例:假设某内部节点有两个子节点(叶节点),在验证集上,保留分支时错误率为 10%,删除分支(将该节点改为叶节点)后错误率仍为 10%,则删除分支(简化树结构,不影响性能)。
优点:剪枝更精准,通常泛化能力优于预剪枝(避免过早停止的风险)。
缺点:计算成本高(需先构建完整树,再逐枝评估)
5万+

被折叠的 条评论
为什么被折叠?



