随机森林(Random Forest)是一种集成学习方法,通过构建多棵决策树并综合其预测结果来提高模型性能。以下是其核心过程的简明描述:
1. 算法流程概览
2. 详细步骤说明
2.1 数据准备阶段
自助采样(Bootstrap Sampling):
- 从原始训练集中有放回地随机抽取n个样本(形成1个训练子集)
- 该过程重复进行,生成k个不同的训练子集
# 示例:生成一个bootstrap样本
import numpy as np
n_samples = 1000
bootstrap_indices = np.random.choice(n_samples, size=n_samples, replace=True)
2.2 单棵树构建过程
对于每个训练子集:
-
随机特征选择:
- 在每个节点分裂时,仅考虑随机选择的m个特征(而非全部)
- 典型取值:m = √p(分类)或m = p/3(回归),p为总特征数
-
完全生长决策树:
- 不进行剪枝,直到满足以下任一条件:
- 节点样本全属同一类
- 节点样本数小于预设阈值
- 达到最大深度
- 不进行剪枝,直到满足以下任一条件:
# sklearn中的关键参数
from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(
n_estimators=100, # 树的数量
max_features="sqrt", # 每节点考虑的特征数
max_depth=None, # 完全生长
bootstrap=True # 启用自助采样
)
2.3 预测阶段
分类任务:
- 每棵树投票,选择得票最多的类别
- 也可输出概率(票数占比)
回归任务:
- 取所有树预测结果的平均值
# 分类示例:硬投票
final_prediction = mode([tree1_pred, tree2_pred, ..., treeN_pred])
# 回归示例:平均
final_prediction = mean([tree1_pred, tree2_pred, ..., treeN_pred])
3. 关键特性图解
3.1 双重随机性
3.2 误差估计(OOB评估)
- 每棵树约37%样本未被选中(Out-Of-Bag)
- 用这些样本作为验证集评估模型
# 获取OOB分数
rf = RandomForestClassifier(oob_score=True)
rf.fit(X_train, y_train)
print(f"OOB准确率: {rf.oob_score_:.3f}")
4. 算法优势总结
- 抗过拟合:通过平均多棵树降低方差
- 并行化:各树独立构建
- 特征重要性:可评估特征贡献度
- 鲁棒性:对缺失值和噪声不敏感
- 多功能:支持分类和回归任务
5. 典型应用场景
- 医疗诊断(如疾病风险预测)
- 金融风控(信用评分)
- 推荐系统(用户偏好预测)
- 遥感图像分类
随机森林通过构建大量"弱相关"的决策树并集成其预测,实现了比单棵决策树更好的泛化性能,是机器学习中最实用且强大的算法之一。