机器学习SVR 随机森林 RBF神经网络做回归预测的MATLAB代码
SVR 参考这篇文章 Libsvm使用笔记【matlab】
close all;
clc
clear
%% 下载数据
load('p_train.mat');
load('p_test.mat');
load('t_train.mat');
load('t_test.mat');
%% 数据归一化
%输入样本归一化
[pn_train,ps1] = mapminmax(p_train');
pn_train = pn_train';
pn_test = mapminmax('apply',p_test',ps1);
pn_test = pn_test';
%输出样本归一化
[tn_train,ps2] = mapminmax(t_train');
tn_train = tn_train';
tn_test = mapminmax('apply',t_test',ps2);
tn_test = tn_test';
%% SVR模型创建/训练
% 寻找最佳c参数/g参数——交叉验证方法
% SVM模型有两个非常重要的参数C与gamma。
% 其中 C是惩罚系数,即对误差的宽容度。
% c越高,说明越不能容忍出现误差,容易过拟合。C越小,容易欠拟合。C过大或过小,泛化能力变差
% gamma是选择RBF函数作为kernel后,该函数自带的一个参数。隐含地决定了数据映射到新的特征空间后的分布,
% gamma越大,支持向量越少,gamma值越小,支持向量越多。支持向量的个数影响训练与预测的速度。
[c,g] = meshgrid(-10:0.5:10,-10:0.5:10);
[m,n] = size(c);
cg = zeros(m,n);
eps = 10^(-4);
v = 10;
bestc = 0;
bestg = 0;
error = Inf;
for i = 1:mfor j = 1:ncmd = ['-v ',num2str(v),' -t 2',' -c ',num2str(2^c(i,j)),' -g ',num2str(2^g(i,j) ),' -s 3 -p 0.1'];cg(i,j) = libsvmtrain(tn_train,pn_train,cmd);if cg(i,j) < errorerror = cg(i,j);bestc = 2^c(i,j);bestg = 2^g(i,j);endif abs(cg(i,j) - error) <= eps && bestc > 2^c(i,j)error = cg(i,j);bestc = 2^c(i,j);bestg = 2^g(i,j);endend
end
% 创建/训练SVR
cmd = [' -t 2',' -c ',num2str(bestc),' -g ',num2str(bestg),' -s 3 -p 0.01'];
model = libsvmtrain(tn_train,pn_train,cmd);%% SVR仿真预测
[Predict_1,error_1,dec_values_1] = libsvmpredict(tn_train,pn_train,model);
[Predict_2,error_2,dec_values_2] = libsvmpredict(tn_test,pn_test,model);
% 反归一化
predict_1 = mapminmax('reverse',Predict_1,ps2);
predict_2 = mapminmax('reverse',Predict_2,ps2);
%% 计算误差
[len,~]=size(predict_2);
[len2,~]=size(predict_1);
error = t_test - predict_2;
error2 = t_train - predict_1;
error2 = error2';
error = error';
MAE1=sum(abs(error./t_test'))/len;
MSE1=error*error'/len;
MSE2=error2*error2'/len2;
RMSE2=MSE2^(1/2);
RMSE1=MSE1^(1/2);
R1 = corrcoef(t_test,predict_2);
R2 = corrcoef(t_train,predict_1);
r1 = R1(1,2);
r2 = R2(1,2);
disp(['........支持向量回归误差计算................'])
disp(['平均相对误差MAPE为:',num2str(MAE1)])
disp(['均方误差为MSE:',num2str(MSE1)])
disp(['均方根误差RMSE为:',num2str(RMSE1)])
disp(['相关系数 r1为:',num2str(r1)])
disp(['相关系数 r2为:',num2str(r2)])
figure(1)
plot(1:length(t_train),t_train,'r-*',1:length(t_train),predict_1,'b:o')
grid on
legend('真实值','预测值')
xlabel('样本编号')
ylabel('值')
% string_1 = {'训练集预测结果对比';
% ['mse = ' num2str(error_1(2)) ' R^2 = ' num2str(error_1(3))]};
title(string_1)
figure(2)
plot(1:length(t_test),t_test,'r-*',1:length(t_test),predict_2,'b:o')
grid on
legend('真实值','预测值')
xlabel('样本编号')
ylabel('值')
% string_2 = {'测试集预测结果对比';
% ['mse = ' num2str(error_2(2)) ' R^2 = ' num2str(error_2(3))]};
title(string_2)
RF随机森林 参考这篇博客 随机森林 matlab
close all
clear
clc
%%导入数据
data=load('训练集整合2.csv'); % Matlab2021版本以上无法使用xlsread函数,可用Load函数替代
data2=load('测试集整合2.csv');%测试集
% 设置的输入和输出
input=data(:,2:end); %训练集输入第2列至最后列为输入
output=data(:,1); %训练集输出第一1列为输出
input2=data2(:,2:end); %测试集输入第2列至最后列为输入
output2=data2(:,1); %测试集输出第一列1列为输出
%% Number of Leaves and Trees Optimization
for RFOptimizationNum=1:2
RFLeaf=[5,10,20,50,100,200,500];
col='rgbcmyk';
figure('Name','RF Leaves and Trees');
for i=1:length(RFLeaf)RFModel=TreeBagger(2000,input,output,'Method','R','OOBPrediction','On','MinLeafSize',RFLeaf(i));plot(oobError(RFModel),col(i));hold on
end
xlabel('Number of Grown Trees');
ylabel('Mean Squared Error') ;
LeafTreelgd=legend({'5' '10' '20' '50' '100' '200' '500'},'Location','NorthEast');
title(LeafTreelgd,'Number of Leaves');
hold off;disp(RFOptimizationNum);
end%% Cycle Preparation
RFScheduleBar=waitbar(0,'Random Forest is Solving...');
RFRMSEMatrix=[];
RFrAllMatrix=[];
RFRunNumSet=50000;
for RFCycleRun=1:RFRunNumSet
%% Training Set and Test Set Division
RandomNumber=(randperm(length(output),floor(length(output)*0.2)))';
TrainYield=output;%训练集因变量
TestYield=output2;%测试集因变量
TrainVARI=input;%训练集自变量
TestVARI=input2;%测试集自变量%% RF
nTree=80;
nLeaf=5;
RFModel=TreeBagger(nTree,TrainVARI,TrainYield,...'Method','regression','OOBPredictorImportance','on', 'MinLeafSize',nLeaf);
[RFPredictYield,RFPredictConfidenceInterval]=predict(RFModel,TestVARI);
trainPredict=predict(RFModel,TrainVARI);%% Accuracy of RF
RFRMSE=sqrt((sum((RFPredictYield-TestYield).^2))/size(TestYield,1));
RFrMatrix=corrcoef(RFPredictYield,TestYield);
RFr=RFrMatrix(1,2);
RFRMSEMatrix=[RFRMSEMatrix,RFRMSE];
RFrAllMatrix=[RFrAllMatrix,RFr];
if RFRMSE<1000disp(RFRMSE);break;
end
disp(RFCycleRun);
str=['Random Forest is Solving...',num2str(100*RFCycleRun/RFRunNumSet),'%'];
waitbar(RFCycleRun/RFRunNumSet,RFScheduleBar,str);
end
close(RFScheduleBar);%% Variable Importance Contrast
VariableImportanceX={};
XNum=1;
% for TifFileNum=1:length(TifFileNames)
% if ~(strcmp(TifFileNames(TifFileNum).name(4:end-4),'MaizeArea') | ...
% strcmp(TifFileNames(TifFileNum).name(4:end-4),'MaizeYield'))
% eval(['VariableImportanceX{1,XNum}=''',TifFileNames(TifFileNum).name(4:end-4),''';']);
% XNum=XNum+1;
% end
% endfor i=1:size(input,2)eval(['VariableImportanceX{1,XNum}=''',num2str(i),''';']);XNum=XNum+1;
endfigure('Name','Variable Importance Contrast');
VariableImportanceX=categorical(VariableImportanceX);
bar(VariableImportanceX,RFModel.OOBPermutedPredictorDeltaError)
xtickangle(45);
set(gca, 'XDir','normal')
xlabel('Factor');
ylabel('Importance');%% RF Model Storage
RFModelSavePath='D:\Program Files\MATLAB\R2022b\toolbox\libsvm-3.31\windows';
save(sprintf('%sRF1.mat',RFModelSavePath),'nLeaf','nTree',...'RandomNumber','RFModel','RFPredictConfidenceInterval','RFPredictYield','RFr','RFRMSE',...'TestVARI','TestYield','TrainVARI','TrainYield');
RBF径向基神经网络
clear
clc
pp=load('训练集整合2.csv');
ppp=load('测试集整合2.csv');
p_train=pp(:,2:end)';%训练输出
T_train=pp(:,1)';%训练输入值
p_test=ppp(:,2:end)';%预测值输出
T_test=ppp(:,1)';%预测输入值M=size(p_train,2);
N=size(p_test,2);
%% 数据归一化
%%数据归一化
[p_train,ps_input]=mapminmax(p_train,0,1);
p_test=mapminmax('apply',p_test,ps_input);[t_train,ps_output]=mapminmax(T_train,0,1);
t_test=mapminmax('apply',T_test, ps_output);
%%创建网络
rbf_spread=2000;
net=newrbe(p_train,t_train,rbf_spread);
%%数据仿真
t_sim1=sim(net,p_train);
t_sim2=sim(net,p_test);
%%数据反归一化
T_sim1=mapminmax('reverse',t_sim1,ps_output);
T_sim2=mapminmax('reverse',t_sim2,ps_output);%%均方根误差
error1=sqrt(sum((T_sim1-T_train).^2)./M);
error2=sqrt(sum((T_sim2-T_test).^2)./N);
%%查看网络结构
view (net);
%%绘图
figure
plot(1:M,T_train,'r-*',1:M,T_sim1,'b-o','LineWidth',1)
legend('真实值','预测值')
xlabel('训练样本')
ylabel('预测结果')
string={'训练集预测结果对比';['RMSE=' num2str(error1)]};
title(string)
xlim=[1,M]
gridfigure
plot(1:N,T_test,'r-*',1:N,T_sim2,'b-o','LineWidth',1)
legend('真实值','预测值')
xlabel('预测样本')
ylabel('预测结果')
string={'测试集预测结果对比';['RMSE=' num2str(error2)]};
title(string)
xlim=[1,N]
grid%%相关指标计算;
%R2
R1 = 1 - norm(T_train - T_sim1)^2 / norm(T_train - mean(T_train))^2;
R2= 1 - norm(T_test - T_sim2)^2 / norm(T_test - mean(T_test ))^2;
disp(['训练集数据的R2为: ',num2str(R1)])
disp(['测试集数据的R2为: ', num2str(R2)])
%MAE
mae1 = sum(abs(T_sim1 - T_train)) ./ M;
mae2 = sum(abs(T_sim2 -T_test)) ./N;
disp(['训练集数据的MAE为: ',num2str(mae1)])
disp(['测试集数据的MAE为: ',num2str(mae2)])
%MBE
mbe1 = sum(T_sim1 - T_train) ./M;
mbe2 = sum(T_sim2 - T_test) ./ N ;
disp(['训练集数据的MBE为: ',num2str(mbe1)])
disp(['测试集数据的MBE为: ',num2str(mbe2)])
相关文章:
机器学习SVR 随机森林 RBF神经网络做回归预测的MATLAB代码
SVR 参考这篇文章 Libsvm使用笔记【matlab】 close all; clc clear %% 下载数据 load(p_train.mat); load(p_test.mat); load(t_train.mat); load(t_test.mat); %% 数据归一化 %输入样本归一化 [pn_train,ps1] mapminmax(p_train); pn_train pn_train; pn_test mapminma…...
Spring Boot中配置Swagger用于API文档
Spring Boot中配置Swagger用于API文档 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨如何在Spring Boot应用中配置Swagger,以便于快…...
学习java第一百一十六天
Spring Framework有哪些不同的功能? 答: 轻量级-Spring 在代码量和透明度方面都很轻便。 IOC-控制反转AOP-面向切面编程可以将应用业务逻辑和系统服务分离,以实现高内聚。容器-Spring 负责创建和管理对象(Bean)的生命周…...
SQL Server的隐私盾牌:动态数据屏蔽(DMS)全面解析
🛡️ SQL Server的隐私盾牌:动态数据屏蔽(DMS)全面解析 在数据驱动的商业世界中,保护敏感信息至关重要。SQL Server提供了一种强大的安全特性——动态数据屏蔽(Dynamic Data Masking,简称DMS),…...
Android中常见的线程池
日常开发中我们常常使用到线程池,其能有效管理线程资源,避免过多线程导致系统资源浪费、又能复用线程资源,避免频繁的创建/销毁线程。在Android中线程池的实现为ThreadPoolExecutor类,本文主要记录该类相关的知识点。 线程池的六…...

C# YoloV8 模型效果验证工具(OnnxRuntime+ByteTrack推理)
C# YoloV8 模型效果验证工具(OnnxRuntimeByteTrack推理) 目录 效果 项目 代码 下载 效果 模型效果验证工具 项目 代码 using ByteTrack; using OpenCvSharp; using System; using System.Collections.Generic; using System.Diagnostics; using System.Drawing; using Sys…...

什么是Cookie?有什么用?如何清除浏览器中的Cookie?
互联网上的每一次点击和每一个选择都可能被一种名为Cookie的技术记录下来。但Cookie是什么?我们在网站上登录时,为什么经常会被问及是否接受Cookie?接受Cookie登录会不会影响我们的在线隐私? Cookie是什么? Cookie是一…...
数据库基本管理
数据完整性: 实体完整性:每一行必须是唯一的实体域完整性:检查每一列是否有效引用完整性:确保所有表中数据的一致性,不允许引用不存在的值用户定义的完整性:制定特定的业务规则 主键: 用于唯…...

43.三倍游戏
上海市计算机学会竞赛平台 | YACSYACS 是由上海市计算机学会于2019年发起的活动,旨在激发青少年对学习人工智能与算法设计的热情与兴趣,提升青少年科学素养,引导青少年投身创新发现和科研实践活动。https://www.iai.sh.cn/problem/390 题目描述 三倍游戏是一种单人游戏。玩…...

LoadBalance 负载均衡
什么是负载均衡 负载均衡(Load Balance,简称 LB),是⾼并发,⾼可⽤系统必不可少的关键组件. 当服务流量增⼤时,通常会采⽤增加机器的⽅式进⾏扩容,负载均衡就是⽤来在多个机器或者其他资源中,按照⼀定的规则合理分配负载. 负载均衡的⼀些实现 服务多机部署时,开发⼈…...

Wails 安装初体验
文章目录 Wails 安装说明1. 系统要求2. 安装步骤3. 构建应用 结论 Wails 安装说明 Wails 是一个用于构建桌面应用的 Go 框架,结合了现代前端技术。以下是安装步骤: 1. 系统要求 Go 1.16 或更高版本Node.js 和 npm可选:适用于 Windows、mac…...

架构师篇-10、DDD实战篇:通过领域模型落地系统
基于领域模型的设计与开发 数据库设计程序设计微服务设计 在线订餐系统的领域事件通知 微服务拆分 事件风暴会议 梳理领域事件进行领域建模识别聚合关系划分限界上下文 用户下单领域模型 更新后的模型 领域模型的设计实现过程 数据库设计 数据库映射:一对一关系…...

C++ | Leetcode C++题解之第190题颠倒二进制位
题目: 题解: class Solution { private:const uint32_t M1 0x55555555; // 01010101010101010101010101010101const uint32_t M2 0x33333333; // 00110011001100110011001100110011const uint32_t M4 0x0f0f0f0f; // 000011110000111100001111000011…...

Git安装与使用及整合IDEA使用的详细教程
1. 版本控制软件介绍 版本控制软件提供完备的版本管理功能,用于存储、追踪目录(文件夹)和文件的修改历史,是软件开发者的必备工具,是软件公司的基础设施。版本控制软件的最高目标,是支持软件公司的配置管理…...

高效办公秘诀:使用Excel超级处理器提高工作效率,提升职场竞争力
在现今快节奏的工作环境中,如何高效地完成工作任务,减少加班时间,成为了许多职场人士关注的焦点。其中,Excel作为一款功能强大的电子表格软件,被广泛应用于数据处理、分析以及报表制作等领域。然而,仅仅依赖…...
深入探讨Python中的元编程:装饰器与元类
Python以其简洁明了的语法和强大的标准库,成为许多开发者的首选语言。而在高级开发中,元编程(Metaprogramming)是一个非常强大的工具,可以极大地提升代码的灵活性和可复用性。本文将深入探讨Python中的元编程ÿ…...

MaxKb/open-webui+Ollama运行模型
准备:虚拟机:centos7 安装Docker:首先,需要安装Docker,因为Ollama和MaxKB都是基于Docker的容器。使用以下命令安装Docker: sudo yum install -y yum-utils device-mapper-persistent-data lvm2 sudo yum…...

2-requests模块(6节课学会爬虫)
2-requests模块(6节课学会爬虫) 1,安装requests2,发送get,post请求,获取响应3,response的方法方法一(Response.text)方法二(response.content.decode()&#…...
使用ECharts创建动态数据可视化图表
使用ECharts创建动态数据可视化图表 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在现代Web应用开发中,数据可视化是至关重要的一环。ECharts作…...

Nacos配置中心客户端源码分析(一): 客户端如何初始化配置
本文收录于专栏 Nacos 推荐阅读:Nacos 架构 & 原理 文章目录 前言一、NacosConfigBeanDefinitionRegistrar二、NacosPropertySourcePostProcessor三、AbstractNacosPropertySourceBuilder总结「AI生成」 前言 专栏前几篇文章主要讲了Nacos作为服务注册中心相关…...

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...

376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...

自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...

基于Springboot+Vue的办公管理系统
角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...
6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础
第三周 Day 3 🎯 今日目标 理解类(class)和对象(object)的关系学会定义类的属性、方法和构造函数(init)掌握对象的创建与使用初识封装、继承和多态的基本概念(预告) &a…...
鸿蒙(HarmonyOS5)实现跳一跳小游戏
下面我将介绍如何使用鸿蒙的ArkUI框架,实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...
深入浅出JavaScript中的ArrayBuffer:二进制数据的“瑞士军刀”
深入浅出JavaScript中的ArrayBuffer:二进制数据的“瑞士军刀” 在JavaScript中,我们经常需要处理文本、数组、对象等数据类型。但当我们需要处理文件上传、图像处理、网络通信等场景时,单纯依赖字符串或数组就显得力不从心了。这时ÿ…...