matlab求两个矩阵的归一化均方根误差
时间: 2023-08-31 15:04:54 浏览: 226
可以使用以下MATLAB代码计算两个矩阵的归一化均方根误差:
```matlab
function rmse = normalized_rmse(x, y)
% 计算两个矩阵的归一化均方根误差
% x和y是两个矩阵
% 归一化
x_norm = (x - min(x(:))) / (max(x(:)) - min(x(:)));
y_norm = (y - min(y(:))) / (max(y(:)) - min(y(:)));
% 计算均方根误差
mse = mean((x_norm - y_norm).^2, 'all');
rmse = sqrt(mse);
end
```
使用示例:
```matlab
x = rand(3, 3); % 第一个矩阵
y = rand(3, 3); % 第二个矩阵
rmse = normalized_rmse(x, y);
```
其中,`x`和`y`是要比较的两个矩阵,`normalized_rmse`函数返回它们的归一化均方根误差。
相关问题
均方根误差和相关性的matlab
均方根误差(RMSE)和归一化相关性是评估图像处理结果的常用指标之一。
在Matlab中,可以使用以下代码计算均方根误差:
```matlab
% 假设原始图像为f,处理后的图像为g
% f和g为两个相同尺寸的矩阵
diff = double(f) - double(g);
mse = sum(diff(:).^2) / numel(diff);
rmse = sqrt(mse);
```
在上述代码中,首先将原始图像(f)和处理后的图像(g)转换为双精度类型,然后计算两者差值(diff),接着计算差值的平方和(mse),最后取平方根得到均方根误差(rmse)。
归一化相关性可以通过以下代码计算:
```matlab
corr = corr2(f, g);
```
在上述代码中,使用`corr2`函数计算原始图像(f)和处理后的图像(g)之间的归一化相关性。
用matlab实现将所有样本的输入数据归一化至闭区间[-1,1],训练样本的输出数据归一化至闭区间[0,1]。基于KELM 的降噪器设计即为根据历史时刻及当前时刻的含噪声信号估计当前时刻信号的回归问题,设计的KELM 器输入取当前时刻噪声信号及前7个时刻的历史信号即时间序列yk-7、yk-6……,yk ,输出即为当前时刻信号估计值~yk。定义如下的均方根误差(RMSE)用以衡量ELM算法的回归性能。并作出对比图。再反归一化即可得到KELM降噪信号。之后对KELM降噪信号进行离散小波变换,选择合适的小波阈值进行滤波,再经过离散小波逆变换即可得到混合降噪信号,综合考虑降噪效果与信号失真程度,传感器信号的降噪效果可由降噪信号与实际信号之间的RMSE来衡量。的代码
以下是MATLAB代码实现将所有样本的输入数据归一化至闭区间[-1,1],训练样本的输出数据归一化至闭区间[0,1],并基于KELM的降噪器设计。同时,计算均方根误差(RMSE)用于衡量ELM算法的回归性能。
```matlab
%% 数据归一化
data = load('data.mat'); % 加载数据
data_input = data.input; % 输入数据
data_output = data.output; % 输出数据
max_input = max(data_input,[],2); % 每列最大值
min_input = min(data_input,[],2); % 每列最小值
max_output = max(data_output,[],2); % 每列最大值
min_output = min(data_output,[],2); % 每列最小值
data_input = 2 .* (data_input - min_input) ./ (max_input - min_input) - 1; % 归一化到[-1,1]
data_output = (data_output - min_output) ./ (max_output - min_output); % 归一化到[0,1]
%% KELM降噪器设计
k = 7; % 历史时刻的数量
n = size(data_input,2); % 输入维度
m = size(data_output,2); % 输出维度
train_ratio = 0.7; % 训练集比例
train_size = floor(train_ratio * size(data_input,1)); % 训练集大小
train_input = data_input(1:train_size,:); % 训练集输入数据
train_output = data_output(1:train_size,:); % 训练集输出数据
test_input = data_input(train_size+1:end,:); % 测试集输入数据
test_output = data_output(train_size+1:end,:); % 测试集输出数据
% 构建KELM模型
W = rand(n, k); % 随机生成输入层到隐层的权重矩阵
B = rand(k, 1); % 随机生成隐层的偏置向量
H = tanh(W * train_input' + repmat(B, 1, size(train_input,1))); % 隐层输出
C = pinv(H' * H) * H' * train_output; % 计算输出层权重
train_predict = H' * C; % 训练集预测输出
% 计算均方根误差(RMSE)
train_rmse = sqrt(mean((train_predict - train_output).^2)); % 训练集RMSE
test_predict = tanh(W * test_input' + repmat(B, 1, size(test_input,1)))' * C; % 测试集预测输出
test_rmse = sqrt(mean((test_predict - test_output).^2)); % 测试集RMSE
%% 反归一化
train_predict = train_predict .* (max_output - min_output) + min_output; % 反归一化
train_output = train_output .* (max_output - min_output) + min_output; % 反归一化
test_predict = test_predict .* (max_output - min_output) + min_output; % 反归一化
test_output = test_output .* (max_output - min_output) + min_output; % 反归一化
%% 离散小波变换
train_wav = wden(train_predict - train_output, 'sqtwolog', 'h', 'mln', 5, 'sym8'); % 离散小波变换
test_wav = wden(test_predict - test_output, 'sqtwolog', 'h', 'mln', 5, 'sym8'); % 离散小波变换
%% 离散小波逆变换
train_denoise = train_predict - train_wav; % 降噪信号
test_denoise = test_predict - test_wav; % 降噪信号
train_mixed = train_wav + train_output; % 混合降噪信号
test_mixed = test_wav + test_output; % 混合降噪信号
%% 计算RMSE
train_rmse2 = sqrt(mean((train_denoise - train_output).^2)); % 训练集降噪效果RMSE
test_rmse2 = sqrt(mean((test_denoise - test_output).^2)); % 测试集降噪效果RMSE
train_rmse3 = sqrt(mean((train_mixed - train_output).^2)); % 训练集混合降噪效果RMSE
test_rmse3 = sqrt(mean((test_mixed - test_output).^2)); % 测试集混合降噪效果RMSE
%% 绘制结果
figure;
subplot(2,2,1);
plot(train_output);
hold on;
plot(train_predict);
title('训练集实际输出与预测输出');
legend('实际输出', '预测输出');
subplot(2,2,2);
plot(test_output);
hold on;
plot(test_predict);
title('测试集实际输出与预测输出');
legend('实际输出', '预测输出');
subplot(2,2,3);
plot(train_denoise);
hold on;
plot(train_output);
title('训练集降噪效果');
legend('降噪信号', '实际输出');
subplot(2,2,4);
plot(test_denoise);
hold on;
plot(test_output);
title('测试集降噪效果');
legend('降噪信号', '实际输出');
figure;
subplot(2,2,1);
plot(train_output);
hold on;
plot(train_mixed);
title('训练集混合降噪效果');
legend('混合降噪信号', '实际输出');
subplot(2,2,2);
plot(test_output);
hold on;
plot(test_mixed);
title('测试集混合降噪效果');
legend('混合降噪信号', '实际输出');
subplot(2,2,3);
bar([train_rmse, train_rmse2, train_rmse3]);
title('训练集RMSE');
set(gca, 'XTick', 1:3, 'XTickLabel', {'ELM', '降噪', '混合降噪'});
subplot(2,2,4);
bar([test_rmse, test_rmse2, test_rmse3]);
title('测试集RMSE');
set(gca, 'XTick', 1:3, 'XTickLabel', {'ELM', '降噪', '混合降噪'});
```
阅读全文