Skip to content
On this page

随机森林模型 (random forest model)

随机森林模型是一种常用的机器学习算法,它通过组合多个决策树的输出来得到一个单一的结果。它可以处理分类和回归问题,易于使用和灵活¹。随机森林模型利用了两种随机性: 一是对训练数据进行有放回的抽样,也就是自助聚合法(bagging);二是对特征进行随机选择,也就是随机子空间法(random subspace method)²。这样可以降低决策树之间的相关性,提高模型的准确性和泛化能力。

源: 与必应的对话, 4/3/2023(1) What is Random Forest? | IBM. https://www.ibm.com/topics/random-forest 访问时间 4/3/2023. (2) Random forest - Wikipedia. https://en.wikipedia.org/wiki/Random_forest 访问时间 4/3/2023. (3) sklearn.ensemble.RandomForestClassifier - scikit-learn. https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html 访问时间 4/3/2023.

随机森林模型有什么优缺点

随机森林模型有以下优缺点:

优点:

  • 准确性高,可以利用多个决策树进行预测,降低预测误差¹²。
  • 可处理大量的输入特征,不用降维或特征选择¹²。
  • 具有很好的鲁棒性,可以很好地处理噪声数据和缺失数据¹²。
  • 不易过拟合,由于随机性的引入,可以避免过拟合的问题¹²。

缺点:

  • 计算复杂度高,由于包含多个决策树,因此计算开销较大¹²。
  • 需要大量的训练数据,才能达到较好的预测效果²。
  • 难以解释,由于随机森林是由多个决策树组成的,因此其结果难以解释²。
  • 在噪声过大的分类和回归数据集上还是可能会过拟合³⁴。

源: 与必应的对话, 4/3/2023(1) 图解机器学习 | 随机森林分类模型详解 - 腾讯云开发者社区-腾讯云. https://cloud.tencent.com/developer/article/1954093 访问时间 4/3/2023. (2) 机器学习-随机森林 - 知乎. https://zhuanlan.zhihu.com/p/606839135 访问时间 4/3/2023. (3) 随机森林(Random Forest)算法的优点和缺点都有哪些?-CDA数据分析师官网. https://www.cda.cn/bigdata/27852.html 访问时间 4/3/2023. (4) 随机森林的优缺点_keepreder的博客-CSDN博客. https://blog.csdn.net/keepreder/article/details/47273297 访问时间 4/3/2023.

如何训练和使用随机森林模型

训练和使用随机森林模型的步骤有以下几个:

  • 导入sklearn.ensemble模块中的RandomForestClassifier类或RandomForestRegressor类,根据任务是分类还是回归来选择。
  • 创建一个RandomForestClassifier或RandomForestRegressor的实例,可以指定一些参数,如n_estimators(树的数量),max_features(每个节点考虑的最大特征数),max_depth(树的最大深度)等。
  • 调用fit方法,传入训练数据集和标签,训练随机森林模型。
  • 调用predict方法,传入测试数据集,得到预测结果。
  • 调用score方法,传入测试数据集和真实标签,得到模型的准确率或R^2值。
  • 可以使用sklearn.model_selection模块中的GridSearchCV类或RandomizedSearchCV类,来进行参数调优,寻找最优的参数组合。

源: 与必应的对话, 4/3/2023(1) 图解机器学习 | 随机森林分类模型详解 - 腾讯云开发者社区-腾讯云. https://cloud.tencent.com/developer/article/1954093 访问时间 4/3/2023. (2) sklearn实战之随机森林_sklearn 随机森林_Litra LIN的博客-CSDN博客. https://blog.csdn.net/qq_48314528/article/details/119718702 访问时间 4/3/2023. (3) 机器学习: 04. 随机森林之RandomForestClassifier - 简书. https://www.jianshu.com/p/c1afbe4b9364 访问时间 4/3/2023.

如何调优随机森林模型

调优随机森林模型的方法有以下几种:

  • 使用网格搜索(GridSearchCV)或随机搜索(RandomizedSearchCV)来寻找最优的参数组合¹²。这些方法可以遍历指定的参数范围,根据一定的评估标准(如roc_auc,accuracy等)来选择最佳的参数值。
  • 使用学习曲线(learning_curve)来观察不同参数下模型的训练误差和验证误差,从而判断模型是否过拟合或欠拟合³。学习曲线可以反映出模型的复杂度和泛化能力,帮助我们选择合适的参数值。
  • 使用特征重要性(feature_importances_)来评估不同特征对模型的贡献,从而进行特征选择或降维¹²。特征重要性可以反映出特征对模型预测结果的影响程度,帮助我们去除冗余或无关的特征,提高模型的效率和准确性。

