机器学习:随机森林——基于决策树的模型

序言

随机森林是通过构建多棵相对独立的决策树来进行预测的集成方法,用于分类或回归 任务。其核心思想是"bagging "(Bootstrap Aggregating),即在训练时从数据集中有放回地随机采样,生成多份样本集,每份样本集用于训练一棵决策树。最后,将所有决策树的预测结果通过投票(分类)或平均(回归)得到最终结果。

注:阅读本篇文章前,最好先了解决策树的基本知识,包括决策树的类型、原理和构建方法等。

(决策树相关内容可以参考我另一篇文章。如果大佬的话,就当我没说吧哈哈哈哈哈)

核心步骤

(一)数据采样

从原始训练数据集 D(包含 n 个样本)中,有放回地抽取多个子集 Di,假设抽取T个子集。每个子集大小与原始数据集相同(包含 n 个样本)。有放回采样会导致每个子集内的样本有重复。

(二)构建决策树

对于每个子集 Di​,构建一棵决策树。在每个节点进行划分时,随机选择一个特征子集 m(通常 m≈​,其中 M 是总特征数),然后在该子集上选择最优划分特征。这样,避免所有树在相同的特征上划分,提高了模型的多样性。

(三)集成预测

对于分类任务,随机森林通过所有决策树(共T棵)的"投票"来决定最终的预测类别;对于回归任务,则通过所有决策树预测结果的平均值作为最终预测。

  • 对于分类任务:每棵决策树输出一个类别预测结果,选择票数最多的类别作为最终预测结果。

  • 对于回归任务:每棵决策树输出一个数值预测结果,取所有预测结果的平均值作为最终预测结果。

优点

  • **高准确率:**随机森林结合了多棵决策树的预测结果,能显著提高模型的精度,尤其适用于特征空间复杂的数据集。

  • 抗过拟合:随机森林通过"bagging"方法、随机采样和特征选择等机制,有效减少了过拟合的风险。与单棵决策树相比,随机森林对训练数据中的噪声不敏感。

  • **特征重要性评估:**随机森林可以通过统计决策树的特征分裂次数,量化特征的重要性。,使得模型在特征选择上具有直观性,便于解释和优化数据。

  • **鲁棒性强:**随机森林对缺失值和异常值的鲁棒性较好。即使存在少量缺失值和噪声,它依然能保持较好的预测性能。

  • **适用性广泛:**随机森林可以用于分类、回归任务,还可以拓展到异常检测、特征选择等问题。

  • 不要求必须标准化或归一化 **:**随机森林基于决策树,不依赖特征的缩放。

  • **可以并行计算:**随机森林中的每棵树可以独立训练和预测,因此可以并行计算,能够充分利用多核处理器,提升训练效率。

缺点

  • **计算成本高、占用内存大:**随机森林需要训练多棵决策树,尤其在树的数量较多时,计算开销较大。尽管可以并行化,但在大数据集上依然可能较慢。随机森林模型中存储了大量树结构,占用的内存可能较大,尤其在树的数量较多、深度较大的情况下。

  • **模型复杂,具体决策过程不易解释:**随机森林是由多棵树组成的集成模型,虽然能输出特征重要性,但具体决策过程不易解释。相比单棵决策树或线性模型,其决策过程不够透明。

  • **对高维稀疏数据效果不佳:**随机森林在高维、稀疏数据(如文本分类)上效果一般,不如线性模型或神经网络等适用。

  • 无法处理时间序列数据: 随机森林不擅长处理时间序列数据,尤其是++有序依赖关系的数据++。对这类数据,通常需要引入特征工程或采用其他专门算法(如LSTM或ARIMA)。

  • 对极端类别不平衡敏感: 随机森林对类别不平衡的数据可能表现不佳,往往会++偏向于多数类++。需要额外的采样方法或调整策略来平衡模型的效果。

优化方法

1. 调整超参数

可以通过网格搜索或随机搜索结合交叉验证来优化下面这些超参数。

  • 树的数量(n_estimators

    树的数量越多,模型的预测结果越稳定,但训练时间也会增加。可以通过交叉验证找到最佳的树数量,一般树的数量适当增多可以提升模型性能,但在一定数量之后效果会逐渐减小。

  • 最大特征数(max_features

    每次节点分裂时可以使用的最大特征数,控制树的多样性。推荐设置为 sqrt(n_features)(分类问题)或 log2(n_features),但具体选择可以通过验证调整。减小该值可以减少模型的方差,但会增加偏差。

  • 树的最大深度(max_depth

    决定每棵树的深度限制,可以避免每棵树过于复杂导致过拟合。较浅的树可以减少过拟合,但也可能带来欠拟合。

  • 叶节点最小样本数(min_samples_leaf

    控制每个叶节点最小的样本数量。如果设置为较大的值,则每棵树更稳定,但可能欠拟合。

  • 最大节点数(max_leaf_nodes

    限制每棵树的叶节点数量,可以避免树过于复杂导致过拟合。

2. 数据预处理

如果数据类别不平衡(尤其是分类任务),可以通过下采样、过采样或生成合成样本(如SMOTE平滑)来平衡类别,从而提升模型在小类上的预测效果。

3. 特征工程

  • 选择重要特征 :通过随机森林的feature_importances_属性,可以得到各特征的重要性评分,剔除重要性较低的特征以减少模型的复杂度和训练时间。

  • 特征组合:对于某些复杂问题,可以尝试组合已有特征,构造交叉特征,提高模型的表达能力。

  • 标准化和归一化:虽然随机森林对特征缩放不敏感,但归一化和标准化可能对部分特征关系敏感的任务有所帮助。

4. 使用增量学习或部分训练数据

对于非常大的数据集,可以使用增量学习或对数据进行分批采样,每次只用部分数据训练一小部分树,避免过大的内存开销。

5. 减少过拟合和加快训练

  • 减少样本数或特征数:在训练数据量较大的情况下,可以使用PCA等方法降维或选择重要特征,减少训练时间。

  • 使用并行化 :随机森林模型可以并行化训练和预测,通过设置n_jobs参数(例如n_jobs=-1)利用多核CPU资源,加速训练过程。

6. 使用早停法

当树的数量增多时,模型的提升会逐渐减小,甚至出现过拟合。可以在训练中监控模型性能,一旦模型在验证集上的性能停止提升,则停止增加树的数量。

# 文章内容来源于各渠道整理。若对大噶有帮助的话,希望点个赞支持一下叭!

# 文章如有错误,欢迎大噶指正!

相关推荐
田梓燊10 分钟前
湘潭大学软件工程算法设计与分析考试复习笔记(六)
笔记·算法·软件工程
网安墨雨25 分钟前
网络安全笔记
网络·笔记·web安全
南东山人26 分钟前
关于内核编程的一些笔记
linux·笔记
重生之Java开发工程师29 分钟前
算法笔记:前缀和
笔记·算法
漆黑的莫莫1 小时前
经验笔记:git checkout 与 git switch
笔记·git
归-途1 小时前
C#构建一个简单的循环神经网络,模拟对话
神经网络·机器学习·c#
小小逆向2 小时前
[SWPUCTF 2021 新生赛]老鼠走迷宫
笔记
俸涛努力学前端2 小时前
ajax (一)
开发语言·前端·javascript·笔记·ajax
归-途2 小时前
C#构建一个简单的前馈神经网络
神经网络·机器学习·c#
慕卿扬3 小时前
基于python的机器学习(四)—— 聚类(一)
笔记·python·学习·机器学习·聚类