电子产业一站式赋能平台

PCB联盟网

搜索
查看: 231|回复: 0
收起左侧

【算法对比图】回归、时序预测的多算法对比图

[复制链接]

260

主题

260

帖子

1835

积分

三级会员

Rank: 3Rank: 3

积分
1835
发表于 2023-12-21 22:21:00 | 显示全部楼层 |阅读模式

t5ye44c3vzr64027184214.png

t5ye44c3vzr64027184214.png
7 M- Z; W) d* x
点击上方蓝字关注我们3 I& p$ @8 ?, Z2 g* \" D

pu5iwgkjlz364027184314.png

pu5iwgkjlz364027184314.png

' N$ ?/ j9 G- x2 i% N   注明:此推文来自公众号Lvy的口袋,欢迎大家关注Lvy小姐姐公众号~    多种算法对比图是常用的科研绘图,你知道几种合适的绘图样式呢?; A( c. K5 Q5 l/ D% s
. F! F4 |# O7 t; Q/ t: V

womk0popmfc64027184414.png

womk0popmfc64027184414.png
( T6 l2 @4 X: t9 a1 W1 A7 S
$ S; {) ~; l" t& F
' F, a# a5 \* W" t' B4 ]* }2 b
1.真实值和预测值展示图, Q# P, J# y0 V

% w& S9 Z9 ^6 L6 J1 h; c8 z; H1 @

g04sataxlza64027184514.png

g04sataxlza64027184514.png

