随机森林回归算法的Python实现与应用

article/2025/10/3 6:18:06

摘要

    随机森林回归是一种集成学习算法,通过组合多个决策树来实现回归任务,构建多个决策树,并将它们组合成一个强大的回归模型。本文将会从随机森林回归算法的算法原理、Python实现及实际应用进行详细说明。

1 绪论

    在现在的数据分析及数学建模等竞赛中,机器学习算法的使用是很常见的,除了算法实现还需要对赛题或自己所获得的数据集进行数据预处理工作,本文默认读者的数据均已完成数据预处理部分。

2 材料准备

    Python编译器:PyCharm社区版或个人版等

    数据集:本文所使用的数据集样例如图2.1所示,如有需要,请私发笔者电子邮箱,获取元数据。

图2.1 数据集样例  

3 算法原理

        随机森林回归是一种集成学习算法,它通过组合多个决策树来实现回归任务,通过构建多个决策树,并将它们组合成一个强大的回归模型,具体步骤如下:

        Step 1:随机选择一个样本子集作为该决策树的训练集。

        Step 2:随机选择一部分特征(总特征数的平方根)作为该决策树的特征集。

        Step 3:基于训练集和特征集构建决策树,直到达到预定的叶子节点数或无法分割为止。

        Step 4:重复以上步骤,建立多颗决策树。

        Step 5:对于一个新的样本,将它输入到每棵决策树中,得到多个预测结果。

        Step 6:对多个预测结果进行平均,得到最终的预测结果。

        其算法公式基于决策树回归模型,每个决策树的预测函数可以表示为如公式(1)所示:

        式中:k表示第k棵决策树, 表示输入样本,表示第棵决策树的叶子节点数,表示第棵决策树第个叶子节点的预测值,表示第棵决策树第叶子节点的样本集合。

        多棵决策树的预测函数可以表示为:

  

        式中:K表示决策树的数量。

         在模型评估上,随机森林回归的常用指标包括均方误差(MSE)和R-squared(R2),一般来说,MSE的值越小,说明模型对数据的拟合程度越好,R2的值越接近于1,说明模型对数据的拟合程度越好,反之亦然。其计算公式如下:

        式中,表示样本数量, 表示第 个样本的真实值, 表示第 个样本的预测值。

        式中: 表示所有样本真实值的平均值。

        其算法原理示意图如图3.1所示:

图3.1 随机森林回归原理示意图

 4 算法Python实现

  4.1 数据加载

        此处利用pandas库进行读取数据,第一列特征为目标变量,其余的列特征作为自变量。

import pandas as pd
# 读取数据
data = pd.read_excel('DataRFL.xlsx')
# 分割自变量和目标变量
X = data.iloc[:, 1:]
y = data.iloc[:, 0]

4.2 将数据集切分为训练集和测试集

        使用train_test_split函数对数据集进行切分,30%作为测试集,70%作为训练集。

from sklearn.model_selection import train_test_split
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)

4.3 利用训练集进行模型训练

        利用70%的样本数据进行模型训练,即X_train和y_train,Python有随机森林回归的库,直接调用即可,简单实现自己的需求。

from sklearn.ensemble import RandomForestRegressor
# 训练模型
rf = RandomForestRegressor(n_estimators=100, random_state=42)
rf.fit(X_train, y_train)

4.4 结果预测

        本文使用30%测试集进行拟合,后文的拟合效果评估需要这一步,如果全部数据均是训练集,模型的拟合效果是说明不了的。

# 预测结果
y_pred = rf.predict(X_test)

4.5 模型评估

        机器学习回归不像是机器学习分类,机器学习分类算法的评估是通过准确率、精确率、召回率和F1-Score去评估,而回归算法的评估因子是通过均方差MSE和R方值进行说明的,这两者的评估原理和数值的说明如前文所述。

from sklearn.metrics import mean_squared_error, r2_score
# 计算MSE和R-squared
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)# 输出模型评估结果和目标方程
print('MSE:', mse)
print('R-squared:', r2)

4.6 目标方程的输出

        回归算法的模型是一条回归公式,其各特征的系数由特征重要性所决定。

# 输出目标方程
print("目标方程:")
for i, feature in enumerate(X.columns):print("{} * {} +".format(rf.feature_importances_[i], feature), end=' ')

4.7 绘制特征重要性条形图

        有一些题目需要确认影响该模型的关键因素或影响某物品的决定因素等,可以通过各特征在算法的重要性进行说明。

import matplotlib.pyplot as plt
# 绘制特征重要性条形图
feature_importance = rf.feature_importances_
feature_names = X.columns.tolist()
sorted_idx = feature_importance.argsort()
#避免中文乱码
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
plt.barh(range(len(feature_importance)), feature_importance[sorted_idx])
plt.yticks(range(len(feature_importance)), [feature_names[i] for i in sorted_idx],fontsize=5)
plt.xlabel('特征重要性')
plt.ylabel('特征名称')
plt.title('随机森林回归特征重要性')
plt.savefig('随机森林回归特征重要性',dpi=300)

