机器学习(9)——随机森林
文章目录
- 1. 随机森林的基本原理想
- 2. 算法流程
- 2.1. 数据采样(Bootstrap):
- 2.2. 构建决策树:
- 2.3. 聚合预测:
- 3. 随机森林的构建过程
- 3.1. 数据集的随机抽样
- 3.2. 决策树的训练
- 3.3. 树的生长
- 3.4. 多棵树的集成
- 3.5. 输出预测结果
- 4. 随机森林的关键参数
- 5. 数学原理
- 6. 随机森林的优缺点
- 7. 特征重要性评估
- 8. 随机森林的应用
- 9. 样例代码
- 10. 如何提升随机森林的性能
- 11. 小结
1. 随机森林的基本原理想
随机森林(Random Forest)是一种集成学习(Ensemble Learning)方法,属于监督学习的一种,广泛应用于分类和回归任务。它通过构建多个决策树(Decision Tree),并通过集成学习的思想,最终输出多个决策树的结果的平均值或多数投票结果,从而提高模型的准确性和稳定性
随机森林的核心思想是通过构建多个决策树,并结合它们的结果来进行预测。与单一的决策树相比,随机森林在处理复杂的任务时能够显著提高预测性能。它通过集成不同的弱分类器(决策树)来形成一个强分类器。
随机森林通过以下两个主要方面引入随机性:
-
随机采样数据:对于每棵决策树,在训练时从原始数据集中进行有放回的随机抽样,这种方法称为Bootstrap抽样(Bootstrap sampling)。也就是说,每棵树使用的数据集是从原始数据中随机选择的,且有可能重复抽取某些数据点。
-
随机选择特征:在每个决策树的每个节点,选择一个随机的特征子集来进行分裂,而不是使用所有特征。这种做法减少了不同决策树之间的相关性,增强了模型的多样性。
2. 算法流程
2.1. 数据采样(Bootstrap):
- 从原始数据集 D D D 中有放回地抽取 n n n 个样本,生成 T T T 个子集 D 1 , D 2 , … , D T D_1,D_2,…,D_T D1,D2,…,DT。
2.2. 构建决策树:
- 对每个子集 D i D_i Di,训练一棵决策树 h i h_i hi:
- 在每个节点分裂时,从 m m m 个特征中随机选择 k k k 个(通常 k = m k = \sqrt{m} k=m或 log 2 ( m ) \log_2(m) log2(m))。
- 选择最佳分裂特征和阈值(基于基尼不纯度或信息增益)。
2.3. 聚合预测:
- 分类任务:投票(多数表决)。
- 回归任务:平均预测值。
3. 随机森林的构建过程
构建一个随机森林的过程通常包括以下几个步骤:
3.1. 数据集的随机抽样
首先,从训练数据集中随机选取多个子集(通常是有放回的抽样),每个子集的大小与原始数据集相同(或稍小)。每个子集将用于训练一棵独立的决策树。
3.2. 决策树的训练
对于每个训练子集,构建一棵决策树。在每个节点的划分时,随机选择一个特征子集,而不是使用所有特征,从而减少不同决策树之间的相关性。
3.3. 树的生长
决策树继续生长,直到满足一定条件(例如,树的深度达到预设的最大值,或者节点的样本数小于某个阈值)为止。注意,随机森林通常不剪枝(pruning)决策树,这有助于减少偏差。
3.4. 多棵树的集成
随机森林通过集成所有决策树的预测结果来给出最终预测。对于分类任务,通常采用多数投票法;对于回归任务,通常计算各树输出的平均值。
3.5. 输出预测结果
分类任务:每棵树都会给出一个类别标签,随机森林根据多数投票的原则来确定最终的分类结果。
回归任务:每棵树给出一个连续的数值预测,随机森林通过计算这些预测的平均值来得到最终的回归结果。
4. 随机森林的关键参数
- n_estimators:森林中树的数量。通常越大越好,但计算成本增加(默认100)。
- max_depth:决策树的最大深度,控制树的复杂度。较小的值会减少过拟合,但可能导致欠拟合;较大的值可能导致过拟合。
- max_features:每次分裂时考虑的最大特征数。较小的值能增加模型的随机性,提高模型的多样性。
- 分类:sqrt(n_features)(默认)。
- 回归:n_features / 3。
- min_samples_split:一个节点分裂所需的最小样本数(默认2)。如果某个节点的样本数小于此值,则不会继续分裂。
- min_samples_leaf:叶节点最少的样本数,控制树的生长(默认1)。较大的值有助于防止过拟合。
- bootstrap:是否采用自助法(bootstrap)进行数据采样,默认是True,表示使用有放回的抽样。
- oob_score:是否使用袋外数据(Out-of-Bag data)来评估模型的性能,默认是False。
5. 数学原理
-
Bagging的方差减少:
设单棵树的方差为 σ 2 σ^2 σ2, T T T棵树的平均预测方差为:
Var ( 1 T ∑ i = 1 T h i ( x ) ) = σ 2 T + ρ σ 2 ( 1 − 1 T ) \text{Var} \left( \frac{1}{T} \sum_{i=1}^{T} h_i(x) \right) = \frac{\sigma^2}{T} + \rho \sigma^2 \left( 1 - \frac{1}{T} \right) Var(T1i=1∑Thi(x))=Tσ2+ρσ2(1−T1)
ρ ρ ρ 为树间相关系数,随机特征选择可降低 ρ ρ ρ。 -
泛化误差上界:
Error ≤ ρ ˉ ( 1 − s 2 ) s 2 \text{Error} \leq \frac{\bar{\rho}(1 - s^2)}{s^2} Error≤s2ρˉ(1−s2)
ρ ˉ \bar{\rho} ρˉ:树间平均相关性。
s s s:单棵树的平均准确率。
6. 随机森林的优缺点
-
✅ 优点:
-
高准确性:通过集成降低过拟合风险。
-
鲁棒性强:对噪声和异常值不敏感。
-
可并行化:每棵树独立训练。
-
特征重要性评估:基于分裂时的贡献度。
-
-
❌ 缺点:
-
计算成本高:树数量多时训练慢。
-
解释性差:相比单棵树更难可视化。
-
对高维稀疏数据(如文本)效果一般。
-
7. 特征重要性评估
-
基于基尼重要性(Gini Importance):
- 统计每个特征在所有树中分裂时减少的基尼不纯度总和。
-
基于排列重要性(Permutation Importance):
- 打乱特征值后观察模型性能下降程度。
8. 随机森林的应用
随机森林在许多领域有广泛的应用,包括但不限于:
- 分类任务:如图像识别、垃圾邮件过滤、疾病预测、信用卡欺诈检测等。
- 回归任务:如房价预测、股票市场分析等。
- 特征选择:通过计算各个特征的重要性,帮助选择最具代表性的特征,进行后续建模。
- 异常检测:通过判断某个样本与其他样本的区别,进行异常检测。
9. 样例代码
# 导入所需的库
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report, accuracy_score# 加载鸢尾花数据集
iris = load_iris()
X = iris.data # 特征数据
y = iris.target # 标签数据# 将数据集分为训练集和测试集,80% 用于训练,20% 用于测试
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 初始化随机森林分类器
rf_classifier = RandomForestClassifier(n_estimators=100, random_state=42)# 训练模型
rf_classifier.fit(X_train, y_train)# 在测试集上进行预测
y_pred = rf_classifier.predict(X_test)# 输出分类报告和准确率
print("Accuracy:", accuracy_score(y_test, y_pred))
print("\nClassification Report:\n", classification_report(y_test, y_pred))# 输出特征重要性
print("\nFeature Importance:", rf_classifier.feature_importances_)
10. 如何提升随机森林的性能
尽管随机森林已经是一种强大的机器学习算法,但在某些情况下,仍然可以通过以下方法来提升其性能:
- 增加树的数量(n_estimators):增加树的数量可以提高模型的准确性,但也会增加计算的开销。通常,树的数量达到一定水平后,性能提升会趋于平稳。
- 调整特征选择的数量(max_features):尝试调整在每个节点分裂时使用的特征数量,选择合适的值可以帮助提高模型的多样性和性能。
- 通过交叉验证选择最佳超参数:使用交叉验证(cross-validation)来选择最佳的超参数,例如树的最大深度、最小样本数等。
- 使用更多的样本(更大的数据集):如果条件允许,可以使用更多的训练样本,帮助模型捕捉到更丰富的规律。
11. 小结
随机森林通过Bagging+随机特征构建多样化的决策树群,平衡偏差与方差,适用于大多数表格数据任务。其优势在于易用性、鲁棒性和可解释性(通过特征重要性)。在实际应用中,需注意:
-
树数量:通常100~500足够。
-
特征子集大小:分类用 sqrt(n_features),回归用 n_features/3。
-
避免过拟合:控制树深度(max_depth)和叶节点样本数(min_samples_leaf)。