0. 引言

基础的树模型主要包含:

  • 决策树(Decision Tree)
  • 随机森林(Random Forest)
  • 梯度提升树(Gradient Boosting Trees)

1. 决策树(Decision Tree)

1.1 算法原理

决策树是一种树形结构的分类和回归模型,通过对数据特征进行条件判断,将数据划分成不同的区域。树的每个节点代表一个特征的判断条件,叶子节点代表最终的类别或预测值。

  • 分类树:通过计算信息增益、信息增益率或基尼指数选择最佳划分特征。
  • 回归树:通过最小化均方误差(MSE)等指标选择划分。

决策树优点:

  • 直观易懂,易于解释。
  • 能处理数值型和类别型数据。
  • 不需要大量数据预处理。

缺点:

  • 容易过拟合,需要剪枝或限制树深。
  • 对噪声敏感。

1.2 Python代码示例

使用scikit-learn实现分类决策树:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 加载数据
data = load_iris()
X, y = data.data, data.target

# 划分训练测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 初始化模型
clf = DecisionTreeClassifier(max_depth=3, random_state=42)

# 训练模型
clf.fit(X_train, y_train)

# 预测
y_pred = clf.predict(X_test)

# 评估
print(f"决策树准确率: {accuracy_score(y_test, y_pred):.4f}")

2. 随机森林(Random Forest)

2.1 算法原理

随机森林是基于决策树的集成学习方法,通过构建多棵决策树并对结果进行投票(分类)或平均(回归)来提升模型性能和泛化能力。

关键点:

  • Bootstrap采样:每棵树使用不同的随机采样数据集(有放回采样)。
  • 随机特征选择:每个节点划分时随机选择部分特征,增加多样性。
  • 投票/平均:集成多棵树的预测结果。

随机森林优点:

  • 抗过拟合能力强。
  • 适合高维数据。
  • 可以评估特征重要性。

缺点:

  • 模型复杂,训练和预测时间较长。
  • 不易解释单棵树的决策路径。

2.2 Python代码示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
from sklearn.ensemble import RandomForestClassifier

# 初始化随机森林
rf = RandomForestClassifier(n_estimators=100, max_depth=5, random_state=42)

# 训练
rf.fit(X_train, y_train)

# 预测
y_pred_rf = rf.predict(X_test)

# 评估
print(f"随机森林准确率: {accuracy_score(y_test, y_pred_rf):.4f}")

3. 梯度提升树(Gradient Boosting Trees)

3.1 算法原理

梯度提升树(GBDT)是通过逐步训练一系列弱学习器(通常是浅层决策树),每一步拟合前一步的残差,最终将所有弱学习器加权组合成强学习器。

核心思想:

  • 迭代训练,每棵树拟合上一轮模型的残差(负梯度)。
  • 通过梯度下降优化损失函数。
  • 逐步减少误差,提高模型性能。

优点:

  • 预测准确率高。
  • 可处理多种类型的任务(分类、回归)。
  • 支持自定义损失函数。

缺点:

  • 训练时间较长。
  • 对参数调节敏感,容易过拟合。

3.2 Python代码示例

使用scikit-learnGradientBoostingClassifier

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
from sklearn.ensemble import GradientBoostingClassifier

# 初始化GBDT
gbdt = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1, max_depth=3, random_state=42)

# 训练
gbdt.fit(X_train, y_train)

# 预测
y_pred_gbdt = gbdt.predict(X_test)

# 评估
print(f"梯度提升树准确率: {accuracy_score(y_test, y_pred_gbdt):.4f}")

明白了!我这次补充详细的数学原理和公式,结合之前介绍的三类树模型(决策树、随机森林、梯度提升树),帮助你更深入理解算法本质。


机器学习中常见树模型算法的数学原理详解


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} )高准确率,灵活强大参数多,调参复杂