首页 > 其他分享 >详解机器学习经典模型(原理及应用)——随机森林

详解机器学习经典模型(原理及应用)——随机森林

时间:2024-09-22 10:51:22浏览次数:3  
标签:train 详解 随机 经典 test 森林 模型 决策树

一、什么是随机森林

        随机森林(Random Forest)是一种集成学习方法(Ensemble Learning),它通过构建多个决策树(决策树原理及应用可参考此处)并将它们的结果结合起来,以提高预测的准确性和稳定性(就是多棵树构成一片森林的意思)。与决策树一样,随机森林也是同时可以用于分类和回归任务,它的核心思想是利用多个决策树的预测结果来减少模型的方差,从而提高整体的泛化能力。

二、随机森林模型原理

        要了解随机森林的原理,首先应当知道它为什么叫“随机”。随机森林的随机主要体现在两方面,一是森林中的每棵树会随机且有放回地选择样本,二是每棵树会随机且有放回地选择建模的特征。试想一下,如果森林中的每棵树都使用同样的样本和同样的特征来建模,那么效果是不是跟单颗决策树一模一样?随机森林之所以比决策树更强大的原因就在于这两个“随机”,它构建了多颗相互存在较大差异的树模型进行决策,从而达到“三个臭皮匠,赛过诸葛亮”的效果。决策树的训练流程如下:

1、初始化模型参数

        在训练随机森林之前,一般需要定义一下相关的参数,特别是树的数量和树的深度,以scikit-learn的决策树模型为例,常用的参数有n_estimators、max_depth等。

2、构建决策树

        随机森林由多棵决策树组成,每棵树的构建过程如下:

        (1)样本抽样:如果bootstrap=True,则使用自助采样从训练集中有放回地抽取样本,形成每棵树的训练集,未被抽中的样本成为袋外(Out-of-Bag, OOB)样本。

        (2)特征选择:在每个节点的分裂过程中,随机选择max_features数量的特征作为候选特征。

        (3)最佳分裂点选择:在候选特征中,选择一个特征和阈值来最大化节点的纯度(例如,使用基尼不纯度或信息增益)。

        (4)递归分裂:重复特征选择和最佳分裂点选择的过程,直到达到最大深度或叶节点的最小样本数。

3、决策树训练

        每棵决策树都从根节点开始,递归地分裂直到满足停止条件:

        (1)内部节点分裂:在内部节点,根据选定的特征和阈值分裂样本。

        (2)叶节点生成:当节点满足停止条件时,将其标记为叶节点,并根据多数类或平均值确定预测结果。

4、聚合结果

        随机森林的最终预测结果是通过聚合所有决策树的预测结果得到的:

        (1)分类任务:对于每个样本,所有树对其进行分类,并采用多数投票法确定最终类别。

        (2)回归任务:对于每个样本,所有树给出预测值,并计算这些预测值的平均值作为最终预测结果。

三、模型损失函数

        在随机森林的训练过程中,通常不会直接使用损失函数来指导每棵决策树的学习,这与许多其他机器学习算法(如线性回归、逻辑回归或神经网络)不同。随机森林是一种基于决策树的集成学习方法,它通过构建多棵决策树并结合它们的预测结果来提高整体模型的性能。每棵决策树在训练时会使用特定的分裂准则(比如基尼不纯度、均方误差等)来选择最佳的分裂点。随机森林的训练目标是最小化整个森林的预测误差,这通常是通过减少模型的方差来实现的。

四、袋外数据(Out of bag,OOB)

        随机森林中的袋外数据(Out-of-Bag, OOB)是指在构建随机森林模型时,由于自助采样(Bootstrap Sampling)过程中产生的那些没有被选中用于训练个别决策树的样本。在自助采样中,每次从原始训练数据集中随机抽取一个样本,抽取后将样本放回,这样每个样本都有被重复抽取的机会。因此,在构建每棵树时大约有36.8%的样本不会被选中,这些未被选中的样本就构成了袋外数据。

        袋外数据可以用来估计模型的泛化误差,而不需要单独的验证集。对于每棵决策树,可以用其未选中的袋外数据来计算预测误差,如分类错误率或回归的均方误差。这些误差的平均值可以作为模型性能的一个无偏估计。这是由于袋外数据没有直接参与模型训练,因此它们提供了一种有效的交叉验证手段,可以用来验证模型的稳定性和可靠性。但一般情况我们很少使用OOB,尤其是数据量较大的时候,它会显著增加训练的时间复杂度。

五、模型应用

1、分类

# 导入必要的库
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target

# 将数据集拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建随机森林分类器实例
# n_estimators 表示决策树的数量,可以调整这个参数
# n_estimators 表示决策树的深度
# random_state 用于控制随机数生成器的种子,确保结果可复现
rf_classifier = RandomForestClassifier(n_estimators=100, max_depth=3, random_state=42)

# 训练模型
rf_classifier.fit(X_train, y_train)

# 在测试集上进行预测
y_pred = rf_classifier.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy:.2f}')

# 可打印特征重要性
feature_importances = rf_classifier.feature_importances_
print("Feature importances:", feature_importances)

2、回归

# 导入必要的库
from sklearn.datasets import load_boston
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

# 加载波士顿房价数据集
boston = load_boston()
X = boston.data
y = boston.target

# 将数据集拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建随机森林回归器实例
# n_estimators 表示决策树的数量,可以调整这个参数
# n_estimators 表示决策树的深度
# random_state 用于控制随机数生成器的种子,确保结果可复现
rf_regressor = RandomForestRegressor(n_estimators=100, max_depth=3, random_state=42)

# 训练模型
rf_regressor.fit(X_train, y_train)

# 在测试集上进行预测
y_pred = rf_regressor.predict(X_test)

