随机森林回归原理详解及Python代码示例

随机森林回归原理详解

        随机森林回归(Random Forest Regression)是一种集成学习方法,通过构建多个决策树并将它们的预测结果进行平均,来提高模型的稳定性和预测准确性。它通过引入随机性来增强模型的泛化能力,有效减轻了单棵决策树容易过拟合的问题。

目录

随机森林回归原理详解

1. 随机森林回归的基本概念

2. 随机森林回归的优缺点

Python代码示例

代码解释


 

1. 随机森林回归的基本概念

        随机森林是一种基于决策树的集成方法,它通过以下步骤构建模型:

  1. 随机采样:从原始训练数据集中有放回地随机抽样,生成多个子数据集(Bootstrap样本)。
  2. 决策树构建:对每个子数据集构建一棵决策树。在每个节点分裂时,随机选择特征的一个子集,并在其中选择最佳特征进行分裂。
  3. 集成预测:对于新的输入数据,通过所有决策树进行预测,然后对结果进行平均(对于回归问题)或投票(对于分类问题)。

2. 随机森林回归的优缺点

优点

  • 高精度:通过集成多个决策树,随机森林通常能取得比单棵决策树更高的预测精度。
  • 抗过拟合:由于多个决策树的结果是平均的,随机森林可以有效减轻过拟合现象。
  • 鲁棒性:对数据中的噪声和缺失值具有较强的鲁棒性。
  • 处理高维数据:能够处理大量特征,并能评估特征的重要性。

缺点

  • 计算开销大:构建多个决策树的计算开销较大。
  • 模型解释性差:由于结果是多个决策树的平均,难以解释具体的决策路径。

Python代码示例

以下是一个完整的Python代码示例,用于实现随机森林回归。我们将使用scikit-learn库来构建和评估模型。

 

import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error# 生成一些示例数据
np.random.seed(0)
x = np.sort(5 * np.random.rand(100, 1), axis=0)
y = np.sin(x).ravel()
y[::5] += 3 * (0.5 - np.random.rand(20))  # 添加噪声# 可视化原始数据
plt.scatter(x, y, s=20, edgecolor="black", c="darkorange", label="data")
plt.title("Original Data")
plt.show()# 划分训练集和测试集
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=42)# 创建随机森林回归模型并进行拟合
regr = RandomForestRegressor(n_estimators=100, random_state=42)
regr.fit(x_train, y_train)# 预测结果
y_train_pred = regr.predict(x_train)
y_test_pred = regr.predict(x_test)# 可视化拟合结果
x_test_sorted = np.sort(x_test, axis=0)
y_test_pred_sorted = regr.predict(x_test_sorted)plt.figure()
plt.scatter(x_train, y_train, s=20, edgecolor="black", c="darkorange", label="train data")
plt.scatter(x_test, y_test, s=20, edgecolor="black", c="blue", label="test data")
plt.plot(x_test_sorted, y_test_pred_sorted, color="green", label="predictions", linewidth=2)
plt.title("Random Forest Regression")
plt.legend()
plt.show()# 打印模型参数和均方误差
print("Train Mean Squared Error:", mean_squared_error(y_train, y_train_pred))
print("Test Mean Squared Error:", mean_squared_error(y_test, y_test_pred))

 

代码解释

  1. 数据生成

    • 生成100个随机点,并将这些点排序。
    • 使用正弦函数生成目标值,并在部分数据上添加随机噪声以增加数据的复杂性。
  2. 数据可视化

    • 绘制生成的原始数据点,用散点图表示。
  3. 数据划分

    • 将数据划分为训练集和测试集,训练集占80%,测试集占20%。
  4. 模型训练

    • 使用RandomForestRegressor类构建随机森林回归模型,并在训练数据上进行拟合。
    • 设置n_estimators=100表示构建100棵决策树,random_state=42保证结果可复现。
  5. 结果预测

    • 在训练集和测试集上进行预测,生成预测结果。
    • 对测试数据按顺序排序,以便于绘制预测曲线。
  6. 可视化拟合结果

    • 绘制训练数据、测试数据及模型的预测结果,观察模型的拟合效果。
  7. 模型评估

    • 计算并打印训练集和测试集的均方误差(MSE),评估模型的拟合性能。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/35875.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【SQL Server数据库】存储过程的使用

目录 一、要求 1.创建一个存储过程 Proc_Course,查看“0108”号课程的选修情况,包括学生学号、姓名和成绩,然后执行该过程 2.创建一个存储过程 Proc_SC1,通过学生学号来查询学生选修情况,默认…

Spring Cloud Gateway 跨域配置和跨服务请求跟踪

文章目录 引言I Spring Cloud Gateway 跨域配置1.1 网关统一处理:配置文件-推荐1.2 网关统一处理:配置类方式1.3 微服务处理,网关侧不用处理CORS。1.4 子服务依赖配置1.5 网关服务的依赖配置II 跨服务请求日志跟踪2.1 feign 依赖配置2.2 feign子模块将请求头中的参数,全部作…

Linux系统安装和卸载nginx

📖Linux系统安装和卸载nginx ✅下载✅安装✅启动nginx✅安装成系统服务✅常见问题:80端口被占用了✅卸载✅目录结构 以下介绍的是以源码编译安装方式: ✅下载 官方地址:https://nginx.org/en/download.html 123云盘地址&#x…

pytest的搜索路径和导入模式

搜索路径 指定路径下面所有的 test_*.py or *_test.py 文件 中的所有以test前缀的方法。或者Test前缀类下的所有test 前缀的方法。不管是不是staticmethod and classmethods 官方文档 https://docs.pytest.org/en/8.2.x/explanation/goodpractices.html#test-discovery base…

