使用Matlab建立随机森林

综述

除了神经网络模型以外,树模型及基于树的集成学习模型是较为常用的效果较好的预测模型。我们以下构建一个随机森林模型。

随机森林是一种集成学习方法,通过构建多个决策树并结合其预测结果来提高模型的准确性和稳定性。在MATLAB中,可以使用内置的TreeBagger函数来实现随机森林算法。以下是一个详细的示例,展示了如何在MATLAB中使用随机森林进行回归分析。

我们需要用到以下数据集,Pollution.xlsx。需要预测的是B列,即空气质量指数AQI。自变量是C~M列。

Step 1: 打开matlab,新建脚本,读入数据

在MATLAB 中,输入以下代码。(注意,要将数据和代码放在同一文件夹内)

Matlab中的当前路径也需要在这一路径,不然会报错。

Step 2: 划分训练集与测试集

在MATLAB 中,输人以下代码,划分训练集和测试机,并标注输入输出

将数据进行归一化处理。

Step 3: 划分训练集与测试集

在MATLAB 中,输人以下代码,设置随机森林的属性,并通过红框内的代码调用TreeBagger训练随机森林模型。由于这里要预测的因变量是一个连续型变量,所以在Method中,选择“回归(regression)”。如果要预测离散型变量,则要选择分类。

Step 4: 应用模型

在MATLAB 中,输人以下代码,将训练好的模型,应用在测试集上。

最后将数据反归一化,投射至原来的值上。

Step 5: 结果可视化

在MATLAB 中,输人以下代码,进行结果的绘制。

结果图如下所示

 

左图为每一个样本的预测值和真实值的差别;右图为每一个特征(自变量)的重要性,从图中可知,第5个自变量(Latitude,纬度)是最重要的,次重要的是第3个变量(Temperature,温度)。

Step 6: 计算模型指标

在MATLAB 中,输人以下代码,计算回归模型的各类指标。

结果如下所示,该模型效果一般,

%% 初始化数据
clc
clear
close all
%% 导入数据
data = xlsread('Pollution.csv', 'Pollution', 'B2:M101'); % 导入数据库
if isempty(data)
error('数据导入失败,请检查文件路径和表名');
end
% 生成随机索引
TE = randperm(100);
% 划分训练集和测试集
PN = data(TE(1:80), 2:12); % 训练集输入 (80x11)
TN = data(TE(1:80), 1); % 训练集输出 (80x1)
PM = data(TE(81:end), 2:12); % 测试集输入 (20x11)
TM = data(TE(81:end), 1); % 测试集输出 (20x1)
% 检查数据维度
disp('原始数据维度:');
disp(size(data));
disp('训练集输入 PN 维度:');
disp(size(PN));
disp('训练集输出 TN 维度:');
disp(size(TN));
disp('测试集输入 PM 维度:');
disp(size(PM));
disp('测试集输出 TM 维度:');
disp(size(TM));
% 手动计算归一化参数
xmin = min(PN, [], 1); % 每个特征的最小值
xmax = max(PN, [], 1); % 每个特征的最大值
xrange = xmax - xmin; % 每个特征的范围
gain = 1 ./ xrange; % 缩放因子
% 手动应用归一化参数
pn = (PN - xmin) .* gain; % 归一化训练集输入
pm = (PM - xmin) .* gain; % 归一化测试集输入
% 归一化输出
tn_min = min(TN);
tn_max = max(TN);
tn_range = tn_max - tn_min;
tn = (TN - tn_min) / tn_range; % 归一化训练集输出
% 检查归一化后的数据维度
disp('归一化后训练集输入 pn 维度:');
disp(size(pn));
disp('归一化后测试集输入 pm 维度:');
disp(size(pm));
disp('归一化后训练集输出 tn 维度:');
disp(size(tn));
% 检查归一化后的数据值
disp('归一化后训练集输入 pn 前5行:');
disp(pn(1:5, :));
disp('归一化后测试集输入 pm 前5行:');
disp(pm(1:5, :));
disp('归一化后训练集输出 tn 前5行:');
disp(tn(1:5, :));
%% 模型参数设置及训练模型
trees = 100; % 决策树数目
leaf = 5; % 最小叶子数
OOBPrediction = 'on'; % 打开误差图
OOBPredictorImportance = 'on'; % 计算特征重要性
Method = 'regression'; % 选择回归或分类
net = TreeBagger(trees, pn, tn, 'OOBPredictorImportance', OOBPredictorImportance, ...
'Method', Method, 'OOBPrediction', OOBPrediction, 'MinLeaf', leaf);
importance = net.OOBPermutedPredictorDeltaError; % 重要性
%% 仿真测试
pyuce = predict(net, pm);
%% 数据反归一化
Pyuce = pyuce * tn_range + tn_min;
% 检查反归一化后的数据值
disp('反归一化后预测输出 Pyuce 前5行:');
disp(Pyuce(1:5));
%% 绘图
figure % 图回图真实值与预测值对比图
plot(TM, 'bo-')
hold on
plot(Pyuce, 'r*-')
hold on
legend('真实值', '预测值')
xlabel('预测样本')
ylabel('预测结果')
grid on
figure % 绘制特征重要性图
bar(importance)
legend('各因素重要性')
xlabel('特征')
ylabel('重要性')
%% 相关指标计算
error = Pyuce - TM;
[~, len] = size(TM);
R2 = 1 - sum((TM - Pyuce).^2) / sum((mean(TM) - TM).^2); % 相关性系数
MSE = mean(error.^2); %

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

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

