電子產(chǎn)業(yè)一站式賦能平臺(tái)

PCB聯(lián)盟網(wǎng)

搜索
查看: 23|回復(fù): 0
收起左側(cè)

【算法對(duì)比圖】回歸、時(shí)序預(yù)測(cè)的多算法對(duì)比圖

[復(fù)制鏈接]

229

主題

229

帖子

1273

積分

三級(jí)會(huì)員

Rank: 3Rank: 3

積分
1273
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2023-12-21 22:21:00 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式

6 a7 ^) U0 E" w5 j. I8 x點(diǎn)擊上方藍(lán)字關(guān)注我們9 T9 D0 {4 g; D1 [$ s$ c( g

4 G6 v2 g; l1 ]- i" J   注明:此推文來(lái)自公眾號(hào)Lvy的口袋,歡迎大家關(guān)注Lvy小姐姐公眾號(hào)~    多種算法對(duì)比圖是常用的科研繪圖,你知道幾種合適的繪圖樣式呢?! Q2 f& H' [, e3 N; u
1 N/ k. R+ f4 X1 M7 m
' O: b5 Y$ ~; I1 U# a8 V5 L' h

5 q6 m6 o4 P$ S% v- l+ s  ^
1 `/ t9 e) I+ Y& K- z$ h' ?
1.真實(shí)值和預(yù)測(cè)值展示圖, q; M4 k8 J7 I7 m! S

" ^9 W" }5 D; f% Y5 Q; V
4 R6 `0 f7 L+ N- s0 m5 e. L, oTips:數(shù)據(jù)比較多、算法多的適合比較難看出實(shí)際的效果/ t9 J, ?0 `5 Z+ b' k4 ~
數(shù)據(jù)就是各個(gè)算法預(yù)測(cè)值和真實(shí)值數(shù)據(jù)(工具箱直接導(dǎo)出)
# l8 {4 w, \4 W: \" ?: H
  • data_pre_all=[]; %記錄預(yù)測(cè)數(shù)據(jù)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麻雀搜索算法 隨機(jī)森林回歸  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={'真實(shí)值','多元線性回歸','SSA麻雀搜索算法 隨機(jī)森林回歸','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
    * J% E/ |1 K$ ~) W- ^
    2 \3 G5 o, m; C! E1 d+ }9 O
    1 l/ z8 R, _$ k9 f+ ?* J
    8 F) _  e  U: o9 \2.誤差柱狀對(duì)比圖1 d, u: u) ?* X6 A' p: j

    8 M& g8 c# B1 |3 N: {5 aTips:建議選取量綱差別不大的誤差衡量指標(biāo),不然可能會(huì)有點(diǎn)丑
    ! J! {$ {7 p$ l4 g) n: l" \
  • 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={'真實(shí)值','多元線性回歸','SSA麻雀搜索算法 隨機(jī)森林回歸','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# N  a3 x2 ^, R" s8 ?
    for i = 1 : size(plot_data_t,2)    x_data(:, i) = b(i).XEndPoints'; end1 N6 z. D; m/ G1 S) H" R
    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;end
    5 B% C  _1 ^2 d6 ?1 x( x' ^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 : s" ?7 ?9 G5 a" j! P
    ax=gca;legend(b,str1,'Location','best')ax.XTickLabels ={'MAE', 'MAPE', 'RMSE'};set(gca,"FontSize",12,"LineWidth",2)box offlegend box off9 s8 t9 z- X$ ?: z1 M3 p0 U
    " ?: u: F2 g: F# I5 u

    1 \1 Y9 @7 y2 G# F4 X! n. l  M# L# ~& `% ?6 Q
    : L2 Z, [7 \" Z2 l& B6 Y# T
    3.誤差散點(diǎn)對(duì)比圖: L9 G! B# C0 q5 P; e3 D

    ( y, w5 X$ Y2 j' [Tips:可以任意選擇兩個(gè)誤差衡量維度( Z4 R+ k/ _( r
  • 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 on
    3 \. e) Q8 H6 o
    * x9 h. [0 R: F& a$ A( s# y# m
    0 l) X. d2 c, Y8 T) o* y+ [) g

    6 v9 Q4 m, o6 E) B6 |4.誤差密度散點(diǎn)圖
    * h3 Q7 p8 y* q0 ]$ |6 P
    0 X+ w7 d0 f; h% l" Y8 l. W$ v4 I9 ~1 _) o# E: |5 E
  • 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
    ; y- E- E& K, G( i# [# H; J; _$ {2 F- V7 k  ]: L$ p- y* Q
    8 W  s3 {; S7 }4 P( T4 N, P1 X
    ; h; s- I0 w+ ~( w9 p( d

    0 g4 k2 F8 \) l5 n7 d; N# s5.誤差雷達(dá)圖" b9 s$ l" I5 a

    6 L5 }1 L% E9 P% V5 l- B0 ATips:為了讓圖片更美觀將多個(gè)維度評(píng)價(jià)指標(biāo)進(jìn)行歸一化處理了; x# [) I0 E% b+ k+ B% x
  • figure('Units', 'pixels', ...    'Position', [150 150 520 500]);Test_all1=Test_all./sum(Test_all);  %把各個(gè)指標(biāo)歸一化到一個(gè)量綱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 _6 I) r7 s9 Q本圖參考了公眾號(hào):slandarer隨筆
    4 B1 l% q( F7 [, }" d. s; t/ {https://mp.weixin.qq.com/s/8Lu7yBs3cLlZk9bPStdgUA
    , X* K# ]! C$ b+ w. I1 w3 l6 X% W* ?$ O( n. a
    調(diào)用函數(shù)
    " k% d$ Z0 S- r1 _
  • classdef radarChart% @Author : slandarer% 公眾號(hào)  : slandarer隨筆% 知乎    : hikari  T& ]4 w1 q4 h" o, g. d
        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={};& z& I. P9 W3 t# n# B
            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;! i& k2 C# r( f' @
            % 句柄        ThetaTickHdl;RTickHdl;RLabelHdl;LgdHdl;PatchHdl;PropLabelHdl;BkgHdl    end
    # p7 [5 y0 V2 ?+ A$ ^2 ]8 r5 ^    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
    5 @; Z" U8 b& X, _            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])];
    # c1 N1 L, t6 N            % 獲取其他信息            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        end5 C% t* c! O- ?. {* f6 E; ~
            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(sepR0 a+ r+ v: n! v8 J" ~/ U
                    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))=[];
    * V' J8 j2 X* ^8 R: m' D/ H            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','--');
    9 d' Q2 F; _! D0 R! F0 c" g$ f+ G( ~            % 繪制雷達(dá)圖            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);+ X" Q/ j7 m- M, w6 r
                    end            end
    " m* d& T* E0 I. D! Y- j4 h9 X            % 繪制R標(biāo)簽文本            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
    ) D& I0 [9 B6 r$ K* C3 b            % 繪制屬性標(biāo)簽            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
    ) B% E% _0 j- d: V5 a5 l        end% =========================================================================        function obj=setBkg(obj,varargin)            set(obj.BkgHdl,varargin{:})        end
    / I4 Q( V: |3 f" y        % 繪制圖例        function obj=legend(obj)            obj.LgdHdl=legend([obj.PatchHdl],obj.ClassName,'FontSize',12,'Location','best');        end        % 設(shè)置圖例屬性        function obj=setLegend(obj,varargin)            set(obj.LgdHdl,varargin{:})        end& n" Q8 F3 I8 W3 W3 _
            % 設(shè)置標(biāo)簽        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# m4 o6 m  I. a/ y$ U7 }! N- U# S9 c
            % 設(shè)置軸        function obj=setRTick(obj,varargin)            set(obj.RTickHdl,varargin{:})        end        function obj=setThetaTick(obj,varargin)            set(obj.ThetaTickHdl,varargin{:})        end
    % [# d9 M1 ]; S        % 設(shè)置patch屬性        function obj=setPatchN(obj,N,varargin)            set(obj.PatchHdl(N),varargin{:})        end    end% @author : slandarer% 公眾號(hào)  : slandarer隨筆% 知乎    : hikariend) s5 G5 p) T# R' m3 S

    9 X( K" ?# {% @/ ?9 P& i

    3 i$ Y5 Z5 t% ~" ~- a" r; r8 q; j9 h0 o* y, Y
      }4 N0 V0 f5 C
    6.誤差羅盤圖% f' f  L( u5 l
    , ^$ u3 ^1 G% n+ }# @: \6 [4 a% W
  • 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,:);0 j! c9 u0 W4 y. z, t9 d- {
    end   title(str2{i})set(gca,"FontSize",10,"LineWidth",1)end legend(M,str1,"FontSize",10,"LineWidth",1,'Box','off','Location','southoutside')
    4 L. o* ?. Q+ o4 D1 G% j: ~時(shí)序的和回歸的算法比較也是類似的,【領(lǐng)取數(shù)據(jù)和代碼方式】,在公眾號(hào)【Lvy的口袋】(下方鏈接直接進(jìn)行公眾號(hào))后臺(tái)回復(fù)關(guān)鍵詞【算法對(duì)比圖】領(lǐng)取,還有什么比較合適的對(duì)比圖可以私發(fā)小編看能不能復(fù)現(xiàn)奧~
    + ]( j5 t0 h" f7 k
    & l, Q# b3 G8 {: x  x
    - Y" I9 h" U6 p# u" _0 ~1 }
    & P4 }% \3 E3 r. Y8 aps.合適的繪圖之后可能會(huì)更新到工具箱中,全家桶大力更新中~早上車早實(shí)惠
    3 r# n; _+ F8 J  a4 l5 ~$ B$ x$ X/ ?, D( v$ W
    全家桶系列: ]* z" l1 w2 `( M% b
    一鍵打包公眾號(hào)過(guò)去和未來(lái)所有的作品~持續(xù)更新中獲取方式】掃碼獲取或者點(diǎn)擊鏈接
    5 S0 P9 z& V  }* Phttps://mbd.pub/o/bread/mbd-ZJabmJ9v
    / z( B0 j; k  C; J, g
    6 M* |' R6 U  p! `% I8 {% p& M
    2 Y4 }8 M* U$ E% E6 i! e
    . Q" D3 k4 s5 m: k& K& u
    $ H9 J( C& ?: q7 Y

    6 z) o! n! v2 }0 qEND# {; H6 d( D+ Z8 D$ N

    6 |" E2 Y4 \5 p: u) E
    9 `  k# O! G1 q, _5 W# U$ H) M! y( \( y( g3 y+ Y

    - C7 c  O  L2 O6 \( T1 }; B  r長(zhǎng)按二維碼識(shí)別關(guān)注5 ^3 ^& A" C7 E3 N' q: i, G  l
    往期精彩回顧
    6 b8 C/ |' n8 M1 `1 D: i推薦 | 神器系列大更新!|一鍵實(shí)現(xiàn)百種高效算法|輕松解決評(píng)價(jià)、降維、聚類、回歸、分類、時(shí)序預(yù)測(cè)、多輸入多輸出問(wèn)題推薦 | 一句命令實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)超參數(shù)優(yōu)化推薦 | 四種降維方法及可視化      流2群【756559035】
  • 發(fā)表回復(fù)

    本版積分規(guī)則


    聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表