, T& a, Z1 v8 z" G+ dTips:数据比较多、算法多的适合比较难看出实际的效果
4 B; x) l# }% B+ l  ~8 o" a; Q数据就是各个算法预测值和真实值数据(工具箱直接导出)# ^' `1 t: C' s% z3 `
  • data_pre_all=[]; %记录预测数据load(' 多元线性回归  17_Dec_11_34_33 train_result_train_vaild_test.mat')data1=data_Oriny_prey.y_test_predict;data_pre_all=[data_pre_all,data1];data_true=data_Oriny_prey.test_y;load('SSA麻雀搜索算法 随机森林回归  17_Dec_11_35_55 train_result_train_vaild_test.mat')data2=data_Oriny_prey.y_test_predict;data_pre_all=[data_pre_all,data2];load(' SVM-RF回归  17_Dec_11_37_18 train_result_train_vaild_test.mat')data3=data_Oriny_prey.y_test_predict;data_pre_all=[data_pre_all,data3];load(' MLP回归  17_Dec_11_38_31 train_result_train_vaild_test.mat')data4=data_Oriny_prey.y_test_predict;data_pre_all=[data_pre_all,data4];load(' LSTM回归  17_Dec_11_40_29 train_result_train_vaild_test.mat')data5=data_Oriny_prey.y_test_predict;data_pre_all=[data_pre_all,data5];str={'真实值','多元线性回归','SSA麻雀搜索算法 随机森林回归','SVM-RF回归' ,'MLP回归','LSTM回归'};figure('Units', 'pixels', ...    'Position', [300 300 860 375]);plot(data_true,'--*') hold onfor i=1:size(data_pre_all,2)    plot(data_pre_all(:,i))    hold on endlegend(str)set (gca,"FontSize",12,'LineWidth',1.2)box offlegend Box off
    $ F6 e5 [% A" [: Z/ `
    ! M# h" ^. r: [( h, f: B/ l7 q+ p/ J  n$ Q+ G
    $ W  }" R9 n! H- E1 y/ w
    2.误差柱状对比图
    9 D$ j+ V; a7 v, U% g4 L

    g1zsabm00wq64027184615.png

    g1zsabm00wq64027184615.png
    + i7 J' R+ ?7 ~; B2 M
    Tips:建议选取量纲差别不大的误差衡量指标,不然可能会有点丑
    / V& }, k5 V* t! p$ V; }
  • Test_all=[];for j=1:size(data_pre_all,2)    y_test_predict=data_pre_all(:,j);    test_y=data_true;    test_MAE=sum(abs(y_test_predict-test_y))/length(test_y) ;           test_MAPE=sum(abs((y_test_predict-test_y)./test_y))/length(test_y);      test_MSE=(sum(((y_test_predict-test_y)).^2)/length(test_y));     test_RMSE=sqrt(sum(((y_test_predict-test_y)).^2)/length(test_y));      test_R2= 1 - (norm(test_y - y_test_predict)^2 / norm(test_y - mean(test_y))^2);       Test_all=[Test_all;test_MAE test_MAPE test_MSE test_RMSE test_R2];end%%str={'真实值','多元线性回归','SSA麻雀搜索算法 随机森林回归','SVM-RF回归' ,'MLP回归','LSTM回归'};str1=str(2:end);str2={'MAE','MAPE','MSE','RMSE','R2'};data_out=array2table(Test_all);data_out.Properties.VariableNames=str2;data_out.Properties.RowNames=str1;disp(data_out)%% 柱状图 MAE MAPE RMSE 柱状图适合量纲差别不大的color=    [0.1569    0.4706    0.7098    0.6039    0.7882    0.8588    0.9725    0.6745    0.5490    0.8549    0.9373    0.8275       0.7451    0.7216    0.8627    0.7843    0.1412    0.1373    1.0000    0.5333    0.5176      0.5569    0.8118    0.7882       1.0000    0.5333    0.5176];figure('Units', 'pixels', ...    'Position', [300 300 660 375]);plot_data_t=Test_all(:,[1,2,4])';b=bar(plot_data_t,0.8);hold on- C% ?+ B/ Y/ s
    for i = 1 : size(plot_data_t,2)    x_data(:, i) = b(i).XEndPoints'; end8 l, l( i& Y' M$ x. O" W! j
    for i =1:size(plot_data_t,2)b(i).FaceColor = color(i,:);b(i).EdgeColor=[0.6353    0.6314    0.6431];b(i).LineWidth=1.2;end2 E7 z) v4 _0 s4 t* w) B5 k3 q, u* J& ^
    for i = 1 : size(plot_data_t,1)-1    xilnk=(x_data(i, end)+ x_data(i+1, 1))/2;    b1=xline(xilnk,'--','LineWidth',1.2);    hold onend 4 f9 M5 f6 t4 t: ~7 U* u
    ax=gca;legend(b,str1,'Location','best')ax.XTickLabels ={'MAE', 'MAPE', 'RMSE'};set(gca,"FontSize",12,"LineWidth",2)box offlegend box off
    - m! ~# ?" d" I! B( f, ~
    : ]6 D, h* E8 ]5 h6 J# G: a4 J

      V+ d  `* M' i8 l
    ! W  y7 G* H. ]  K
    " Z" P) y% a$ V/ ?; ]3.误差散点对比图5 A8 t! a0 `% N. B9 a, E! N8 E3 y0 D# v! Z

    fy4ct0c5qtr64027184715.png

    fy4ct0c5qtr64027184715.png

    5 N5 p6 n1 |5 C8 U4 MTips:可以任意选择两个误差衡量维度6 x- O9 J8 B3 g9 q7 |# k% q
  • figureplot_data_t1=Test_all(:,[1,5])';MarkerType={'s','o','pentagram','^','v'};for i = 1 : size(plot_data_t1,2)   scatter(plot_data_t1(1,i),plot_data_t1(2,i),120,MarkerType{i},"filled")   hold onendset(gca,"FontSize",12,"LineWidth",2)box offlegend box offlegend(str1,'Location','best')xlabel('MAE')ylabel('R2')grid on1 Q& M# C1 p7 W
    4 `% ^" x6 p" H+ B
    ! A/ p0 v5 B+ i6 R' i* [, x

    1 L' w& T, _! T0 r4.误差密度散点图3 Y, C! |  k1 \* f& \+ R

    k3guwk5hsgy64027184815.png

    k3guwk5hsgy64027184815.png

    % @" ^8 [3 i( U- E1 f  L* b' F( ?. Z' M7 ^
  • figure('Units', 'pixels', ...    'Position', [150 150 920 500]);for i=1:5    subplot(2,3,i)     n=50;     X=double(data_true);     Y=double(data_pre_all(:,i));     M=polyfit(X,Y,1);     Y1=polyval(M,X);    XList=linspace(min(X),max(X),n);    YList=linspace(min(Y),max(Y),n);    [XMesh,YMesh]=meshgrid(XList,YList);    F=ksdensity([X,Y],[XMesh(:),YMesh(:)]);    ZMesh=reshape(F,size(XMesh));    H=interp2(double(XMesh),double(YMesh),double(ZMesh),X,Y);    scatter(data_true,data_pre_all(:,i),35,'filled','CData',H,'MarkerFaceAlpha',.5);    hold on    plot(X(1:10:end),Y1(1:10:end),'--','LineWidth',1.2)    hold on    str_label=[str1{1,i},' ','R2=',num2str(Test_all(i,end))];    title(str_label)    set(gca,"FontSize",10,"LineWidth",1.5)    xlabel('true')    ylabel('predict')end/ T* K# t) n' e' c7 e/ }

    ) b& H6 n$ u% F5 T; o$ Z5 i4 I
    0 S4 \. o% h. [3 b9 Y2 B# W; W8 |7 g% D  u- G* H0 [( |& _

    # u0 A+ M* `9 b" n5 I/ [5 E5.误差雷达图
    8 u! g) k; q: e. ]

    prybb4g5e4c64027184915.png

    prybb4g5e4c64027184915.png

    4 @. B5 _( u6 [. bTips:为了让图片更美观将多个维度评价指标进行归一化处理了
      s  {4 Z1 T' ]* K% y$ @! ^
  • figure('Units', 'pixels', ...    'Position', [150 150 520 500]);Test_all1=Test_all./sum(Test_all);  %把各个指标归一化到一个量纲Test_all1(:,end)=1-Test_all(:,end);RC=radarChart(Test_all1);str3={'A-MAE','A-MAPE','A-MSE','A-RMSE','1-R2'};RC.PropName=str3;RC.ClassName=str1;RC=RC.draw(); RC.legend();colorList=[78 101 155;          138 140 191;          184 168 207;          231 188 198;          253 207 158;          239 164 132;          182 118 108]./255;for n=1:RC.ClassNum    RC.setPatchN(n,'Color',colorList(n,:),'MarkerFaceColor',colorList(n,:))end
    + ~5 \$ w5 ^8 s, W( N( A" D本图参考了公众号:slandarer随笔
    : c& t9 H2 f' a4 S1 V/ m7 `: Yhttps://mp.weixin.qq.com/s/8Lu7yBs3cLlZk9bPStdgUA
      e/ o% F0 P+ U1 Z3 P' u4 Z9 H0 O3 @! Q* V( b
    调用函数- ~$ ^0 F% i& Q# n0 @
  • classdef radarChart% @Author : slandarer% 公众号  : slandarer随笔% 知乎    : hikari+ x. i2 \6 g4 E6 Q8 @5 E
        properties        ax;arginList={'ClassName','PropName','Type'}        XData;RTick=[];RLim=[];SepList=[1,1.2,1.5,2,2.5,3,4,5,6,8]        Type='Line';        PropNum;ClassNum        ClassName={};        PropName={};
    8 o) R% r8 f* i5 f2 V, e        BC=[198,199,201;  38, 74, 96; 209, 80, 51; 241,174, 44; 12,13,15;            102,194,165; 252,140, 98; 142,160,204; 231,138,195;             166,217, 83; 255,217, 48; 229,196,148; 179,179,179]./255;( b5 r. o! W) g6 x
            % 句柄        ThetaTickHdl;RTickHdl;RLabelHdl;LgdHdl;PatchHdl;PropLabelHdl;BkgHdl    end1 ^3 O" A$ _% d# m7 G* q& b- H
        methods        function obj=radarChart(varargin)            if isa(varargin{1},'matlab.graphics.axis.Axes')                obj.ax=varargin{1};varargin(1)=[];            else                obj.ax=gca;            end            % 获取版本信息            tver=version('-release');            verMatlab=str2double(tver(1:4))+(abs(tver(5))-abs('a'))/2;            if verMatlab                hold on            else                hold(obj.ax,'on')            end# o; u; q$ x' P9 _# W$ F8 [* [
                obj.XData=varargin{1};varargin(1)=[];            obj.PropNum=size(obj.XData,2);            obj.ClassNum=size(obj.XData,1);            obj.RLim=[0,max(obj.XData,[],[1,2])];# E* S7 o0 N8 m& ~1 e, A
                % 获取其他信息            for i=1:2:(length(varargin)-1)                tid=ismember(obj.arginList,varargin{i});                if any(tid)                obj.(obj.arginList{tid})=varargin{i+1};                end            end            if isempty(obj.ClassName)                for i=1:obj.ClassNum                    obj.ClassName{i}=['class ',num2str(i)];                end            end            if isempty(obj.PropName)                for i=1:obj.PropNum                    obj.PropName{i}=['prop ',num2str(i)];                end            end            help radarChart        end
    & n, k9 z5 Y5 u# ^  j/ A+ l+ ^* k        function obj=draw(obj)            obj.ax.XLim=[-1,1];            obj.ax.YLim=[-1,1];            obj.ax.XTick=[];            obj.ax.YTick=[];            obj.ax.XColor='none';            obj.ax.YColor='none';            obj.ax.PlotBoxAspectRatio=[1,1,1];            % 绘制背景圆形            tt=linspace(0,2*pi,200);            obj.BkgHdl=fill(cos(tt),sin(tt),[252,252,252]./255,'EdgeColor',[200,200,200]./255,'LineWidth',1);            % 绘制Theta刻度线            tn=linspace(0,2*pi,obj.PropNum+1);tn=tn(1:end-1);            XTheta=[cos(tn);zeros([1,obj.PropNum]);nan([1,obj.PropNum])];            YTheta=[sin(tn);zeros([1,obj.PropNum]);nan([1,obj.PropNum])];            obj.ThetaTickHdl=plot(XTheta(:),YTheta(:),'Color',[200,200,200]./255,'LineWidth',1);            % 绘制R刻度线            if isempty(obj.RTick)                dr=diff(obj.RLim);                sepR=dr./3;                multiE=ceil(log(sepR)/log(10));                sepR=sepR.*10^(1-multiE);                sepR=obj.SepList(find(sepR
    # P/ \  F0 U$ e# p$ l                sepNum=floor(dr./sepR);                obj.RTick=obj.RLim(1)+(0:sepNum).*sepR;                if obj.RTick(end)~=obj.RLim(2)                    obj.RTick=[obj.RTick,obj.RLim];                end            end            obj.RLim(obj.RLim            obj.RLim(obj.RLim>obj.RLim(2))=[];  O4 ]+ l6 L, ~& T; ^3 w+ |. x$ L
                XR=cos(tt').*(obj.RTick-obj.RLim(1))./diff(obj.RLim);XR=[XR;nan([1,length(obj.RTick)])];            YR=sin(tt').*(obj.RTick-obj.RLim(1))./diff(obj.RLim);YR=[YR;nan([1,length(obj.RTick)])];            obj.RTickHdl=plot(XR(:),YR(:),'Color',[200,200,200]./255,'LineWidth',1.1,'LineStyle','--');7 q  f: g9 J; C( F) r& ~) _9 r- h, m
                % 绘制雷达图            for i=1:size(obj.XData,1)                XP=cos(tn).*(obj.XData(i,:)-obj.RLim(1))./diff(obj.RLim);                YP=sin(tn).*(obj.XData(i,:)-obj.RLim(1))./diff(obj.RLim);                switch obj.Type                    case 'Line'                        obj.PatchHdl(i)=plot([XP,XP(1)],[YP,YP(1)],...                            'Color',obj.BC(mod(i-1,size(obj.BC,1))+1,:),'Marker','o',...                            'LineWidth',1.8,'MarkerFaceColor',obj.BC(mod(i-1,size(obj.BC,1))+1,:));                    case 'Patch'                        obj.PatchHdl(i)=patch(XP,YP,obj.BC(mod(i-1,size(obj.BC,1))+1,:),...                            'EdgeColor',obj.BC(mod(i-1,size(obj.BC,1))+1,:),'FaceAlpha',.2,...                            'LineWidth',1.8);( g% i$ l1 N" |4 Q  h8 R4 \3 g
                    end            end' ^: p' x2 }  m, ^2 Y9 d
                % 绘制R标签文本            tnr=(tn(1)+tn(2))/2;            for i=1:length(obj.RTick)                obj.RLabelHdl(i)=text(cos(tnr).*(obj.RTick(i)-obj.RLim(1))./diff(obj.RLim),...                                      sin(tnr).*(obj.RTick(i)-obj.RLim(1))./diff(obj.RLim),...                                      sprintf('%.2f',obj.RTick(i)),'FontName','Arial','FontSize',11);            end
    $ ?+ W2 t  w+ F            % 绘制属性标签            for i=1:obj.PropNum                obj.PropLabelHdl(i)=text(cos(tn(i)).*1.1,sin(tn(i)).*1.1,obj.PropName{i},...                    'FontSize',12,'HorizontalAlignment','center');            end- F; U3 L  U# f) n' A' M; P
            end% =========================================================================        function obj=setBkg(obj,varargin)            set(obj.BkgHdl,varargin{:})        end2 q2 r1 [" h4 b
            % 绘制图例        function obj=legend(obj)            obj.LgdHdl=legend([obj.PatchHdl],obj.ClassName,'FontSize',12,'Location','best');        end        % 设置图例属性        function obj=setLegend(obj,varargin)            set(obj.LgdHdl,varargin{:})        end
    - ?5 T- W; W& i/ q/ L1 x: s$ L        % 设置标签        function obj=setPropLabel(obj,varargin)            for i=1:obj.PropNum                set(obj.PropLabelHdl(i),varargin{:})            end        end        function obj=setRLabel(obj,varargin)            for i=1:length(obj.RLabelHdl)                set(obj.RLabelHdl(i),varargin{:})            end        end
    5 M& {+ E! ^8 I* b, k4 W        % 设置轴        function obj=setRTick(obj,varargin)            set(obj.RTickHdl,varargin{:})        end        function obj=setThetaTick(obj,varargin)            set(obj.ThetaTickHdl,varargin{:})        end* r7 m+ u/ c' l( u  f+ ^/ e' w
            % 设置patch属性        function obj=setPatchN(obj,N,varargin)            set(obj.PatchHdl(N),varargin{:})        end    end% @author : slandarer% 公众号  : slandarer随笔% 知乎    : hikariend$ b. A# A2 d. c3 ?4 l: D$ F+ q

    7 x9 h: [- ~" I- B: b$ @: B
    " t5 S3 Z) \! n7 [4 D- I
    # m7 j4 f# ~( Q+ M
    : ]; s, Z' ?. o4 z- Z
    6.误差罗盘图+ R' F  ^) W( r6 H. r( f0 W

    ai2ahrdrxpb64027185015.png

    ai2ahrdrxpb64027185015.png
    " _5 w# X! Z, K( y5 |- a7 B
  • figure('Units', 'pixels', ...    'Position', [150 150 920 600]);t = tiledlayout('flow','TileSpacing','compact');for i=1:length(Test_all(:,1))nexttileth1 = linspace(2*pi/length(Test_all(:,1))/2,2*pi-2*pi/length(Test_all(:,1))/2,length(Test_all(:,1)));r1 = Test_all(:,i)';[u1,v1] = pol2cart(th1,r1);M=compass(u1,v1);for j=1:length(Test_all(:,1))    M(j).LineWidth = 2;    M(j).Color = colorList(j,:);
    2 e$ ~" W+ a$ a& R' N* Rend   title(str2{i})set(gca,"FontSize",10,"LineWidth",1)end legend(M,str1,"FontSize",10,"LineWidth",1,'Box','off','Location','southoutside')' P5 e' j5 }2 |: @) B3 P
    时序的和回归的算法比较也是类似的,【领取数据和代码方式】,在公众号【Lvy的口袋】(下方链接直接进行公众号)后台回复关键词【算法对比图】领取,还有什么比较合适的对比图可以私发小编看能不能复现奥~
    % W! ~! n7 h# W" g4 n8 n- e. [" ?, C. w. Y) w6 y
    9 @" \$ C& @" a# k7 [$ x# q
    9 B" P: w9 O0 {6 I: _2 R8 h
    ps.合适的绘图之后可能会更新到工具箱中,全家桶大力更新中~早上车早实惠" A: g: N; {. l( y8 a
    * f7 y. u  z5 w% j
    全家桶系列
    ( i+ h: n8 W3 U; V' L一键打包公众号过去和未来所有的作品~持续更新中获取方式】扫码获取或者点击链接/ S# R: F2 S. {9 D
    https://mbd.pub/o/bread/mbd-ZJabmJ9v, ?5 {& s/ C- j1 w

    2 a; {0 a+ b3 T# Y$ z9 d6 c9 \( Y( O' X2 [

    bai5peccupz64027185115.png

    bai5peccupz64027185115.png
    9 Q7 I) j8 \6 P" E" @
    8 S2 u. x* {* ?' Y! J; @/ c$ x/ W
    7 w7 m% i+ _  n9 x% G6 N

    0y4nitrnlkt64027185215.png

    0y4nitrnlkt64027185215.png
    3 F1 ]! Z8 j! S" p
    END) y$ j; n7 s1 s% n

    i5nyo4wgt0c64027185315.png

    i5nyo4wgt0c64027185315.png

    1 d) v7 j" e5 z6 U* T* ?/ h1 E1 H+ W
    # N; _* G/ E1 G* \) F$ y2 n" D

    ucgvtnyytvh64027185415.jpg

    ucgvtnyytvh64027185415.jpg

      I! h. z. Y1 n5 J# Q  ]" X长按二维码识别关注
    6 B4 h) j: q( j$ W# l3 C往期精彩回顾
    / w6 X5 E; t7 m$ k推荐 | 神器系列大更新!|一键实现百种高效算法|轻松解决评价、降维、聚类、回归、分类、时序预测、多输入多输出问题推荐 | 一句命令实现神经网络超参数优化推荐 | 四种降维方法及可视化      流2群【756559035】
  • 回复

    使用道具 举报

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则


    联系客服 关注微信 下载APP 返回顶部 返回列表