源: 与必应的对话, 4/3/2023(1) 随机森林算法参数解释及调优 - 知乎. https://zhuanlan.zhihu.com/p/56940098 访问时间 4/3/2023. (2) RandomForest 随机森林算法与模型参数的调优 - 码农充电站 - 博客园. https://www.cnblogs.com/codeshell/p/14296450.html 访问时间 4/3/2023. (3) Python 随机森林6大参数调优(学习曲线与网格搜索)_随机森林参数调优_程志伟的博客-CSDN博客. https://blog.csdn.net/c1z2w3456789/article/details/104880683 访问时间 4/3/2023.

随机森林模型和其他集成学习方法有什么区别

随机森林模型和其他集成学习方法的区别主要有以下几点:

  • 随机森林模型属于Bagging类型的集成学习方法,它通过自助采样法(Bootstrap Sampling)从原始数据集中生成多个子训练集,并用每个子训练集训练一个决策树作为基学习器,然后用简单投票法或平均法来结合多个基学习器的预测结果。¹²
  • 其他集成学习方法包括Boosting类型和Stacking类型。Boosting类型的集成学习方法,如Adaboost和XGBoost,是通过串行地训练一系列前后依赖的同类基学习器,每个基学习器都试图纠正前一个基学习器的错误,并用加权投票法或加权平均法来结合多个基学习器的预测结果。¹²³ Stacking类型的集成学习方法,是通过并行地训练一系列各自独立的不同类基学习器,然后用另一个学习器(如逻辑回归)来结合多个基学习器的预测结果。¹²
  • 随机森林模型和其他集成学习方法的优缺点各有不同。随机森林模型的优点是训练速度快,抗过拟合能力强,可以评估特征重要性,适用于高维稠密数据。¹²⁴ 随机森林模型的缺点是对噪声较大的数据容易过拟合,模型解释性较差,对小数据或低维数据效果不佳。²⁴ 其他集成学习方法的优点是可以提高模型的精度和泛化能力,可以使用不同类型的基学习器,可以自定义损失函数。¹²³ 其他集成学习方法的缺点是训练速度慢,调参复杂,对数据不平衡和噪声敏感。¹²³

源: 与必应的对话, 4/3/2023(1) 集成学习与随机森林 - 知乎. https://zhuanlan.zhihu.com/p/469902396 访问时间 4/3/2023. (2) 机器学习干货篇: 随机森林、Adaboost、XGBboost三者区别 - 知乎. https://zhuanlan.zhihu.com/p/405981292 访问时间 4/3/2023. (3) 随机森林与Adaboost的区别 - 薄荷柠檬茶 - 博客园. https://www.cnblogs.com/cyan-sea/p/12499448.html 访问时间 4/3/2023. (4) 什么是随机森林? | 数据科学 | NVIDIA 术语表. https://www.nvidia.cn/glossary/data-science/random-forest/ 访问时间 4/3/2023.

用例

随机森林分类算法实现 简单示例

python
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier

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

# 初始化随机森林分类器
clf = RandomForestClassifier(n_estimators=100, max_depth=2, random_state=0)

# 训练模型
clf.fit(X, y)

# 预测
predictions = clf.predict(X)
  • RandomForestClassifier 构造参数说明
    • n_estimators: 森林中树的数量。默认值是100。较多的树可以提高性能,但也会增加训练和预测的时间。
    • criterion: 衡量分裂质量的函数。可以是 "gini"(默认值)或 "entropy"。
    • max_depth: 树的最大深度。如果为 None,则节点将展开直到所有叶子都是纯净的或者直到所有叶子包含的样本数量小于 min_samples_split。
    • min_samples_split: 分裂内部节点所需的最少样本数量。默认值是2。
    • min_samples_leaf: 在叶节点处需要的最小样本数量。默认值是1。
    • min_weight_fraction_leaf: 在所有叶子中(所有输入样本)的总权重中,叶子节点所需要的最小加权分数。默认是0。
    • max_features: 查找最佳分裂时要考虑的特征数量。可以是 "auto"、"sqrt"、"log2" 或整数。默认是 "auto"。
    • max_leaf_nodes: 最大叶子节点数量。默认为 None。
    • min_impurity_decrease: 如果分裂导致不纯度的减少大于或等于这个值,则这个分裂会被考虑进来。
    • bootstrap: 是否使用样本的有放回抽样来构建树。默认是True。
    • oob_score: 是否使用外袋样本来估计泛化精度。默认是False。
    • n_jobs: 并行运行的任务数量。默认是1,如果设为 -1,则使用所有处理器。
    • random_state: 随机数生成器的种子。如果为 None,则随机数生成器是 np.random 使用的 RandomState 实例。
    • verbose: 在拟合和预测时显示详细程度。默认值是0。
    • warm_start: 当设置为True时,重用上一次调用的解决方案,以适应和添加更多的估计量,否则,只需适应全新的森林。
    • class_weight: 与类关联的权重。可以是 "balanced"、"balanced_subsample" 或 None。
    • ccp_alpha: 用于最小化成本复杂性剪枝的复杂性参数。默认是0。
    • max_samples: 用于训练每个基估计量的样本数量。默认是None。

Released under the MIT License.