4.8 结果输出

        控制台结果输出如图4.1所示,特征重要性条形图输出如图4.2所示。

 图4.1 结果输出

图4.3 特征重要性条形图

 4.9 结果说明

        在本文的拟合中,MSE为0.87,确实很小,说明模型对训练集数据的拟合效果非常好,但并不一定代表模型的泛化能力强,即能够对新的未见过的数据进行准确预测。

        R2的值是负值,说明模型对目标变量的解释能力比随机猜测还要差。R-squared的取值范围是0到1之间,越接近1表示模型对目标变量的解释能力越强,越接近0表示模型对目标变量的解释能力越弱,而如果是负数,则说明模型的表现不如随机猜测。

        所以本文所建立的模型是不适用的,应该考虑别的算法,或者思考自己的数据预处理是否有问题。

4.10 完整代码实现

import pandas as pd
import numpy as np
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error, r2_score
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split# 读取数据
data = pd.read_excel('附件0.2.xlsx')# 分割自变量和目标变量
X = data.iloc[:, 1:]
y = data.iloc[:, 0]
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
# 训练模型
rf = RandomForestRegressor(n_estimators=100, random_state=42)
rf.fit(X_train, y_train)# 预测结果
y_pred = rf.predict(X_test)# 计算MSE和R-squared
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)# 输出模型评估结果和目标方程
print('MSE:', mse)
print('R-squared:', r2)
# 输出目标方程
print("目标方程:")
for i, feature in enumerate(X.columns):print("{} * {} +".format(rf.feature_importances_[i], feature), end=' ')# 绘制特征重要性条形图
feature_importance = rf.feature_importances_
feature_names = X.columns.tolist()
sorted_idx = feature_importance.argsort()plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
plt.barh(range(len(feature_importance)), feature_importance[sorted_idx])
plt.yticks(range(len(feature_importance)), [feature_names[i] for i in sorted_idx],fontsize=5)
plt.xlabel('特征重要性')
plt.ylabel('特征名称')
plt.title('随机森林回归特征重要性')
plt.savefig('随机森林回归特征重要性',dpi=300)

5 算法应用

        随机森林回归算法可以应用于销售量的预测、房价的预测和股票价格的预测(股市有风险,入行需谨慎)等领域,具体可以阅读相关领域的文献。

6 结论

        本文对随机森林回归算法对原理说明、算法的Python实现及算法应用进行了简要的说明,文中给出了一个拟合效果不佳的模型进行示例,待日后有合适的训练数据再补充说明。

7 备注

        本文为原创文章,禁止转载,违者必究。如需原始数据,请点赞+收藏,然后私聊笔者或在评论区留下你的邮箱,即可获取原始数据一份。


http://chatgpt.dhexx.cn/article/miAbhbJ7.shtml

相关文章

随机森林回归算法

随机森林回归算法原理 随机森林回归模型由多棵回归树构成,且森林中的每一棵决策树之间没有关联,模型的最终输出由森林中的每一棵决策树共同决定。 随机森林的随机性体现在两个方面: 1、样本的随机性,从训练集中随机抽取一定数量的…

随机森林回归器

文章目录 前言一、重要参数criterion 二、重要属性和接口三、随机森林回归用法总结 前言 所有的参数,属性与接口,全部和随机森林分类器一致。仅有的不同就是回归树与分类树的不同,不纯度的指标,参数Criterion不一致。 一、重要参…

随机森林分类、回归算法原理及调参实战

集成算法 ensemble 通过在数据集上构建多个模型,集成所有模型的建模结果,得到一个综合的结果,以此来获得比单个 模型更好的分类或回归表现装袋法bagging:构建多个相互独立的基评估器(base estimator),然后…

LESSON 9.1 随机森林回归器的实现

目录 三 随机森林RandomForest   1 RamdomForestRegressor的实现   2 随机森林回归器的参数    2.1 弱分类器结构    2.2 弱分类器数量    2.3 弱分类器训练的数据    2.4 其他参数 四 增量学习:随机森林处理巨量数据   1 普通学习vs增量学习   2 增量学…

随机森林简单回归预测

随机森林(RandomForest)简单回归预测 随机森林是bagging方法的一种具体实现。它会训练多棵决策树,然后将这些结果融合在一起就是最终的结果。随机森林可以用于分裂,也可以用于回归。主要在于决策树类型的选取,根据具体…

【机器学习项目实战】随机森林(random forest)回归(RandomForestRegressor)模型Python实现

