【MATLAB第39期】基于MATLAB的多元相关向量回归MRVR和快速FMRVR多输入多输出回归预测算法(多输入多输出数据)
一、效果展示
1.FMRVR
2. # of iterations = 10
2. # of iterations = 10
历时 0.590399 秒。
**************************
下列是输出1
**************************
训练集数据的R2为:0.91476
测试集数据的R2为:0.90012
训练集数据的MAE为:107.4164
测试集数据的MAE为:118.6531
训练集数据的MBE为:-5.1681
测试集数据的MBE为:4.579
**************************
下列是输出2
**************************
训练集数据的R2为:0.97846
测试集数据的R2为:0.96061
训练集数据的MAE为:54.173
测试集数据的MAE为:75.3314
训练集数据的MBE为:-0.95966
测试集数据的MBE为:3.0532
**************************
下列是输出3
**************************
训练集数据的R2为:0.88799
测试集数据的R2为:0.91031
训练集数据的MAE为:107.6909
测试集数据的MAE为:122.2654
训练集数据的MBE为:-20.9333
测试集数据的MBE为:-26.701
=================
训练集运行结果
第1个因变量
回归误差 (RMS): 83.4517
估计噪声水平: 0.1827 (true: 0.1622)
第2个因变量
回归误差 (RMS): 95.0044
估计噪声水平: 0.0539 (true: 0.0157)
第3个因变量
回归误差 (RMS): 35.9521
估计噪声水平: 0.4115 (true: 0.4167)
=================
测试集运行结果
第1个因变量
回归误差 (RMS): 69.2293
估计噪声水平: 0.1970 (true: 0.1622)
第2个因变量
回归误差 (RMS): 24.5793
估计噪声水平: 0.0826 (true: 0.0157)
第3个因变量
回归误差 (RMS): 330.102
估计噪声水平: 0.4296 (true: 0.4167)
训练集熵损失 = 15.4545
训练集二次损失 = 335.4603
测试集熵损失 = 40.0038
测试集二次损失 = 1897.5659
2.MRVR
1. # of iterations = 10
1. # of iterations = 10
历时 34.937888 秒。
**************************
下列是输出1
**************************
训练集数据的R2为:0.78223
测试集数据的R2为:0.32016
训练集数据的MAE为:173.4356
测试集数据的MAE为:328.7633
训练集数据的MBE为:-32.7339
测试集数据的MBE为:200.1722
**************************
下列是输出2
**************************
训练集数据的R2为:0.94909
测试集数据的R2为:0.66437
训练集数据的MAE为:85.6813
测试集数据的MAE为:210.3887
训练集数据的MBE为:-22.3859
测试集数据的MBE为:94.008
**************************
下列是输出3
**************************
训练集数据的R2为:0.94538
测试集数据的R2为:0.92513
训练集数据的MAE为:88.4047
测试集数据的MAE为:96.8574
训练集数据的MBE为:0.51131
测试集数据的MBE为:-26.8483
=================
训练集运行结果
第1个因变量
回归误差 (RMS): 111.282
估计噪声水平: 0.9684 (true: 0.9488)
第2个因变量
回归误差 (RMS): 144.32
估计噪声水平: 0.7537 (true: 0.7541)
第3个因变量
回归误差 (RMS): 101.934
估计噪声水平: 0.1996 (true: 0.1938)
=================
测试集运行结果
第1个因变量
回归误差 (RMS): 240.296
估计噪声水平: 1.0334 (true: 0.9488)
第2个因变量
回归误差 (RMS): 48.7849
估计噪声水平: 0.6868 (true: 0.7541)
第3个因变量
回归误差 (RMS): 180.328
估计噪声水平: 0.2048 (true: 0.1938)
训练集熵损失 = 0.015592
训练集二次损失 = 0.032023
测试集熵损失 = 0.13245
测试集二次损失 = 0.30277
二、代码展示
数据为28输入,3输出。共600样本,训练集样本数为500,测试集样本数为100。
%该程序演示了多元相关向量回归(MRVR)和快速fMRVR算法
%=========================================================================
clear, clc, close all;
%% 参数设置
isFast = true; % true(快速fMRVR)或false(原始MRVR)
maxIts = 10; % EM算法的最大迭代次数
tolerance = .1; % 检验EM算法收敛性的容差值
%% 导入数据
res = xlsread('数据集.xlsx');
%% 划分训练集和测试集
temp = randperm(600);
P_train = res(temp(1: 500), 1 : 28)';
T_train = res(temp(1: 500), 29: 31)';
M = size(P_train, 2);
P_test = res(temp(501: end), 1 : 28)';
T_test = res(temp(501: end), 29: 31)';
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);
% kernel
kernelType = '+gauss';
kernelWidth = 1.6;
%% RMS和估计噪声水平
disp('=================')
disp('训练集运行结果')
for j = 1:size(Y,2)
text = '第';
fprintf([text '%d' '个因变量\n'],j)
fprintf('回归误差 (RMS): %g\n', ...
sqrt(mean((T_train(:,j)-T_sim1(:,j)).^2)))
fprintf('估计噪声水平: %.4f (true: %.4f)\n\n', ...
sqrt(OmegaHat(j,j)), noise(j))
disp('=================')
disp('测试集运行结果')
for j = 1:size(Y,2)
end
text = '第';
fprintf([text '%d' '个因变量\n'],j)
fprintf('回归误差 (RMS): %g\n', ...
sqrt(mean((T_test(:,j)-T_sim2(:,j)).^2)))
fprintf('估计噪声水平: %.4f (true: %.4f)\n\n', ...
sqrt(OmegaHat1(j,j)), noise(j))
end
%% 度量协方差矩阵估计的性能
V = size(Y,2); % V是输出维度
temp = (Omega\OmegaHat)'; %Omega是真的,OmegaHat是估计的
temp1 = (Omega\OmegaHat1)'; %Omega是真的,OmegaHat是估计的
loss1 = trace(temp) - log(det(temp)) - V; % %熵损失
loss2 = trace((temp - eye(V))^2); % 二次损失
loss1_1 = trace(temp1) - log(det(temp1)) - V; % %熵损失
loss2_1 = trace((temp1 - eye(V))^2); % 二次损失
disp(['训练集熵损失 = ' num2str(loss1)])
disp(['训练集二次损失 = ' num2str(loss2)])
disp(['测试集熵损失 = ' num2str(loss1_1)])
disp(['测试集二次损失 = ' num2str(loss2_1)])
三、代码获取
1.阅读首页置顶文章
2.关注CSDN
3.根据自动回复消息,回复“39期”以及相应指令,即可获取对应下载方式。