首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在MATLAB中计算MAPE和DS

如何在MATLAB中计算MAPE和DS
EN

Stack Overflow用户
提问于 2016-10-10 15:58:59
回答 1查看 1.6K关注 0票数 0

我正在使用fitrsvm作为默认、交叉验证和KFold验证。

代码语言:javascript
运行
复制
%%In sample validation.
rng default ;
mdl = fitrsvm(X,Y, 'Standardize',true);
loss =  resubLoss(mdl)
%% out of sample validation with 80% traning and 20% validation    
CVmdl = crossval(mdl,'Holdout',0.2);
CVloss = kfoldLoss(CVmdl)
%% 10Fold Cross Validation Model
KFmdl = crossval(mdl);
KFloss = kfoldLoss(KFmdl)

我需要计算这些模型的MAPE和方向对称性(DS)。在Matlab中是否有内置函数(如loss或KfoldLoss)?还是我需要将这些实现为一个函数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-12 02:49:03

在这里,我实现了方向对称(DS)和平均绝对百分比误差(MAPE)作为函数。

代码语言:javascript
运行
复制
function mape( Y, Ypredict, indxtest)
smape = 0;

    if isempty(indxtest)
        for i = 1 :length(Y)
           smape = smape + (abs((Ypredict(i) - Y(i))) / Y(i));
        end
    else
        j = find(indxtest); 
        for i = 1 :length(j)
           smape = smape + (abs((Ypredict(i) - Y(j(i)))) / Y((j(i))));
        end   
    end

mape = smape * 100/length(Y)
end
-------------------------------------------------------
function ds( Y, Ypredict, indxtest)
sds = 0;
if isempty(indxtest)
   for i = 2 :length(Y)
      if (((Y(i)-Y(i-1))*(Ypredict(i)-Ypredict(i-1))) > 0)
         sds = sds + 1;
      end
   end
else
   j = find(indxtest);   
   for i = 2 :length(j)
       if (((Y(j(i))-Y(j(i-1)))*(Ypredict((i))-Ypredict(i-1))) > 0)
           sds = sds + 1;
       end
   end
end
ds = sds * 100/length(j)
end

虽然这对我来说很好,但是如果有人能帮我改进它,要么尽量减少线路数量,要么提高效率,我会很感激。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39962191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档