【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)])
三、代码获取
后台私信回复“第39期”即可获取下载链接