【Mathematical Model】基于Python实现随机森林回归算法特征重要性评估线性拟合

        前段时间在做遥感的定量反演,所以研究了一下回归算法,由于之前发的几篇博文都是定义好基础方程进行拟合的,不太满足我的需求。所以研究了一下随机森林回归的算法,之前使用随机森林都是做分类,这次做了回归算法也算是补全了RF算法的空缺了。今天抽空给大家分享一下使用Python实现随机森林回归算法,同时将特征重要性和拟合结果进行可视化。

原创作者:RS迷途小书童

博客地址:https://blog.csdn.net/m0_56729804?type=blog

1. 需要的库

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score

2. 代码主函数

        这里其实还是调用sklearn里面的随机森林回归算法的函数,所以整体没什么难度,最后将结果使用matplotlib库进行绘制。

# -*- coding: utf-8 -*-
"""
@Time : 2023/4/2 11:31
@Auth : RS迷途小书童
@File :Random Forest Regression.py
@IDE :PyCharm
@Purpose:随机森林回归算法+特征重要性评估
@Web:博客地址:https://blog.csdn.net/m0_56729804
"""
import joblib
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']def RF_Regression(path_excel):print("-----------------------------------随机森林回归分析-----------------------------------")print("【数据准备】正在导入数据......")df = pd.read_excel(path_excel)  # 读取数据num_columns = df.shape[1]x = df.iloc[:, 0:num_columns-1]  # 读取前18列为自变量y = df.iloc[:, num_columns-1]  # 读取第19列为因变量print("【数据准备】正在分割训练集和测试集......")x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3)  # 以7:3划分训练样本和测试样本model = RandomForestRegressor(n_estimators=100, random_state=42)  # 创建模型#  {'max_depth': None, 'max_features': 'log2', 'min_samples_leaf': 4, 'min_samples_split': 10, 'n_estimators': 200}print("【模型分析】正在训练回归模型......")model.fit(x_train, y_train)  # 以训练样本训练模型print("【模型分析】正在验证模型精度......")y_predict = model.predict(x_test)  # 用验证集预测mse = mean_squared_error(y_test, y_predict)r2 = r2_score(y_test, y_predict)# 计算MSE和R-squaredprint('【评估参数】MSE:', mse)  # 线性回归的损失函数print('【评估参数】R-squared:', r2)  # 确定系数的取值范围为[0 1].越接近1,表明方程的变量对y的解释能力越强,这个模型对数据拟合的也较好print("【模型参数】特征重要性:")feature_importance = model.feature_importances_  # 特征的重要性分数for i, feature in enumerate(x.columns):print(" {}: {}\n".format(feature, feature_importance[i]), end='')print("【结果可视化】正在绘制特征重要性......")feature_names = x.columns.tolist()  # 获取特征的名称feature_importance_sort = feature_importance.argsort()  # 按照特征重要性从小到大排序的索引plt.subplots(figsize=(8, 6))plt.barh(range(len(feature_importance)), feature_importance[feature_importance_sort])  # 绘制一个水平条形图plt.yticks(range(len(feature_importance)), [feature_names[i] for i in feature_importance_sort], fontsize=8)# 设置了y轴的刻度标签。根据排序后的索引feature_ids获取对应的特征名称。font size=8设置字体大小plt.xlabel('Features Importance')plt.ylabel('Features Name')plt.title('Random Forest Regression Feature Importance Evaluation')plt.show()# plt.savefig('Random Forest Regression Feature Importance Evaluation', dpi=500)print("【结果可视化】正在精度曲线......")plt.subplots(figsize=(8, 6))plt.scatter(y_predict, y_test, alpha=0.6)w = np.linspace(min(y_predict), max(y_predict), 100)plt.plot(w, w)plt.xlabel('Predicted Value')plt.ylabel('Actual Value')plt.title('Random Forest Prediction')plt.show()# joblib.dump(model, 'model_RF.pkl')

3. 结果展示

4. 总结

        随机森林算法做分类和回归问题还是不错的,只不过有个缺点就是无法直接将拟合的方程展示出来,只能直接将预测结果输出。所以大家在使用时可以将训练的模型保存,这样后面分析数据的时候就又可以调用这个模型了,不然每次分析都需要将训练和预测放在一起。

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

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

相关文章

有同学和我说,深度学习不用特征工程,只有浅层机器学习方法采用特征工程,我说你误会了,我给你好好解释吧!!