相关文章

Wireshark

目录 解题思路 题目设计原理 总结 解题思路 首先下载文件,用 wireshark 打开一头雾水。 但是看看题目的提示,说管理员的密码就是 flag 的内容,我们可以知道,关键词估计是密码,passwd、password、pwd之类的。 所以我…

FreeRTOS学习13——任务相关API函数

任务相关API函数 任务相关API函数任务相关API函数介绍任务相关 API 函数详解函数 uxTaskPriorityGet()函数 vTaskPrioritySet()函数 uxTaskGetSystemState()函数 vTaskGetInfo()函数 xTaskGetApplicationTaskTag()函数 xTaskGetCurrentHandle()函数 xTaskGetHandle()函数 xTask…

使用kalibr_calibration标定相机(realsense)和imu(h7min)

vslam-evaluation/VINS/Installation documentation/4.IMU和相机联合标定kalibr_calibration.md at master DroidAITech/vslam-evaluation GitHub 目录 1.kalibr安装 1.1安装依赖项 1.2创建工作空间 1.3下载kalibr并编译 1.4设置环境变量 2.准备标定板 3.配置驱动和打…

[Docker#8] 容器配置 | Mysql | Redis | C++ | 资源控制 | 命令对比

目录 一:Mysql 容器化安装 二:Redis 容器化安装 Redis 简介 Redis 容器创建 三:C容器制作 四:容器资源更新 常见问题 一:Mysql 容器化安装 进入 mysql 的镜像网站,查找 mysql 的镜像 mysql docker…

1小时构建Vue3知识体系之vue的生命周期函数

本文转载自:https://fangcaicoding.cn/course/12/63 大家好!我是方才,目前是8人后端研发团队的负责人,拥有6年后端经验&3年团队管理经验。 系统学习践行者!近期在系统化输出前端入门相关技术文章,期望能…

数据结构-集合

一.集合的表示 一个重要的操作是查某个元素属于哪个集合,另一个操作是合并操作 从这个树的节点去找树根也就是从下往上找,要把树并起来只需把两个根并在一起就可以了 不存在已知一个节点去找孩子节点,根重要的是已知一个节点找它的父亲节点,与之前的二…

unity基础,点乘叉乘。

简单记录下点乘叉乘&#xff0c;要不每次用完就忘&#xff0c;忘了又查。 using System.Collections; using System.Collections.Generic; using UnityEngine;public class TestCrossDot : MonoBehaviour {/// <summary>/// 原点/// </summary>public Transform t…

springboot 之 整合springdoc2.6 (swagger 3)

版本 springboot 3.3.5 jdk 17 springdoc 2.6.0 依赖pom <dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</artifactId><version>2.6.0</version> </dependency>注解对比…

数据结构与算法-前缀和数组

前缀和问题 什么是前缀和? 对于一个一般数组 nums,如果我们需要知道 S1 nums[0] nums[1]的结果&#xff0c; S2 nums[0] nums[1] nums[2] … 计算公式相当于: S2 S1 nums[2] … Sn Sn-1 nums[n]; 所谓前缀和&#xff1a;用来记录数组前项和的一个新数组&#xff0c;提…

R语言机器学习与临床预测模型77--机器学习预测常用R语言包

R小盐准备介绍R语言机器学习与预测模型的学习笔记 你想要的R语言学习资料都在这里&#xff0c; 快来收藏关注【科研私家菜】 01 预测模型常用R包 常见回归分析包: rpart 包含有分类回归树的方法; earth 包可以实现多元自适应样条回归; mgev包含广义加性模型回归; Rweka 包中的M…

Elasticsearch可视化工具Elasticvue插件用法

目录 1.打开浏览器扩展程序(示例Edge浏览器) ​2.搜索elasticvue并安装 3.打开elasticvue ​4.连接Es 5.有些浏览器无法下载安装扩展&#xff0c;例如谷歌。可以打包扩展给别的浏览器使用。 5.1打开浏览器扩展&#xff0c;打开开发人员模式&#xff0c;记住扩展程序id 5…

大数据技术之HBase中的HRegion

如果你正在学习大数据&#xff0c;你应该知道HBase是一个列式存储的NoSQL分布式数据库&#xff0c;可以配合Hadoop来使用。今天自己简单做了几页PPT&#xff0c;解释了一下HBase当中HRegion的基本概念&#xff0c;很多初学者在学习的时候对HRegion这个概念一直懵懵懂懂&#xf…

Spring Cloud Contract快速入门Demo

1.什么是Spring Cloud Contract &#xff1f; Spring Cloud Contract 是 Spring 提供的一套工具&#xff0c;用于帮助开发者通过契约&#xff08;Contract&#xff09;驱动的方式进行微服务的测试和集成。它主要解决微服务之间通信时&#xff0c;如何确保服务提供者和消费者之…

GISBox VS ArcGIS:分别适用于大型和小型项目的两款GIS软件

在现代地理信息系统&#xff08;GIS&#xff09;领域&#xff0c;有许多大家耳熟能详的GIS软件。它们各自具有独特的优势&#xff0c;适用于不同的行业需求和使用场景。在众多企业和开发者面前&#xff0c;如何选择合适的 GIS 软件成为了一个值得深入思考的问题。今天&#xff…

Linux 进程线程间通信总结

线程 线程共享存储空间主要带来的问题是数据同步和互斥。由于线程在同一进程中运行&#xff0c;它们共享相同的内存空间&#xff0c;任何线程都可以访问共享数据。这样&#xff0c;多个线程并发执行时&#xff0c;可能会导致以下两种主要问题&#xff1a; 互斥问题&#xff0…

【再谈设计模式】抽象工厂模式~对象创建的统筹者

一、引言 在软件开发的世界里&#xff0c;高效、灵活且易于维护的代码结构是每个开发者追求的目标。设计模式就像是建筑蓝图中的经典方案&#xff0c;为我们提供了应对各种常见问题的有效策略。其中&#xff0c;抽象工厂模式在对象创建方面扮演着重要的角色&#xff0c;它如同一…

Web安全之SQL注入---基础

文章目录 SQL注入简介SQL注入基础SQL注入分类SQL注入流程 SQL注入简介 什么是SQL注入&#xff1f; SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严&#xff0c;攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句&#xff0c;在管理…

机器学习——贝叶斯

&#x1f33a;历史文章列表&#x1f33a; 机器学习——损失函数、代价函数、KL散度机器学习——特征工程、正则化、强化学习机器学习——常见算法汇总机器学习——感知机、MLP、SVM机器学习——KNN机器学习——贝叶斯机器学习——决策树机器学习——随机森林、Bagging、Boostin…

gdb编译教程(支持linux下X86和ARM架构)

1、下载源码 http://ftp.gnu.org/gnu/gdb/ 我下载的8.2版本。 2、下载完后拷贝到linux的x86系统。 3、解压&#xff0c;然后进入到目录下&#xff0c;打开当前目录的命令行窗口。 4、创建一个生成目录。 5、我们先开始x86版本&#xff0c;这个比较简单&#xff0c;不需要配置…

10款翻译工具实践体验感受与解析!!!!!

在现今的数字化时代&#xff0c;翻译工具如同语言的桥梁&#xff0c;为我们打开了通向世界的大门。今天咱们不聊别的&#xff0c;就聊聊那些让我又爱不释手的翻译工具们。因为我的职业因素&#xff0c;作为一个经常需要跟各种语言打交道的“文字搬运工”&#xff0c;这些工具可…