2016-10-10 176 views
0

我在默認情況下使用了fitrsvm,交叉驗證和KFold驗證。如何在MATLAB中計算MAPE和DS

%%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中是否有內建函數(如損失或KfoldLoss)?或者我需要實現這些功能?

+0

你能告訴我關閉的原因,以便我可以避免它的未來? – Abrar

回答

0

在這裏我實現了兩個方向對稱(DS)和平均絕對誤差百分比(MAPE)作爲功能

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 

雖然這個工作對我很好,但如果有人可以幫助我要麼提高它我會很高興最大限度地減少線路數量或提高效率。