基于springboot、vue影院管理系统

设计技术: 开发语言:Java数据库:MySQL技术:SpringbootMybatisvue 工具:IDEA、Maven、Navicat 主要功能: 影城管理系统的主要使用者分为管理员和用户, 实现功能包括管理员: 首页…

如何在 Node.js 中使用文件系统

前言:Web 应用程序并不总是需要写入文件系统,但 Node.js 提供了一个全面的应用程序编程接口 (API) 来实现这一点。如果您要输出调试日志、将文件传输到服务器或从服务器传输文件,或者创建命令行工具,那么它可能是必不可少的。 值得…

ELK集群设置密码

一、软件安装清单 elasticsearch7.17.22logstash7.17.22kibana:7.17.22filebeat7.17.22elasticsearch-head:5 二、配置 生成证书 进入elasticsearch容器 bin/elasticsearch-certutil cert -out /usr/share/elasticsearch/config/elastic-certificates.p12 -pass将证书拷贝…

HTML DOM 修改 HTML 内容

HTML DOM 修改 HTML 内容 HTML DOM(文档对象模型)是 HTML 和 XML 文档的编程接口。它提供了对文档的结构化表示,并定义了一种方式来访问和操作文档的内容、结构和样式。在网页开发中,使用 HTML DOM 可以动态地修改 HTML 元素的内容、属性和样式。 基本概念 在 HTML DOM …

在Ubuntu上安装和配置配置服务器防火墙(CSF)的方法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 简介 Config Server Firewall(CSF)是大多数 Linux 发行版和基于 Linux 的 VPS 的免费高级防火墙。除了基本的防…

qt for android 工程添加AndroidManifest.xml 文件

1.选择左边图形栏目中的Projects,在Build steps下的Build Android APK中Details 2.点击Create Templates,并勾选 此时在工程下面会多出一个文件夹android 3.将这个android的中所有文件加入工程中,编辑.pro 4.通过QT 图形化编辑设置属性&#…

JAVA【案例5-5】二月天

【二月天】 1、案例描述 二月是一个有趣的月份,平年的二月有28天,闰年的二月由29天。闰年每四年一次,在判断闰年时,可以使用年份除于4,如果能够整除,则该年是闰年。 本案例要求编写一个程序,…

项目前端遇到的相关问题及解决办法

一.在IDEA中修改html文件后,网页却不更新,即使重启服务,页面也不更新 由于本地静态网页缓存,导致浏览器不访问服务器的新资源,解决办法如下: 打开网页后,按“F12”调出“开发人员工具”。长按浏览器左上角的“刷新”按钮直至弹出对话框,选择“清空缓存并进行硬刷新”。…

python e怎么表示

exp()方法返回x的指数,ex。 语法 以下是 exp() 方法的语法: import math math.exp( x ) 注意:exp()是不能直接访问的,需要导入 math 模块,通过静态对象调用该方法。 参数 x -- 数值表达式。 返回值 返回x的指数,…

01背包问题求解

来源于 https://kamacoder.com/problempage.php?pid1046 使用动态规划,五步走 1.定义状态数组和具体状态含义: dp是个二维数组,第一维代表物品索引,第二维代表背包空间状态。 dp[i][j]是指物品i 在背包空间j 的情况下所能放的…

【redis】redis安装

1、安装前准备 1.1环境准备 VMware安装 参考博文:【VMware】VMware虚拟机安装_配置_使用教程_选择虚拟机配置选项,设置dvd镜像为 点击启动虚拟机-CSDN博客 安装centOS的linux操作系统 xshell xftp 参考博文:【Linux】Xshell和Xftp简介_安装_VMwar…

最新版Git安装指南使用指南

首先,访问Git的官方网站https://git-scm.com下载适用于您操作系统的安装包。您也可以选择使用阿里云镜像来加速下载过程。 也可以用国内地址下载https://pan.quark.cn/s/0293d76e58bchttps://pan.quark.cn/s/0293d76e58bc安装过程 在这里插入图片描述 2、点击“…

vue3 Cesium 离线地图

源码:cesium-demo: Cesium示例工程,基于vue3 1、vite-plugin-cesium 是一个专门为 Vite 构建工具定制的插件,用于在 Vite 项目中轻松使用 Cesium 库。它简化了在 Vite 项目中集成 Cesium 的过程。 npm i cesium vite-plugin-cesium vite -D…

前端 JS 经典:变量交换

将两个变量值相互交换的方法。 1. 定义第三个变量 let a 5; let b 6;const temp b; b a; a temp;console.log(a, b); // 6 5 2. 使用解构 let a 5; let b 6;[a, b] [b, a];console.log(a, b); // 6 5

【AI】DeepStream(12):三维动作识别 deepstream-3d-action-recognition-示例演示

【AI】AI学习目录汇总 1、简介 DeepStream还可以分析视频帧序列,来识别视频中的动作。 示例参见:/opt/nvidia/deepstream/deepstream/sources/apps/sample_apps/deepstream-3d-action-recognition 2、编译 1)进入源码目录:/opt/nvidia/deepstream/deepstream/sources/a…

redis 定时任务锁 分布式锁

基于 redisTemplate 在分布式集群环境中的最佳实践,其实无论是单机还是集群,保证原子性都是第一位的,如果能同时保证性能和高可用,那么就是一个可靠的分布式锁解决方案。 主要思路是:设置锁时,使用 redis…