使用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); %
相关文章:
使用Matlab建立随机森林
综述 除了神经网络模型以外,树模型及基于树的集成学习模型是较为常用的效果较好的预测模型。我们以下构建一个随机森林模型。 随机森林是一种集成学习方法,通过构建多个决策树并结合其预测结果来提高模型的准确性和稳定性。在MATLAB中,可以…...
【江苏-无锡】《无锡市市级政务信息化建设及运行维护项目支出预算标准(试行)》 -省市费用标准解读系列10
2023年3月28日,无锡市政府投资评审中心出台《无锡市市级政务信息化建设及运行维护项目支出预算标准(试行)》,此标准是为进一步提高财政评审效率,规范评审行为,保证评审质量,节约政府投资&#x…...
2024-11-12 问AI: [AI面试题] 您将如何设计一个人工智能系统来预测电信公司的客户流失?
文心一言 设计一个人工智能系统来预测电信公司的客户流失,是一个复杂但至关重要的任务,它涉及到多个步骤和关键要素。以下是一个详细的设计方案: 一、明确需求和目标 在设计智能系统之前,需要明确系统的需求和目标,…...
【数字静态时序分析】复杂时钟树的时序约束SDC写法
以上图为例,SoC芯片上往往存在几种不同的时钟源,有pll时钟、环振时钟、外部的晶振时钟,在SoC不同的模块或者不同的运行阶段使用的时钟也往往不同,所以在使用的时候,相同的模块会出现选择不同的时钟源的情况。上图的情形…...
springboot苍穹外卖实战:五、公共字段自动填充(aop切面实现)+新增菜品功能+oss
公共字段自动填充 不足 比起瑞吉外卖中的用自定义元数据类型mybatisplus的实现,这里使用的是aop切面实现,会麻烦许多,建议升级为mp。 定义好数据库操作类型 sky-common中已经定义好,OperationType。 自定义注解 AutoFill co…...
Go 语言中,golang结合 PostgreSQL 、MySQL驱动 开启数据库事务
Go 语言中,golang结合 PostgreSQL 、MySQL驱动 开启数据库事务 PostgreSQL代码说明: MySQL代码说明: PostgreSQL 在 Go 语言中,使用 database/sql 包结合 PostgreSQL 驱动(如 github.com/lib/pq)可以方便地…...
Git核心概念
目录 版本控制 什么是版本控制 为什么要版本控制 本地版本控制系统 集中化的版本控制系统 分布式版本控制系统 认识Git Git简史 Git与其他版本管理系统的主要区别 Git的三种状态 Git使用快速入门 获取Git仓库 记录每次更新到仓库 一个好的 Git 提交消息如下&#…...
网络安全技术在能源领域的应用
摘要 随着信息技术的飞速发展,能源领域逐渐实现了数字化、网络化和智能化。然而,这也使得能源系统面临着前所未有的网络安全威胁。本文从技术的角度出发,探讨了网络安全技术在能源领域的应用,分析了能源现状面临的网络安全威胁&a…...
这些场景不适合用Selenium自动化!看看你踩过哪些坑?
Selenium是自动化测试中的一大主力工具,其强大的网页UI自动化能力,让测试人员可以轻松模拟用户操作并验证系统行为。然而,Selenium并非万能,尤其是在某些特定场景下,可能并不适合用来自动化测试。本文将介绍Selenium不…...
PHP反序列化靶场(php-SER-libs-main 第一部分)
此次靶场为utools-php-unserialize-main。适合有一定基础的师傅,内容是比较全面的,含有我们的大部分ctf中PHP反序列化的题型。 level1: <?php highlight_file(__FILE__); class a{var $act;function action(){eval($this->act);} } …...
基于大数据爬虫+Python+SpringBoot+Hive的网络电视剧收视率分析与可视化平台系统(源码+论文+PPT+部署文档教程等)
博主介绍:CSDN毕设辅导第一人、全网粉丝50W,csdn特邀作者、博客专家、腾讯云社区合作讲师、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围…...
DHCP与FTP
DHCP dhcp:动态主机配置的协议,应用在大型的局域网环境中 服务端和客户端 服务端:提供IP地址,某种特定功能的提供者 客户端:请求IP地址,请求对应的功能的使用者 服务端的端口号:67 客户端的端…...
云渲染与云电脑,应用场景与技术特点全对比
很多朋友问,你们家一会宣传云渲染,一会宣传云电脑的,我到底用哪个?今天,渲染101云渲染和川翔云电脑就来对比下两者的区别! 渲染101&川翔云电脑,都是我们的产品,邀请码6666 一、…...
RockPI 4A单板Linux 4.4内核下的RK3399 GPIO功能解析
RockPI 4A单板Linux 4.4内核下的RK3399 GPIO功能解析 摘要:本文将基于RockPI 4A单板,介绍Linux 4.4内核下RK3399 GPIO(通用输入输出)功能的使用方法。通过详细的代码解析和示例,帮助读者理解如何在Linux内核中使用GPI…...
【Vue】Vue3.0(二十三)Vue3.0中$attrs 的概念和使用场景
文章目录 一、$attrs的概念和使用场景概念使用场景 二、代码解释Father.vueChild.vueGrandChild.vue 三、另一个$attrs使用的例子 一、$attrs的概念和使用场景 概念 在Vue 3.0中,$attrs是一个组件实例属性,它包含了父组件传递给子组件的所有非props属性…...
RHEL/CENTOS 7 ORACLE 19C-RAC安装(纯命令版)
一 首先需要安装两个CENTOS 7虚拟机(此处省略)。 由于我们是要安装ORCLE-RAC双节点集群所以至少每个CENTOS虚拟机上需要两块网卡,并且两块网卡都是HOST-ONLY具体步骤请看视频一《为虚拟机添加网卡》 这里大家需要注意的是,我们需要绑定两台机器的IP一共…...
CCSK:面试云计算岗的高频问题
在竞争激烈的云计算岗位求职市场中,拥有 CCSK云计算安全知识认证无疑能为你增添强大的竞争力。而深入了解云计算面试中的高频问题并熟练掌握答案,更是迈向成功的关键一步。 一、AWS 相关问题 AWS 是重要考点,常被问到其关键特性,…...
C++ String(1)
String的头文件是#include <string> String本质上是一个类,是C实现好的一个类 初学只用学重要的部分,不可能一次性全部学完 1.构造函数 我们先来看它的几个构造函数 首先(1)就是无参的构造 (2)是…...
ts 中 ReturnType 作用
ReturnType 用于获取函数的返回值类型。 一、基本概念和语法 1. 定义和语法结构 ReturnType是一个泛型类型,其语法为ReturnType<T>,其中T是一个函数类型。例如,如果有一个函数add,ReturnType<typeof add>就可以获取…...
Hadoop + Hive + Apache Ranger 源码编译记录
背景介绍 由于 CDH(Clouderas Distribution Hadoop )近几年已经开始收费并限制节点数量和版本升级,最近使用开源的 hadoop 搭了一套测试集群,其中的权限管理组件用到了Apache Ranger,所以记录一下编译打包过程。 组件…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
