机器学习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)])

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

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

相关文章

设置用户访问hdfs

如果hadoop没有启Kerberos或者从Kerberos获取的用户为null&#xff0c;那么获取HADOOP_USER_NAME环境变量&#xff0c;并将它的值作为Hadoop执行用户。如果我们没有设置HADOOP_USER_NAME环境变量&#xff0c;那么程序将调用whoami来获取当前用户&#xff0c;并用groups来获取用…

JVM相关总结

JVM的些许问题 1.JVM内存区域划分 2.JVM类加载过程 3.JVM的垃圾回收机制 1.JVM的内存区域划分 一个运行起来的Java进程就是一个JVM虚拟机,需要从操作系统申请一大片内存,就会把内存划分成几个区域,每个区域都有不同的作用 常见的面试题 2.JVM类加载过程 熟练背诵 ! ! !…

printf内幕----编程内幕(1)

曾几何时&#xff0c;您有没有在夜深人静的时候想过一个问题&#xff0c;printf内部究竟做了什么&#xff1f;为何可以输出到屏幕上显示出来&#xff1f; 先看看这段熟悉的代码&#xff1a; // // Created by xi.chen on 2017/9/2. // Copyright © 2017 All rights rese…

WordPress中文网址导航栏主题风格模版HaoWa

模板介绍 WordPress响应式网站中文网址导航栏主题风格模版HaoWa1.3.1源码 HaoWA主题风格除行为主体导航栏目录外&#xff0c;对主题风格需要的小控制模块都开展了敞开式的HTML在线编辑器方式的作用配备&#xff0c;另外预埋出默认设置的编码构造&#xff0c;便捷大伙儿在目前…

入门JavaWeb之 JDBC 连接数据库

JDBC&#xff1a;Java Database Connectivity&#xff0c;Java 数据库连接 需要 jar 包支持&#xff1a; java.sql javax.sql mysql-connector-java&#xff08;连接驱动&#xff0c;必须导入&#xff09; 在 MySQL 先建个 jdbc 数据库后 USE jdbc; 执行后再 CREATE TABLE…

15- 22题聚合函数 - 高频 SQL 50 题基础版

目录 1. 相关知识点2. 例子2.15 - 有趣的电影2.16 - 平均售价2.17 - 项目员工 I2.18 - 各赛事的用户注册率2.19 - 查询结果的质量和占比2.20 - 每月交易 I2.21 - 即时食物配送 II2.22 - 游戏玩法分析 IV 1. 相关知识点 函数 函数含义order by排序group by分组between 小值 an…

Chrome备份数据

Chrome备份数据 1、 导出谷歌浏览器里的历史记录 参考&#xff1a;https://blog.csdn.net/qq_32824605/article/details/127504219 在资源管理器中找到History文件&#xff0c;文件路径&#xff1a; C:\Users\你的电脑用户名\AppData\Local\Google\Chrome\User Data\Default …

堆排序思想分享

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

丢失的数字(MissNumber)

丢失的数字 给定一个包含 [0, n] 中 n 个数的数组 nums &#xff0c;找出 [0, n] 这个范围内没有出现在数组中的那个数。 示例 1&#xff1a; 输入&#xff1a;nums [3,0,1] 输出&#xff1a;2 解释&#xff1a;n 3&#xff0c;因为有 3 个数字&#xff0c;所以所有的数字都…

五、Pentium 微处理器保护模式存储管理,《微机系统》第一版,赵宏伟

一、分段存储管理 Pentium支持分段存储管理、分页存储管理和段页式存储管理。 1.1 分段存储管理的基本思想 一个程序由多个模块组成。 每一个模块都是一个特定功能的独立的程序段。 段式管理&#xff1a;把主存按段分配的存储管理方式。 程序模块→段→段描述符→段描述符…

【设计】在Java后端开发时使用JSONObject完全替代JAVABean(DTO,VO)是否可行?

其实这样做你是得不偿失&#xff0c;不过也要看什么项目&#xff0c;如果你的项目只在只需要实现功能&#xff0c;不在乎健壮性&#xff0c;可持续性那就完全可以。因为我现在公司老项目所有用的POJO的地方都是用JSONObject。代码可读性几乎为0。你用了可能丧失以下功能&#x…

【微服务】后台管理项目多数据源管理方案实战

目录 前言 1、使用Spring提供的AbstractRoutingDataSource 2、使用MyBatis注册多个SqlSessionFactory 3、使用dynamic-datasource框架 前言 Java后台使用MyBatis-plus 快速访问多个数 据源&#xff0c;这里分享三种常用的多数据源管理方案 1、使用Spring提供的AbstractRout…

【C++深度探索】继承机制详解(一)

hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#xff1a;大耳朵土土垚的博客 &#x1…

代码托管服务:GitHub、GitLab、Gitee

目录 引言GitHub&#xff1a;全球最大的代码托管平台概述功能特点适用场景 GitLab&#xff1a;一体化的开发平台概述功能特点适用场景 Gitee&#xff08;码云&#xff09;&#xff1a;中国本土化的代码托管服务概述功能特点适用场景 功能对比结论 引言 在现代软件开发中&#…

numpy - array(3)

arr1 np.array([[(1000, 1001, 1002, 1003), (1010, 1011, 1012, 1013), (1020, 1021, 1022, 1023)],[(1100, 1101, 1102, 1103), (1110, 1111, 1112, 1113), (1120, 1121, 1122, 1123)]], dtypeint) (1) 根据坐标访问元素或内容,更改访问的内容&#xff0c;array也会更改。“…

C++操作系列(一):MinGW环境安装与配置(无报错版)

本文选择MinGW作为安装对象。 1. 下载MinGW 进入官网&#xff1a;MinGW - Minimalist GNU for Windows download | SourceForge.net 点击File&#xff1a; 划到最下面&#xff1a; &#xfeff; Windows 64位系统下载seh结尾的安装包&#xff1a; 2. 安装MinGW 解压MinGW&am…

力扣第218题“天际线问题”

在本篇文章中&#xff0c;我们将详细解读力扣第218题“天际线问题”。通过学习本篇文章&#xff0c;读者将掌握如何使用扫描线算法和堆来解决这一问题&#xff0c;并了解相关的复杂度分析和模拟面试问答。每种方法都将配以详细的解释&#xff0c;以便于理解。 问题描述 力扣第…

【CSS】深入理解CSS 的steps()函数

在CSS动画中&#xff0c;steps()函数是一个时间函数&#xff0c;它主要用于animation-timing-function属性&#xff0c;以定义动画的步进方式。当你想要动画的某个属性&#xff08;如background-position或transform: translateX()&#xff09;在特定的步骤之间变化时&#xff…

探索 ES6:现代 JavaScript 的新特性

随着 JavaScript 的不断演进&#xff0c;ECMAScript 2015&#xff08;简称 ES6&#xff09;作为 JavaScript 的一次重大更新&#xff0c;带来了许多新特性和语法改进&#xff0c;极大地提升了开发体验和代码质量。本文将详细介绍 ES6 的主要新特性&#xff0c;并展示如何在实际…

NLTK:原理与使用详解

文章目录 NLTK简介NLTK的核心功能1. 文本处理2. 词汇处理3. 语法分析4. 语义分析5. 情感分析 NLTK的使用1. 安装NLTK2. 导入NLTK库3. 下载NLTK数据集4. 文本处理示例5. 情感分析示例 总结 NLTK简介 NLTK是一个开源的Python库&#xff0c;用于处理和分析人类语言数据。它提供了…