MATLAB中回归模型常用误差指标(MSE、RMSE、MAPE等)的实现方法

MATLAB中回归模型常用误差指标(MSE、RMSE、MAPE等)的实现方法,包含数学公式、代码实现及使用示例:


一、核心误差指标实现

1. 均方误差(MSE)

数学公式

MATLAB代码

matlab 复制代码
function mse = calculateMSE(y_true, y_pred)
    % 输入验证
    assert(isequal(size(y_true), size(y_pred)), '输入数据维度不一致');
    n = numel(y_true);
    mse = sum((y_true - y_pred).^2) / n;
end
2. 均方根误差(RMSE)

数学公式

MATLAB代码

matlab 复制代码
function rmse = calculateRMSE(y_true, y_pred)
    % 调用MSE函数计算
    mse = calculateMSE(y_true, y_pred);
    rmse = sqrt(mse);
end
3. 平均绝对误差(MAE)

数学公式

MATLAB代码

matlab 复制代码
function mae = calculateMAE(y_true, y_pred)
    % 输入验证
    assert(isequal(size(y_true), size(y_pred)), '输入数据维度不一致');
    mae = mean(abs(y_true - y_pred));
end
4. 平均绝对百分比误差(MAPE)

数学公式

MATLAB代码(含零值保护):

matlab 复制代码
function mape = calculateMAPE(y_true, y_pred)
    % 输入验证
    assert(isequal(size(y_true), size(y_pred)), '输入数据维度不一致');
    % 避免除零错误
    epsilon = 1e-10;
    safe_denominator = max(abs(y_true), epsilon);
    mape = 100 * mean(abs((y_true - y_pred)./safe_denominator));
end

二、综合误差计算工具箱

完整函数实现(支持批量处理):

matlab 复制代码
function [MSE, RMSE, MAE, MAPE] = regressionMetrics(y_true, y_pred)
    % 输入验证
    assert(isequal(size(y_true), size(y_pred)), '输入数据维度不一致');
    
    % 计算基础指标
    n = numel(y_true);
    SSE = sum((y_true - y_pred).^2);  % 残差平方和
    
    % 输出指标
    MSE = SSE / n;
    RMSE = sqrt(MSE);
    MAE = mean(abs(y_true - y_pred));
    
    % MAPE计算(含零值保护)
    epsilon = 1e-10;
    safe_denominator = max(abs(y_true), epsilon);
    MAPE = 100 * mean(abs((y_true - y_pred)./safe_denominator));
end

三、使用示例

matlab 复制代码
% 生成测试数据
y_true = [3, -0.5, 2, 7, 4.5]';
y_pred = [2.5, 0.0, 2, 8, 4.8]';

% 调用函数计算
[MSE, RMSE, MAE, MAPE] = regressionMetrics(y_true, y_pred);

% 输出结果
fprintf('MSE: %.4f\n', MSE);    % 输出: 0.3750
fprintf('RMSE: %.4f\n', RMSE);  % 输出: 0.6124
fprintf('MAE: %.4f\n', MAE);    % 输出: 0.5000
fprintf('MAPE: %.2f%%\n', MAPE);% 输出: 16.67%

四、高级功能扩展

1. 批量数据处理
matlab 复制代码
% 多组数据计算(3D矩阵)
data_true = rand(10,5,100);  % 100组样本,每组10个特征5个样本
data_pred = rand(10,5,100);

% 计算每组指标
MSE_matrix = zeros(size(data_true,3),1);
for i = 1:size(data_true,3)
    [~, ~, ~, MSE_matrix(i)] = regressionMetrics(data_true(:,:,i), data_pred(:,:,i));
end
2. 可视化工具
matlab 复制代码
function plotErrors(y_true, y_pred)
    figure;
    subplot(2,1,1);
    plot(y_true, 'bo-', 'LineWidth',2); hold on;
    plot(y_pred, 'rx--', 'LineWidth',2);
    legend('真实值', '预测值');
    title('预测值对比');
    
    subplot(2,1,2);
    bar([MSE, RMSE, MAE, MAPE]);
    set(gca, 'XTickLabel', {'MSE','RMSE','MAE','MAPE'});
    ylabel('误差值');
    title('误差指标分布');
end

参考代码 误差计算,用于回归模型的MSE,RMSE,MAPE等常见误差计算 www.youwenfan.com/contentcsp/84836.html

五、注意事项

  1. 数据对齐 确保y_truey_pred长度一致,建议使用assert(isequal(length(y_true), length(y_pred)))进行验证
  2. 异常值处理 MSE对异常值敏感,建议先进行数据清洗 MAE更适合存在离群值的场景
  3. 单位一致性 RMSE单位与原始数据一致,MAPE为百分比单位
  4. 零值保护 MAPE计算时需避免真实值为零的情况,可通过添加极小值epsilon解决

六、扩展指标(可选)

matlab 复制代码
% 决定系数R²
function r2 = calculateR2(y_true, y_pred)
    ss_total = sum((y_true - mean(y_true)).^2);
    ss_residual = sum((y_true - y_pred).^2);
    r2 = 1 - (ss_residual/ss_total);
end

% 对称MAPE(SMAPE)
function smape = calculateSMAPE(y_true, y_pred)
    numerator = abs(y_true - y_pred);
    denominator = (abs(y_true) + abs(y_pred))/2;
    smape = 100 * mean(numerator./denominator);
end
相关推荐
阿巴斯甜1 天前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
Kapaseker1 天前
实战 Compose 中的 IntrinsicSize
android·kotlin
xq95271 天前
Andorid Google 登录接入文档
android
黄林晴1 天前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
冬奇Lab2 天前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读
城东米粉儿2 天前
Android MediaPlayer 笔记
android
Jony_2 天前
Android 启动优化方案
android
阿巴斯甜2 天前
Android studio 报错:Cause: error=86, Bad CPU type in executable
android
张小潇2 天前
AOSP15 Input专题InputReader源码分析
android
_小马快跑_2 天前
Kotlin | 协程调度器选择:何时用CoroutineScope配置,何时用launch指定?
android