1. 通俗解释 浅层机器学习算法(如逻辑回归、决策树、支持向量机等)和深度学习算法(如神经网络)在特征工程上的依赖性确实存在一些差异。 浅层机器学习算法的特征工程依赖性: 浅层算法通常需要手工选择和设计特征&…

计算机语言 之【C++】入门级知识讲解(命名空间,C++输入输出,缺省参数,函数重载,引用,内敛函数,auto关键字,for循环,指针空值nullptr)

三点睡六点起,阎王夸我好身体 不到三点我不睡,太平间里抢C位 一、命名空间 1.命名空间的作用 2.命名空间定义 3.命名空间使用 二、C的输入输出 1.输入输出说明介绍 2.std命名空间的使用惯例 三、缺省参数 1.缺省参数概念 2.缺省参数分类 四、…

华为CCE部署RabbitMQ中间件操作文档

1、创建有状态(StatefulSet)部署 中间件一般为有状态部署,有状态部署与无状态部署区别参考文档:K8S有无状态部署-CSDN博客 1.1、基本信息 注意: 应用名称命名规则:(命名规则最好统一&#xff…

Redis中的复制功能(三)

复制 服务器运行ID 除了复制偏移量和复制积压缓冲区之外,实现部分重同步还需要用到服务器运行ID(run ID): 1.每隔Redis服务器,不论主服务器还是从服务,都会有自己的运行ID2.运行ID在服务器启动时自动生成,由40个随机的十六进制…

【C++】STL--vector

目录 vector的使用 vector的定义 vector iterator的使用 vector空间增长问题 vector增删查改 vector深度剖析及模拟实现 vector核心接口模拟实现 使用memcpy拷贝问题 迭代器失效问题 vector的使用 vector的定义 C中,vector是一个模版,第一个参…

全文更新:什么是Power Path?充电时是充电器供电还是电池供电?

原文来自微信公众号:工程师看海,与我联系:chunhou0820 看海原创视频教程:《运放秘籍》 昨天的文章误删了一部分,很多同学留言想看全文,现补充、更新如下: 前段时间,交流群里有位同学…

【图论】【分类讨论】LeetCode3017按距离统计房屋对数目

本文涉及的知识点 图论 分类讨论 本题同解 【差分数组】【图论】【分类讨论】【整除以2】3017按距离统计房屋对数目 LeetCode3017按距离统计房屋对数目 给你三个 正整数 n 、x 和 y 。 在城市中,存在编号从 1 到 n 的房屋,由 n 条街道相连。对所有 …

开源模型应用落地-qwen1.5-7b-chat-LoRA微调代码拆解

一、前言 本篇文章将解析 QWen1.5 系列模型的微调代码,帮助您理解其中的关键技术要点。通过阅读本文,您将能够更好地掌握这些关键技术,并应用于自己的项目中。 开源模型应用落地-qwen1.5-7b-chat-LoRA微调(二) 二、术语…

图论模板详解

目录 Floyd算法 例题:蓝桥公园 Dijkstra算法 例题:蓝桥王国 SPFA算法 例题:随机数据下的最短路问题 总结 最小生成树MST Prim算法 Kruskal算法 例题:聪明的猴子 Floyd算法 最简单的最短路径算法,使用邻接…

ubuntu20.04.6将虚拟机用户目录映射为磁盘Z

文章目录 linux虚拟机设置为NAT模式安装sshd服务映射目录到windows磁盘安装samba套件修改配置文件smb.conf重启smbd并设置用户名和密码 windows映射遇到的问题1、设置好之后映射不成功2、smbd下载失败3、smbd密码配置问题4、当有改动时候,最好重启一下smbd服务 linu…

Linux (Ubuntu)- mysql8 部署

目录 1.基本部署 2.修改密码 3.开启root可远程连接配置 1.基本部署 01》》先查看OS类型,如果是Ubuntu在往下边看 rootspray:/etc/mysql/mysql.conf.d# lsb_release -a LSB Version: core-11.1.0ubuntu2-noarch:security-11.1.0ubuntu2-noarch Distributor ID: …

Android面试题之Listview篇

秋招在即,计蒙准备在国庆假期结束前整理一套Android初级面试题籍,希望对大家有所帮助 提示:以下是本篇文章正文内容 ListView 1.当 ListView 数据集改变后,如何更新 ListView 使用该 ListView 的 adapter 的 notifyDataSetChange…