使用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); %

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

WPS宏编辑器开发,单元格内容变更自动触发事件

WPS中Excel的“触发器” 写在前面宏的开发1、切换宏编辑器开发环境2、小练习:自定义函数3、完成功能需求:单元格内容变更自动触发事件 总结 写在前面 我先生用EXCEL做了一张学生存款表。设计得很简单,A学生已存款X元,A学生再次存…

HarmonyOS Next星河版笔记--界面开发(4)

布局 1.1.线性布局 线性布局通过线性容器column和row创建 column容器:子元素垂直方向排列row容器:子元素水平方向排列 1.1.1.排布主方向上的对齐方式(主轴) 属性:.justifyContent(枚举FlexAlign&#…

【前端】深入浅出的React.js详解

React 是一个用于构建用户界面的 JavaScript 库,由 Facebook 开发并维护。随着 React 的不断演进,官方文档也在不断更新和完善。本文将详细解读最新的 React 官方文档,涵盖核心概念、新特性、最佳实践等内容,帮助开发者更好地理解…

Rust开发一个命令行工具(一,简单版持续更新)

依赖的包 cargo add clap --features derive clap命令行参数解析 项目目录 代码 main.rs mod utils;use clap::Parser; use utils::{editor::open_in_vscode,fs_tools::{file_exists, get_file, is_dir, list_dir, read_file}, }; /// 在文件中搜索模式并显示包含它的行。…

Xcode 16 使用 pod 命令报错解决方案

原文请点击这个跳转 一、问题现象: 有人会遇到 Xcode 升级到 16 后,新建应用然后使用 pod init 命令会报错如下: Stack Ruby : ruby 3.3.5 (2024-09-03 revision ef084cc8f4) [x86_64-darwin23]RubyGems : 3.5.22Host : macOS 15.0 (24A335…

Linux 6.13 将提供对一系列 Pre-M1 苹果设备的基本支持

虽然不像苹果 M3/M4 设备支持上游主线 Linux 内核那样令人兴奋,但对于那些拥有一些较旧的苹果(M1 之前)设备的用户来说,即将发布的 Linux 6.13 内核将支持一些较旧的 SoC 和板卡。 即将到来的 Linux 6.13 合并窗口将支持大量旧版…

【蓝桥等考C++真题】蓝桥杯等级考试C++组第13级L13真题原题(含答案)-最大的数

CL13 最大的数(20 分) 输入一个有 n 个无重复元素的整数数组 a&#xff0c;输出数组中最大的数。提示&#xff1a;如使用排序库函数 sort()&#xff0c;需要包含头文件#include 。输入&#xff1a; 第一行是一个正整数 n(2<n<20)&#xff1b; 第二行包含 n 个不重复的整…

vue elementui el-dropdown-item设置@click无效的解决方案

如图&#xff0c;直接在el-dropdown-item上面设置click&#xff0c;相应的method并没有被触发&#xff0c;查找资料发现需要在它的上级 el-dropdown 处使用 command 方法触发。 【template】 <el-dropdown placement"bottom-end" command"handleCommand&quo…

flinkOnYarn并配置prometheus+grafana监控告警

flinkOnYarn并配置prometheusgrafana监控告警 一、相关服务版本&#xff1a; flink版本&#xff1a;1.17.2 pushgateway版本&#xff1a;1.10.0 prometheus版本&#xff1a;3.0.0 grafana-v11.3.0参考了网上的多个文档以及学习某硅谷的视频&#xff0c;总结了一下文档&#x…

Rocky、Almalinux、CentOS、Ubuntu和Debian系统初始化脚本v9版

Rocky、Almalinux、CentOS、Ubuntu和Debian系统初始化脚本 Shell脚本源码地址&#xff1a; Gitee&#xff1a;https://gitee.com/raymond9/shell Github&#xff1a;https://github.com/raymond999999/shell脚本可以去上面的Gitee或Github代码仓库拉取。 支持的功能和系统&am…

一文1800字使用Jmeter进行http接口性能测试!

接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及系统间的相互逻辑依赖关系等。 为什么要做接口测试&#xff1f; 越底层发现b…

当使用key-value方式进行参数传递时,若key对应的是一个对象或数组结构,如何利用API Post工具进行模拟操作。

1. 后端服务代码如下 RequestMapping("/handle11")public Person handle11(Person person){System.out.println(person);return person;} 2. 后端入参结构 person是一个对象&#xff0c;对象结构如下&#xff1a; public class Person {private String username …

Pytorch学习--神经网络--完整的模型验证套路

一、选取的图片 全部代码依托于该博客 二、代码&#xff08;调用训练好的模型&#xff09; import torch import torchvision from PIL import Image from model import *img_path "dog.png" image Image.open(img_path)print(image.size)transform torchvisi…

PMP--一、二、三模--分类--变更

文章目录 技巧考试中的三大项目流程一 、变更流程 高频考点分析&#xff08;一、过程&#xff1b;二、人员&#xff09;一、过程&#xff1a;1.1 变更管理&#xff1a;1.1.1 瀑布型变更&#xff08;一次交付、尽量限制、确定性需求 &#xff1e;风险储备&#xff09;1.1.2 敏捷…

c语言选择排序

选择排序思想&#xff1a; 反复地从未排序部分选择最小&#xff08;或最大&#xff09;的元素&#xff0c;将其放到已排序部分的末尾&#xff1b; 首先用一个变量min来保存数组第一个元素的下标&#xff0c;然后用这个下标访问这个元素&#xff0c;将这个元素与它后面的元素相…

基于SpringBoot的“原创歌曲分享平台”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“原创歌曲分享平台”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 平台功能结构图 平台首页界面图 用户注册界面…

JMeter项目实战

目录 一、流程&#xff1a; 1.接口测试流程&#xff1a; 2.测试数据准备&#xff1a; 3.接口功能测试&#xff1a; 4.自动化测试流程&#xff1a; 5.情景压力测试分析&#xff1a; 6.生成图形化测试报告&#xff1a; 一、流程&#xff1a; 1.接口测试流程&#xff1a; …

杨中科 .Net Core 笔记 DI 依赖注入2

ServiceCollection services new ServiceCollection();//定义一个承放服务的集合 services.AddScoped<iGetRole, GetRole>();using (ServiceProvider serviceProvider services.BuildServiceProvider()) {var list serviceProvider.GetServices(typeof(iGetRole));//获…

DAY6 线程

作业1&#xff1a; 多线程实现文件拷贝&#xff0c;线程1拷贝一半&#xff0c;线程2拷贝另一半&#xff0c;主线程回收子线程资源。 代码&#xff1a; #include <myhead.h> sem_t sem1; void *copy1()//子线程1函数 拷贝前一半内容 {int fd1open("./1.txt",O…

Window.history API学习笔记

Window.history API学习笔记 在现代前端开发中&#xff0c;单页应用&#xff08;SPA&#xff09;的流行让我们对于页面的浏览历史管理需求愈加明显。window.history API作为浏览器提供的原生API&#xff0c;能够帮助开发者更加细致地控制用户的导航体验。本文将介绍window.his…