决策树
决策树是一种树形结构的分类 / 回归模型,核心是 "分而治之"------ 把复杂的数据集递归拆分成小子集,最终形成一棵 "判断树",每个内部节点代表一个特征判断,每个叶节点代表一个类别 / 回归值。
6.1 决策树的基本原理
核心结构
- 根节点:整个数据集的起点,无父节点;
- 内部节点:对应一个特征的判断(比如 "是否发烧?""年龄 > 30?");
- 分支:特征判断的结果(比如 "是 / 否"">30/<30");
- 叶节点:最终的分类结果 / 回归值(比如 "患流感""不患流感")。
核心逻辑
- 递归拆分:从根节点开始,选择最优特征,把数据集按该特征拆分成多个子集;
- 子集划分:对每个子集重复 "选最优特征→拆分" 的过程,直到满足停止条件(比如子集样本全为同一类别、无特征可选、样本数过少);
- 预测:新样本从根节点开始,按特征判断走分支,最终落到叶节点,叶节点的结果就是预测值。
通俗例子(感冒诊断决策树)
plaintext
根节点:是否发烧?
├─ 否 → 叶节点:不感冒
└─ 是 → 内部节点:是否咳嗽?
├─ 否 → 叶节点:普通发烧
└─ 是 → 叶节点:感冒
6.2 建树:决策树生成算法
决策树的核心问题是如何选择最优特征,不同算法的核心区别是 "特征选择的评价指标",主流算法有 ID3、C4.5、CART。
6.2.1 ID3 和 C4.5(分类树,离散特征为主)
前置概念:熵(Entropy)------ 衡量数据集的 "混乱程度"
熵越大,数据集类别越混乱(比如一半正类一半负类,熵最大);熵越小,类别越纯净(比如全是正类,熵为 0)。公式(二分类,p 是正类占比):H(D)=−plog2p−(1−p)log2(1−p)公式(多分类,pk 是类别 k 占比):H(D)=−∑k=1npklog2pk
- 例子:
- 数据集 D 有 100 个样本,50 正 50 负 → H(D)=−0.5log20.5−0.5log20.5=1(最混乱);
- 数据集 D 全为正类 → H(D)=−1log21−0=0(最纯净)。
6.2.1.1 ID3 算法:信息增益(Information Gain)
ID3 的核心是选择信息增益最大的特征作为最优特征。
1. 信息增益定义
信息增益 = 原数据集的熵 - 按特征拆分后各子集的熵的加权平均,衡量 "拆分后数据集混乱度降低的程度"。公式:IG(D,A)=H(D)−∑v=1V∣D∣∣Dv∣H(Dv)
- A:待选特征;
- V:特征 A 的取值个数(比如 "是否发烧" 有 2 个取值:是 / 否);
- Dv:特征 A 取第 v 个值的子集;
- ∣D∣∣Dv∣:子集 Dv 的样本数占总样本数的权重。
2. 信息增益计算步骤(实例)
已知:数据集 D 有 10 个样本,类别:[感冒,感冒,感冒,不感冒,不感冒,不感冒,不感冒,不感冒,感冒,感冒](6 个不感冒,4 个感冒);特征 A="是否发烧",取值:
- 发烧(是):样本 1-4(3 感冒,1 不感冒);
- 发烧(否):样本 5-10(1 感冒,5 不感冒)。
步骤 1:计算原数据集 D 的熵感冒,不感冒H(D)=−0.4log20.4−0.6log20.6≈−0.4×(−1.32)−0.6×(−0.74)≈0.528+0.444=0.972
步骤 2:计算特征 A 拆分后各子集的熵
- 子集 D1(发烧 = 是,4 个样本):p=3/4=0.75,1−p=0.25H(D1)=−0.75log20.75−0.25log20.25≈−0.75×(−0.415)−0.25×(−2)≈0.311+0.5=0.811
- 子集 D2(发烧 = 否,6 个样本):p=1/6≈0.167,1−p≈0.833H(D2)=−0.167log20.167−0.833log20.833≈−0.167×(−2.58)−0.833×(−0.22)≈0.431+0.183=0.614
步骤 3:计算信息增益IG(D,A)=0.972−(104×0.811+106×0.614)=0.972−(0.324+0.368)=0.972−0.692=0.28
3. ID3 算法逻辑
- 对每个候选特征,计算信息增益;
- 选择信息增益最大的特征作为当前节点的拆分特征;
- 递归处理每个子集,直到停止条件。
4. ID3 的缺点
- 偏好取值多的特征(比如 "身份证号" 取值无数,信息增益会极大,但无实际意义);
- 只能处理离散特征,无法处理连续特征;
- 没有剪枝,容易过拟合。
6.2.1.2 C4.5 算法:信息增益比(Information Gain Ratio)
C4.5 是 ID3 的改进,核心是用信息增益比替代信息增益,解决 "偏好取值多的特征" 的问题。
1. 信息增益比定义
信息增益比 = 信息增益 / 特征的 "固有值"(IV),固有值衡量特征取值的 "分散程度"(取值越多,固有值越大)。公式:IGR(D,A)=IV(A)IG(D,A)其中,固有值 IV(A)=−∑v=1V∣D∣∣Dv∣log2∣D∣∣Dv∣(和熵的公式类似,衡量特征本身的分散度)。
2. 信息增益比计算(接上面的例子)
步骤 1:计算特征 A(是否发烧)的固有值∣D1∣/∣D∣=4/10=0.4,∣D2∣/∣D∣=6/10=0.6IV(A)=−0.4log20.4−0.6log20.6≈0.972
步骤 2:计算信息增益比IGR(D,A)=0.9720.28≈0.288
3. C4.5 的改进点
- 用信息增益比选特征,避免偏好取值多的特征;
- 支持连续特征(把连续特征离散化,比如按阈值拆分成 "> 阈值 /< 阈值");
- 增加剪枝策略,减少过拟合。
6.2.2 CART(Classification and Regression Tree)
CART 是通用的决策树算法,可做分类也可做回归,核心是用基尼指数(Gini Index)选特征(分类)或均方误差(回归)。
1. 基尼指数(分类树)------ 衡量数据集的 "不纯度"
基尼指数越小,数据集越纯净(和熵的作用一致,但计算更快)。公式(二分类,p 是正类占比):Gini(D)=2p(1−p)公式(多分类,pk 是类别 k 占比):Gini(D)=1−∑k=1npk2
- 例子:
- 数据集 D 全为正类 → Gini(D)=1−12=0;
- 数据集 D50 正 50 负 → Gini(D)=1−(0.52+0.52)=0.5。
2. 特征 A 的基尼指数(拆分后的不纯度)
Gini(D,A)=∑v=1V∣D∣∣Dv∣Gini(Dv)
- CART 选择基尼指数最小的特征作为最优特征。
3. CART 的特点
- 二叉树:无论特征有多少取值,都拆分成两个子集(比如 "年龄> 30" 和 "年龄≤30"),结构更简单;
- 支持回归:回归树用 "均方误差最小" 选特征,叶节点是子集的均值;
- 剪枝策略:后剪枝,降低过拟合风险。
七、集成学习
集成学习的核心是 "三个臭皮匠顶个诸葛亮"------ 训练多个基模型(比如决策树),通过组合它们的预测结果,得到比单个模型更优的性能。
7.1 误差的偏差 - 方差分解
要理解集成学习的作用,首先要明确模型误差的构成:总误差 = 偏差(Bias) + 方差(Variance) + 噪声(Noise)
1. 偏差、方差、噪声的定义
| 概念 | 定义 | 通俗解释 |
|---|---|---|
| 偏差(Bias) | 模型的预测值与真实值的平均差距,衡量模型的 "拟合能力" | 模型的 "系统性错误",比如用线性模型拟合非线性数据,偏差会很大(欠拟合)。例子:真实值是 5,模型每次预测都在 3 左右 → 偏差大 |
| 方差(Variance) | 模型在不同训练集上的预测结果的波动程度,衡量模型的 "稳定性" | 模型的 "随机性错误",比如复杂模型(深度决策树)对训练集敏感,换一批训练集,预测结果差异大 → 方差大(过拟合)。例子:真实值是 5,模型预测有时是 2,有时是 8 → 方差大 |
| 噪声(Noise) | 数据本身的不可避免的误差,是模型能达到的最小误差下限 | 比如传感器采集数据时的误差、标注错误等,无法通过模型优化消除 |
2. Bagging 和 Boosting 对偏差 / 方差的影响
| 集成方法 | 核心作用 | 对偏差 / 方差的影响 | 适用场景 |
|---|---|---|---|
| Bagging | 并行训练多个基模型,投票 / 平均输出 | 主要降低方差,对偏差影响小 | 基模型是高方差、低偏差的模型(比如深度决策树,易过拟合) |
| Boosting | 串行训练多个基模型,逐步纠正错误 | 主要降低偏差,对方差影响小 | 基模型是低方差、高偏差的模型(比如浅决策树,易欠拟合) |
7.2 Bagging 和随机森林的思想
1. Bagging(Bootstrap Aggregating)
核心思想(并行集成)
- 自助采样(Bootstrap):从原始训练集(m 个样本)中,有放回地采样 m 个样本,得到一个新的训练子集(约 63.2% 的原始样本会被选中,36.8% 未被选中);
- 训练基模型:对每个采样得到的子集,训练一个基模型(比如决策树),所有基模型并行训练;
- 组合预测 :
- 分类:所有基模型投票,少数服从多数;
- 回归:所有基模型预测值取平均。
关键作用
通过 "多个不同子集训练的模型" 的投票 / 平均,降低单个模型的方差(减少过拟合),因为不同模型的随机误差会相互抵消。
2. 随机森林(Random Forest,RF)
随机森林是 Bagging 的改进版,基模型是决策树,核心是 "增加随机性"。
核心思想
在 Bagging 的基础上,给决策树的特征选择增加随机性:
- 样本随机:和 Bagging 一样,自助采样得到子集;
- 特征随机:训练每个决策树时,从所有特征中随机选一部分特征(比如总特征数为 d,选 d 个),仅从这部分特征中选最优特征拆分;
- 组合预测:同 Bagging(投票 / 平均)。
为什么更优?
- 样本 + 特征双重随机,让基模型之间的 "相关性更低",组合后方差降低更明显;
- 随机森林是工业界最常用的 "开箱即用" 模型,泛化能力强,不易过拟合。
7.3 Boosting 的思想(重点:GBDT)
Boosting 是串行集成,核心是 "逐步纠正错误"------ 先训练一个弱模型,再训练第二个模型纠正第一个的错误,依此类推,最终组合所有弱模型得到强模型。
1. Boosting 的通用思想
- 初始化:用原始训练集训练第一个基模型 f1;
- 计算误差 :找出 f1 预测错误的样本,给这些样本增加权重(让后续模型更关注这些样本);
- 训练下一个模型:用加权后的训练集训练第二个基模型 f2;
- 重复迭代:重复 "计算误差→加权→训练新模型",直到训练完 T 个基模型;
- 组合预测:给每个基模型分配权重(预测准的模型权重高),加权求和 / 投票得到最终结果。
2. GBDT(Gradient Boosting Decision Tree,梯度提升决策树)
GBDT 是 Boosting 的经典实现,基模型是决策树(通常是浅树,比如深度 3),核心是 "用梯度下降的思想纠正误差"。
核心思想(算法 7-2 通俗版步骤)
假设目标是最小化损失函数 L(y,y^)(比如分类用交叉熵,回归用均方误差):
- 初始化强模型:用一个常数作为初始预测(比如回归取所有样本的均值,分类取对数几率):f0(x)=argminc∑i=1mL(yi,c)
- 迭代训练基模型(共 T 轮) :a. 计算负梯度(残差) :把 "真实值 - 当前模型预测值" 作为残差(梯度的近似),残差代表模型当前的 "错误":rti=−∂f(xi)∂L(yi,f(xi))f(xi)=ft−1(xi)
- 回归(均方误差):残差 rti=yi−ft−1(xi)(真实值 - 预测值);b. 训练基模型 :用残差 rti 作为新的 "标签",训练一棵决策树 ht(x)(拟合残差,即纠正错误);c. 更新强模型:把新训练的决策树加权加入强模型:ft(x)=ft−1(x)+α⋅ht(x)
- α:学习率(超参数,通常取 0.1),控制每棵树的贡献,防止过拟合;
- 最终模型:f(x)=fT(x)=f0(x)+α⋅∑t=1Tht(x)
通俗例子(回归任务:预测房价)
- 初始模型 f0(x):所有样本房价的均值(比如 100 万);
- 第 1 轮:计算每个样本的残差(真实房价 - 100 万),训练一棵决策树拟合残差(比如 "面积> 100㎡的样本残差 + 20 万"),更新模型 万;
- 第 2 轮:计算新的残差(真实房价 -f1(x)),训练第二棵决策树拟合新残差,更新模型;
- 最终:所有树的预测值加权求和,得到最终房价预测。
GBDT 的特点
- 串行训练,每棵树都在纠正前序模型的错误,偏差逐步降低;
- 基模型是浅决策树(低方差),整体模型偏差低、方差也低,泛化能力极强;
- 是工业界的 "明星模型",广泛用于排序、分类、回归任务(比如推荐系统、广告点击率预测)。
决策树 + 集成学习 核心速记表
一、决策树核心知识点
1. 基本原理
核心逻辑 :分而治之,递归选择最优特征拆分数据集,构建树形判断结构(根节点→内部节点→叶节点)。预测方式:新样本从根节点按特征判断走分支,落到叶节点得到结果。
2. 特征选择指标(核心公式)
| 算法 | 核心指标 | 公式(纯文本清晰版) | 计算逻辑 / 特点 | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| ID3 | 信息增益 IG (D,A) | 1. 数据集熵 H (D) = -Σ(p_k × log2 (p_k))(p_k 是类别 k 的样本占比,Σ 表示求和)2. 信息增益 IG (D,A) = H (D) - Σ( | D_v | / | D | × H(D_v) )(D_v 是特征 A 取第 v 个值的子集, | D_v | 是子集样本数, | D | 是总样本数) | 1. 先算数据集熵(混乱度,值越大越混乱)2. 算按特征 A 拆分后各子集的加权熵3. 熵的差值即信息增益,越大特征越优缺点:偏好取值多的特征 |
| C4.5 | 信息增益比 IGR (D,A) | 1. 特征固有值 IV (A) = -Σ( | D_v | / | D | × log2( | D_v | / | D | ) )2. 信息增益比 IGR (D,A) = IG (D,A) / IV (A) | 1. 用信息增益除以特征固有值(取值多的特征固有值大,会被惩罚)2. 解决 ID3 偏好取值多特征的问题,越大特征越优 |
| CART | 基尼指数 Gini (D,A) | 1. 数据集基尼指数 Gini (D) = 1 - Σ(p_k²)(p_k² 是类别 k 占比的平方)2. 特征 A 的基尼指数 Gini (D,A) = Σ( | D_v | / | D | × Gini(D_v) ) | 1. 基尼指数衡量数据集不纯度,值越小越纯净2. 按特征 A 拆分后的加权基尼指数,越小特征越优支持分类 + 回归,生成二叉树 |
3. 三种算法对比
| 特点 | ID3 | C4.5 | CART |
|---|---|---|---|
| 适用特征 | 仅离散特征 | 离散 + 连续特征(先离散化) | 离散 + 连续特征 |
| 树结构 | 多叉树 | 多叉树 | 二叉树(无论特征取值多少,都拆成 2 个子集) |
| 核心缺点 | 偏好取值多特征、无剪枝 | 计算复杂度较高 | - |
| 剪枝策略 | 无 | 有(后剪枝) | 有(后剪枝) |
二、集成学习核心知识点
1. 误差的偏差 - 方差分解
总误差公式:总误差 = 偏差 + 方差 + 噪声
| 概念 | 通俗定义 | 对应问题 |
|---|---|---|
| 偏差(Bias) | 模型预测值与真实值的平均差距,衡量 "拟合能力" | 偏差大 → 欠拟合(模型太简单,学不到数据规律) |
| 方差(Variance) | 模型在不同训练集上的预测波动程度,衡量 "稳定性" | 方差大 → 过拟合(模型太复杂,对训练集敏感) |
| 噪声(Noise) | 数据本身的误差,是模型能达到的最小误差下限 | 无法通过模型优化消除 |
| 集成方法 | 核心作用 | 适用基模型 |
|---|---|---|
| Bagging | 主要降低方差 | 高方差、低偏差模型(如深度决策树) |
| Boosting | 主要降低偏差 | 低方差、高偏差模型(如浅决策树) |
2. Bagging 与随机森林
| 方法 | 核心步骤(纯文本) | 关键特点 |
|---|---|---|
| Bagging | 1. 自助采样:从原始数据集有放回采样,生成多个训练子集2. 并行训练:每个子集训练一个基模型(如决策树)3. 组合预测:分类→投票(少数服从多数);回归→取平均 | 降低方差,减少过拟合 |
| 随机森林(RF) | 基于 Bagging,增加 "特征随机":训练每个决策树时,从所有特征中随机选一部分(如√总特征数),仅从这部分特征选最优拆分特征 | 1. 样本 + 特征双重随机,基模型相关性更低2. 泛化能力强,工业界 "开箱即用" |
3. Boosting 与 GBDT
(1)Boosting 通用思想
- 串行训练:先训 1 个弱模型,后续模型给前序模型预测错误的样本加权重(重点学习错误样本);
- 加权组合:给预测准的模型分配更高权重,最终加权求和 / 投票。
(2)GBDT(梯度提升决策树)核心步骤(算法 7-2 简化版)
| 步骤 | 操作(纯文本) | 关键说明 |
|---|---|---|
| 1. 初始化模型 | 用常数作为初始预测(比如回归任务取所有样本标签的均值) | 公式:f₀(x) = 使 "Σ 损失函数 (L (y_i, c))" 最小的常数 c |
| 2. 迭代训练基模型(共 T 轮) | a. 计算残差(负梯度):代表当前模型的预测错误 (回归任务:残差 = 真实值 y_i - 上一轮模型预测值 fₜ₋₁(x_i))b. 训练 1 棵浅决策树 hₜ(x),拟合这个残差(纠正错误)c. 更新强模型:fₜ(x) = fₜ₋₁(x) + α×hₜ(x) | α 是学习率(超参数,通常取 0.1),控制每棵树的贡献,防止过拟合 |
| 3. 最终模型 | 所有基模型加权求和 | 公式:f (x) = f₀(x) + α×Σ(t=1 到 T)hₜ(x) |
| 核心特点 | 基模型是浅决策树(低方差),串行纠正错误,偏差逐步降低 | 泛化能力极强,适用于分类、回归、排序(如推荐系统、广告点击率预测) |