说明:这是一个机器学习实战项目(附带数据代码),如需数据完整代码可以直接到文章最后获取。 1.定义问题 在电子商务领域,现在越来越多的基于历史采购数据、订单数据等,进行销量的预测;本模型也是…

用Python实现随机森林回归

1 介绍 使用Scikit-Learn模块在Python实现任何机器学习算法都比较简单,并且不需要了解所有细节。这里就对如何进行随机森林回归在算法上进行概述,在参数上进行详述。希望对你的工作有所帮助。 这里,将介绍如何在Python中构建和使用Random Fo…

DS和[address]

8086CPU中,用16位寄存器来存储一个字。高8位存放高位字节,低8位存放低位字节。在内存中存储时,由于内存单元是字节单元,则一个字要用两个地址连续的内存单元来存放,这个字的低位存放低地址单元中,高位字节存…

a's'da's'd

1:原理ffmpeg读取出来一个包如果是视频包放入视频包队列,如果是音频包放入音频包队列。视频:从视频队列中取出一个包解码根绝帧率或pts等等算出一帧数据的持续时间将这一帧数据放入VideoPicture这个结构体的bmp中,这只是内存,还未…

微信公众号内置浏览器缓存清理

微信公众号的H5页面访问后,会缓存js、css等数据,如果更新了脚本文件,前端一段时间内容反复刷新都无法生效。 使用过程中,更新代码但是H5不能及时更新,推荐以下几种方式: 方法一: 微信->“我…

微信浏览器缓存清理

微信其实内嵌了一个QQ浏览器,只是这个浏览器没有菜单界面,看上去无法清理微信内置浏览器的缓存。 方法一: 1、随便打开一个聊天窗口,输入debugx5.qq.com 并发送 2、点击自己发送的地址debugx5.qq.com,打开debug 调试…

Android手机微信内置浏览器缓存怎么清理?

有很多时候我们的网站需要在微信上打开进行测试,一次次的修改不像是浏览器一样可以随时清理缓存,不清理缓存的话这样会对测试运行结果有影响,那如何清理缓存呢? 注意:此功能只能适用于安卓微信 1、专门的清理缓存的网…

微信内置浏览器清理缓存方法(适用于安卓手机)

用微信内置浏览器打开这个网页debugx5.qq.com ,就会有清除缓存的选项,如下图

微信内置浏览器清除缓存、cookie、local storage清除(安卓手机)

项目需要做一个openIdADFS混合模式的登录,开发的时候发现点问题,需要清除cookie和local storage进行修改。 于是稍微研究了一下,安卓手机如何清除缓存、cookie和local storage。 本人使用的手机是华为Mate 20Pro,微信版本8.0.3.…

h5、微信浏览器、微信公众号清理缓存的常用方法

h5浏览器特别是微信公众号存在缓存的问题,让我们在测试、产品、用户面前彻底丢了面子,他们会问。为什么会有缓存?别人的产品可以做到,为什么我们的不可以? 下面提供几种方案可以尝试处理h5浏览器缓存的问题。 一、普…

清除微信浏览器缓存

转载自https://chenhuichao.com/2016/04/07/mobile/wechat-clean-cache/ 在做微信移动页面开发时,若需要清除缓存,对于Android和iOS平台的清除方法如下: iOS iOS的微信浏览器中自带刷新按钮。点击微信右上角的菜单->刷新,&am…

微信公众号开发,清除微信内置浏览器缓存

在做微信开发的时候(主要是微信内网页或者比较大型的手机网站)的时候,更改了页面代码,但是微信内置浏览器有缓存,还是之前的效果,影响调试,而且还死活清除不掉!!&#xf…

微信内置浏览器禁止缓存的问题

解决方案1&#xff1a; 调试阶段或者频繁更新的页面加入以下头信息&#xff1a; <meta http-equiv"Cache-Control" content"no-cache, no-store, must-revalidate" /> <meta http-equiv"Pragma" content"no-cache" /> &l…

微信内置浏览器缓存清理及关闭微信默认的X5内核

之前做过很多公众号的项目&#xff0c;项目写完后给客户看项目&#xff0c;客户一而再再而三的修改元素向左挪1px&#xff0c;向右挪2px。改好之后让客户看&#xff0c;客户说我特泽发克&#xff0c;你啥都没有修改&#xff0c;你竟然骗我&#xff01;&#xff01;&#xff01;…

微信内的浏览器缓存清理方法

安卓清除缓存方案&#xff1a; android版微信内置浏览器&#xff08;X5内核&#xff09; 在安卓版微信内打开链接 http://debugx5.qq.com 拉到调试页面的最底端&#xff0c;勾选上所有的缓存项目&#xff0c;点击清除。 苹果清除缓存方案&#xff1a; ios版微信内置浏览器&am…