随机森林是集成学习(Ensemble Learning) 中最经典的Bagging(自助聚合) 算法,核心思想是:构建多棵相互独立的决策树,最终通过「投票法」(分类任务)或「平均法」(回归任务)输出结果。
- 分类任务:所有决策树投票,得票最多的类别为最终预测结果
- 回归任务:所有决策树预测值取平均值,为最终预测结果
随机森林的 “随机” 体现在两个关键环节,这也是它能解决单棵决策树过拟合、泛化能力弱问题的核心:
从原始数据集(共 N 个样本)中,有放回地随机抽取 N 个样本,构成每一棵决策树的训练集。
- 约 36.8% 的样本不会被抽到(未参与单棵树训练),这部分样本称为「袋外样本(OOB)」,可直接用于模型评估,无需额外划分测试集。
- 每棵树的训练样本互不相同,保证了树与树之间的独立性。
训练每一棵决策树时,在节点分裂的关键步骤,不从全部特征中选最优分裂特征,而是随机选取特征子集(通常取 总特征数),再从子集里选最优特征。
- 避免单棵树过度依赖某几个强特征,降低树之间的相关性,进一步提升模型泛化能力。
单棵决策树的致命问题:
易过拟合、方差大、结果不稳定(数据微小波动就会导致树结构巨变)。
随机森林完美解决以上问题,优势总结:
✅ 泛化能力极强,
几乎不会过拟合(树越多、随机性越强,效果越稳定)
✅ 抗噪能力强,对异常值、缺失值不敏感
✅ 能自动输出
特征重要性,实现特征筛选
✅ 支持分类、回归两大核心任务,适用场景广
✅ 训练速度快(多棵树可并行训练)
使用随机森林的核心是超参数调优,以下是 Sklearn 库中RandomForestClassifier(分类)、RandomForestRegressor(回归)的高频核心参数,掌握这些即可解决 90% 的业务问题,按优先级排序:
n_estimators:决策树的数量
- 核心逻辑:树越多,模型效果越稳定,泛化能力越强;但超过阈值后效果不再提升,且占用更多内存、训练变慢。
- 调优建议:默认 100,常用取值 [100, 200, 300, 500],根据算力逐步增加。
max_depth:每棵决策树的最大深度
- 核心逻辑:限制树的生长,防止单棵树过拟合(深度越大,单棵树越复杂,越易过拟合)。
- 调优建议:默认
None(树无限制生长),常用取值 [5, 10, 20, 30],结合数据复杂度调整。
max_features:节点分裂时的最大特征数(随机特征子集大小)
- 核心逻辑:控制特征随机性,直接影响树的相关性。
- 调优建议:分类任务默认 总特征数,回归任务默认 总特征数;可手动设值
sqrt/log2/ 具体数字。
min_samples_split:节点分裂所需的最小样本数
- 核心逻辑:值越大,树越简单,越不易过拟合(样本不足则不分裂)。
- 调优建议:默认 2,常用取值 [2, 5, 10, 20]。
min_samples_leaf:叶子节点的最小样本数
- 核心逻辑:值越大,叶子越 “稀疏”,树越简单,泛化能力越强。
- 调优建议:默认 1,常用取值 [1, 5, 10]。
bootstrap:是否开启自助采样,默认True(必须开启,否则失去 Bagging 核心特性)
oob_score:是否使用袋外样本评估模型,默认False,开启后可直接用 OOB 得分判断模型效果,无需划分测试集。
random_state:随机种子,设固定值(如 42)可保证实验结果可复现。
n_jobs:并行训练的线程数,设-1表示使用 CPU 全部核心,大幅提升训练速度。