史上最全MATLAB误差分析工具箱,不看别后悔 【矢量化代码、效率嘎嘎快、支持计算50种指标】
创始人
2024-04-13 19:03:43
0

在拟合、插值、模拟预测等计算中,往往需要通过不同指标参数来分析实际值与计算值之间差异依次衡量相关方法的可行性。常用的表征指标有残差平方和(SSE)、均方差(MSE)、均方根差(RMSE)、平均绝对误差(MAE)和决定系数R方(R-Squared)等等。

考虑到误差分析在实际应用中无处不在,咱呢决定把所有与误差相关的指标参数整合到一起,并命名为误差指标计算大全工具箱。三年多前咱在公众号中分享了第一版误差分析工具箱(详见:误差分析指标计算之matlab实现)。前不久咱又开源了工具箱中部分参数指标计算源代码(详见:误差指标分析计算之matlab实现【开源1.0.0版】)。目前,经过咱的收集整理,误差指标计算大全工具箱可支持计算的指标参数多达50个,最新版本为1.0.4版。最版本中不仅支持联合指标参数分析,还支持计算值与实际值各自的数学参数分析。目前可分析的指标如下图所示(以三组不同长度的计算值与实际值数据作为计算的结果示意):

图1 计算值与实际值各自的数学参数指标图2 联合参数指标
相较1.0.3版,新版本的能力可以说是得到大幅提升,以咱目前的检索能力,还没找到如此全面的MATLAB误差指标计算工具箱,即便是File Exchange和GitHub中都没有。但目前的版本并不是最终版,后续还会添加更多指标参数。如小伙伴们有需求的指标可留言给咱,在后续版本咱会陆续添加进来。最版摒弃了1.0.3的cellfun的写法,采用特殊的计算策略实现了不同长度的多组输入数据一次性矢量化计算,代码的可读性和计算效率得到大大提升。

当然毫无疑问的是,此工具箱所有的计算公式在网上都能差到,除极个别参数是咱自己定义的之外,全部都是来源于数学理论。伙伴们也可以自行根据相关的数学理论进行编写,过程也不复杂。鉴于收集整理过程费时耗力,故咱暂不公开分析最新1.0.4版,但最新版的源代码将会上传至铁粉群:科研学术交流群,目前群中共有71款源代码,还在不断增加中,如有伙伴愿意支持公众号的发展,可加该群(点此获取加群方式)获取误差指标计算大全工具箱最新版源代码。

同样的,本次把基础版代码分享出来供伙伴使用。

demo.m示例程序如下:


clc;clear;close all;
x = 0:0.2:3;
y = 0.58*x+0.2*rand(1,length(x));
lab = polyfit(x,y,1);
ny = lab(1)*x+lab(2);
plot(x,y,'r.-',x,ny,'bo-');
legend('实际值','拟合值');
title('误差分析指标参数测试');
Re = calcE(ny,y);

calcE.m函数文件


function Re = calcE(dataCalc,dataReal,varargin)
% 作者:巴山 (bashan)
% 邮箱:moveon5@163.com
% 欢迎关注巴山学长微信公众号,请多多分享公众号文章,谢谢支持!
%——————————————————————————————————————%
%                              程序简介                                  %
% 本程序用于计算误差分析中相关的参数指标,计算结果采用结构体形式进行返回;
% 程序参数说明
% dataCalc为计算值,dataReal为实际值
% Re.SSE —— 残差平方和
% Re.MSE —— 均方差
% Re.RMSE —— 均方根差
% Re.MAE —— 平均绝对误差
% Re.R2 —— 决定系数R方
% Re.COR —— Pearson相关系数narginchk(2,3);
len = length(dataReal);[mc,nc] = size(dataCalc);
[mr,nr] = size(dataReal);
maxc = max([mc,nc]);
minc = min([mc,nc]);
maxr = max([mr,nr]);
minr = min([mr,nr]);
if (maxc==maxr && minc==minr) && minc == 1if mc ~= mrdataReal = dataReal';endRe.SSE = sum((dataCalc-dataReal).^2);Re.MSE = sum((dataCalc-dataReal).^2)/len;Re.RMSE = sqrt(sum((dataCalc-dataReal).^2)/len);Re.MAE = sum(abs(dataCalc-dataReal))/len;% 计算R-squaredrr = dataCalc-dataReal;normr = norm(rr);SSE = normr.^2;SST = norm(dataCalc-mean(dataCalc))^2;Re.R2 = 1 - SSE/SST;% Re.COR —— 相关系数xm = mean(dataCalc);tm = mean(dataReal);fz = sum((dataCalc-xm).*(dataReal-tm));fm = sqrt(sum((dataCalc-xm).^2)*sum((dataReal-tm).^2));Re.COR = fz/fm;disp(['残差平方和(SSE):',32,num2str(Re.SSE)]);disp(['均方差(MSE):',32,num2str(Re.MSE)]);disp(['均方根差(RMSE):',32,num2str(Re.RMSE)]);disp(['平均绝对误差(MAE):',32,num2str(Re.MAE)]);disp(['决定系数R方(R2):',32,num2str(Re.R2)]);disp(['Pearson相关系数(COR):',32,num2str(Re.COR)]);elsedisp('数据格式必须为单行或单列数组!!!');Re = [];
end

为了更进一步地提升程序执行效率,后续将使用C语言来对误差指标计算大全工具箱进行升级优化,发布mex版本,更多可分析计算参数指标也会随着版本的升级而不断添加。如想要获取最版本且愿意支持巴山学长公众号的伙伴可在公众号中回复“原创”加科研学术交流群Q群。

祝伙伴们生活、工作愉快,有缘再见!!!

参考资料:
[1] https://www.datatechnotes.com/2019/02/regression-model-accuracy-mae-mse-rmse.html
[2] https://www.jianshu.com/p/9ee85fdad150

上一篇:代码整洁之道

下一篇:centos安装docker

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...