0. 引言
基础的树模型主要包含:
- 决策树(Decision Tree)
- 随机森林(Random Forest)
- 梯度提升树(Gradient Boosting Trees)
1. 决策树(Decision Tree)
1.1 算法原理
决策树是一种树形结构的分类和回归模型,通过对数据特征进行条件判断,将数据划分成不同的区域。树的每个节点代表一个特征的判断条件,叶子节点代表最终的类别或预测值。
- 分类树:通过计算信息增益、信息增益率或基尼指数选择最佳划分特征。
- 回归树:通过最小化均方误差(MSE)等指标选择划分。
决策树优点:
- 直观易懂,易于解释。
- 能处理数值型和类别型数据。
- 不需要大量数据预处理。
缺点:
- 容易过拟合,需要剪枝或限制树深。
- 对噪声敏感。
1.2 Python代码示例
使用scikit-learn
实现分类决策树:
|
|
2. 随机森林(Random Forest)
2.1 算法原理
随机森林是基于决策树的集成学习方法,通过构建多棵决策树并对结果进行投票(分类)或平均(回归)来提升模型性能和泛化能力。
关键点:
- Bootstrap采样:每棵树使用不同的随机采样数据集(有放回采样)。
- 随机特征选择:每个节点划分时随机选择部分特征,增加多样性。
- 投票/平均:集成多棵树的预测结果。
随机森林优点:
- 抗过拟合能力强。
- 适合高维数据。
- 可以评估特征重要性。
缺点:
- 模型复杂,训练和预测时间较长。
- 不易解释单棵树的决策路径。
2.2 Python代码示例
|
|
3. 梯度提升树(Gradient Boosting Trees)
3.1 算法原理
梯度提升树(GBDT)是通过逐步训练一系列弱学习器(通常是浅层决策树),每一步拟合前一步的残差,最终将所有弱学习器加权组合成强学习器。
核心思想:
- 迭代训练,每棵树拟合上一轮模型的残差(负梯度)。
- 通过梯度下降优化损失函数。
- 逐步减少误差,提高模型性能。
优点:
- 预测准确率高。
- 可处理多种类型的任务(分类、回归)。
- 支持自定义损失函数。
缺点:
- 训练时间较长。
- 对参数调节敏感,容易过拟合。
3.2 Python代码示例
使用scikit-learn
的GradientBoostingClassifier
:
|
|
明白了!我这次补充详细的数学原理和公式,结合之前介绍的三类树模型(决策树、随机森林、梯度提升树),帮助你更深入理解算法本质。
机器学习中常见树模型算法的数学原理详解
1. 决策树(Decision Tree)数学原理
决策树通过递归地对数据集进行划分,构建一棵树形结构。核心是选择最佳特征和切分点,使得划分后的子集“更纯净”。
1.1 纯度度量指标
信息熵(Entropy)
对于分类问题,假设当前节点样本集合为 ( S ),包含 ( K ) 类,类别 ( k ) 的样本比例为 ( p_k ),则信息熵定义为:
[ H(S) = - \sum_{k=1}^K p_k \log_2 p_k ]
熵越小,节点越纯。
信息增益(Information Gain)
选取特征 ( A ) 划分数据集,划分后子集为 ( { S_v } ),则信息增益为:
[ IG(S, A) = H(S) - \sum_{v} \frac{|S_v|}{|S|} H(S_v) ]
选择使信息增益最大的特征进行划分。
基尼指数(Gini Index)
基尼指数定义为:
[ Gini(S) = 1 - \sum_{k=1}^K p_k^2 ]
划分后基尼指数为加权平均,选择划分使基尼指数最小。
1.2 划分过程
对于每个特征 ( A ) 和划分点 ( t ),计算划分后的纯度指标(如信息增益或基尼指数),选择最优特征和切分点。
递归划分直到满足停止条件(如最大深度、最小样本数)。
2. 随机森林(Random Forest)数学原理
随机森林通过集成多棵决策树,利用随机性提升泛化能力。
2.1 Bootstrap采样
对训练集 ( D ) 进行有放回采样,生成 ( M ) 个子集 ( D_1, D_2, \ldots, D_M ),每个子集训练一棵树。
2.2 随机特征选择
在每棵树的每个节点划分时,随机选择特征子集 ( F \subseteq {1, \ldots, d} ),只在 ( F ) 内寻找最佳划分特征。
2.3 集成预测
- 分类任务:投票法,预测类别为多数树的预测类别。
[ \hat{y} = \text{mode}{ h_m(x) }_{m=1}^M ]
- 回归任务:平均法
[ \hat{y} = \frac{1}{M} \sum_{m=1}^M h_m(x) ]
其中,( h_m ) 是第 ( m ) 棵树的预测函数。
3. 梯度提升树(Gradient Boosting Trees)数学原理
梯度提升树是一种迭代优化算法,将多个弱学习器(通常是回归树)串联起来,每一步拟合前一步的残差,逐步逼近真实标签。
3.1 目标函数
假设训练数据为 ( {(x_i, y_i)}_{i=1}^n ),模型预测为:
[ \hat{y}i^{(t)} = \sum{k=1}^t f_k(x_i), \quad f_k \in \mathcal{F} ]
其中,( \mathcal{F} ) 是弱学习器集合(如回归树)。
目标是最小化损失函数 ( L ):
[ Obj^{(t)} = \sum_{i=1}^n l(y_i, \hat{y}i^{(t)}) + \sum{k=1}^t \Omega(f_k) ]
其中,( l ) 是损失函数(如平方误差、对数损失),( \Omega ) 是正则化项。
3.2 梯度下降思想
每一步拟合一个新的弱学习器 ( f_t ),使目标函数下降最快。
利用泰勒展开对目标函数进行二阶近似:
[ Obj^{(t)} \approx \sum_{i=1}^n \left[ l(y_i, \hat{y}_i^{(t-1)}) + g_i f_t(x_i) + \frac{1}{2} h_i f_t(x_i)^2 \right] + \Omega(f_t) + \text{const} ]
其中,
[ g_i = \left. \frac{\partial l(y_i, \hat{y}_i)}{\partial \hat{y}i} \right|{\hat{y}_i^{(t-1)}}, \quad h_i = \left. \frac{\partial^2 l(y_i, \hat{y}_i)}{\partial \hat{y}i^2} \right|{\hat{y}_i^{(t-1)}} ]
是一阶和二阶梯度。
3.3 树结构与叶子权重
假设 ( f_t ) 是一棵有 ( T ) 个叶子的回归树,叶子权重为 ( w_j ),样本分配函数为 ( q(x_i) \in {1, \ldots, T} ),则目标函数简化为:
[ Obj^{(t)} = \sum_{j=1}^T \left[ w_j \sum_{i \in I_j} g_i + \frac{1}{2} w_j^2 \sum_{i \in I_j} h_i \right] + \gamma T + \frac{1}{2} \lambda \sum_{j=1}^T w_j^2 ]
其中,( I_j = { i | q(x_i) = j } ) 是落在叶子 ( j ) 的样本集合,( \gamma ) 和 ( \lambda ) 是正则化参数。
最优叶子权重为:
[ w_j^* = - \frac{\sum_{i \in I_j} g_i}{\sum_{i \in I_j} h_i + \lambda} ]
3.4 树的分裂增益
划分某节点为左右子节点,增益为:
[ Gain = \frac{1}{2} \left[ \frac{G_L^2}{H_L + \lambda} + \frac{G_R^2}{H_R + \lambda} - \frac{(G_L + G_R)^2}{H_L + H_R + \lambda} \right] - \gamma ]
其中,
- ( G_L, H_L ) 是左子节点的梯度和Hessian和,
- ( G_R, H_R ) 是右子节点的梯度和Hessian和。
选择增益最大的划分。
总结
算法 | 目标/指标 | 关键公式 | 优点 | 缺点 |
---|---|---|---|---|
决策树 | 信息增益、基尼指数 | ( IG = H(S) - \sum \frac{ | S_v | }{ |
随机森林 | 多棵树投票或平均 | (\hat{y} = \text{mode}{h_m(x)}) 或平均 | 抗过拟合,泛化能力强 | 训练慢,模型复杂 |
梯度提升树 | 最小化损失函数的梯度和二阶梯度 | 叶子权重 ( w_j^* = -\frac{G_j}{H_j + \lambda} ) | 高准确率,灵活强大 | 参数多,调参复杂 |