# 计算均方误差(MSE)
mse = mean_squared_error(y_test, y_pred)
print(f'Mean Squared Error: {mse:.2f}')

# 可打印特征重要性
feature_importances = rf_regressor.feature_importances_
print("Feature importances:", feature_importances)

六、总结

        随机森林比决策树更为强大,因此在业务中也是常用的模型之一。在面试八股中,随机森林也是常客,随之引出的概念就是Bagging,全称Bootstrap Aggregating,通过构建多个基学习器(通常是决策树)并将它们的预测结果结合起来,以减少模型的方差,从而提高整体模型的泛化能力(Bagging、Boosting、Stacking都是集成学习的经典方法,也是竞赛常用算法)。随机森林的优缺点如下:

1、优点

        (1)高准确性:随机森林通常在各种数据集上都能取得较好的预测性能。

        (2)并行处理:随机森林可以并行构建决策树,提高训练速度。

        (3)易于使用:随机森林算法相对简单,易于实现和理解。

        (4)可处理高维数据:随机森林能够有效地处理具有大量特征的数据集。

        (5)抗过拟合能力强:由于集成了多棵树,随机森林通常具有较低的过拟合风险。

2、缺点

        (1)预测速度慢:由于需要集成多棵树的预测,不进行并行运算的话,随机森林的预测速度可能较慢。

        (2)内存消耗大:随机森林需要存储多棵树,因此内存消耗较大。

        (3)对噪声数据敏感:随机森林可能会过度拟合噪声数据,尤其是在特征数量较少时。

        (4)可能欠拟合:如果树的数量太少或者树的深度太浅,随机森林可能会欠拟合。

标签:train,详解,随机,经典,test,森林,模型,决策树
From: https://blog.csdn.net/ChaneMo/article/details/142374532

相关文章

  • MySQL 数据库备份与恢复详解
    随着企业对数据依赖性的日益增加,确保数据库的安全与稳定至关重要。MySQL数据库作为开源数据库系统的代表,其备份与恢复能力直接关系到数据的安全性与业务的连续性。本文将结合最新的技术和工具,详细介绍MySQL的备份与恢复策略,帮助用户构建高效可靠的数据库管理方案。一、为什......
  • C++ | C++中与const相关的权限放大和缩小详解
    文章目录C++中与`const`相关的权限放大和缩小详解一、`const`的重要性及基本概念二、权限缩小(从非`const`到`const`)(一)指针的权限缩小(二)引用的权限缩小三、权限放大(从`const`到非`const`)(一)一般情况下的限制(二)通过特定类型转换进行权限放大四、注意事项C++中与const......
  • 基于python flask的高血压疾病预测分析与可视化系统的设计与实现,使用随机森林、决策树
    研究背景随着现代社会的快速发展,生活方式的改变和人口老龄化的加剧,心血管疾病,尤其是高血压,已成为全球范围内的重大公共健康问题。高血压是一种常见的慢性疾病,其主要特征是动脉血压持续升高。长期不控制的高血压会导致心脏病、脑卒中、肾功能衰竭等一系列严重并发症,甚至危及生......
  • SAE ARP 4761A内容详解
    1.引言1.1文章背景与目的航空系统的安全性一直是航空工业中最为重要的课题之一。为了确保航空器及其子系统在各种环境和操作条件下的可靠性和安全性,制定了一系列国际标准和指南。这些标准不仅帮助航空制造商满足相关法律法规的要求,还为设计人员、工程师和运营商提供了结......
  • SAE ARP 4754A 标准详解
    一、引言1.1SAEARP4754A的背景随着航空技术的不断发展,现代民航飞机的系统变得越来越复杂。为了确保这些系统的安全性和可靠性,国际上制定了一系列的航空系统开发标准。SAEARP4754A是这些标准中的重要一部分,专注于指导航空系统的开发过程,特别是对于复杂集成系统的设......
  • Mobile net V系列详解 理论+实战(3)
    Mobilenet系列论文精讲部分0.摘要1.引文2.引文3.基础概念的讨论3.1深度可分离卷积3.2线性瓶颈3.3个人理解4.模型架构细节5.实验细节6.实验讨论7.总结论文精讲部分鉴于上一小节中采用的代码是V2的模型,因此本章节现对V2模型论文讲解,便于读者能够更好的使......
  • C++ -命名空间-详解
    博客主页:【夜泉_ly】本文专栏:【C++】欢迎点赞......
  • Dockerfile的详解与案例
    《Dockerfile详解与案例》一、Dockerfile简介Dockerfile是一个用来构建Docker镜像的文本文件,它包含了一系列指令,用于描述如何创建一个Docker镜像。通过Dockerfile,你可以定义镜像的基础环境、安装软件包、设置环境变量等操作,从而实现快速、可重复地构建容器镜像。......
  • 粒子群算法(Particle Swarm Optimization,PSO)详解
    算法背景粒子群算法,也称粒子群优化算法或鸟群觅食算法(ParticleSwarmOptimization),缩写为PSO。粒子群优化算法是一种进化计算技术(evolutionarycomputation),1995年由Eberhart博士和kennedy博士提出,源于对鸟群捕食的行为研究。该算法最初是受到飞鸟集群活动的规律性启......
  • uniapp - 实现安卓App打包上架应用商店详细教程,详解Hbuilder打包编译apk发布上传到应
    前言【苹果App】打包上架Appstore应用商店,请访问。在uni-app安卓App项目开发中,详解打包app及上架应用市场教程,uniapp打包app安卓应用并发布到软件商店,提供多种方式打包编译为APK文件(HbuilderX云打包/本地原生打包/离线打包),附带申请Android签名证书多种方法、对要上......