2016-10-10 9 views
0

Ich benutze fitrsvm mit Standard, Kreuz-Validierung und KFold-Validierungen.Wie berechnet man MAPE und DS in MATLAB

%%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) 

Ich muss die MAPE und direktionale Symmetrie (DS) für diese Modelle berechnen. Gibt es eine eingebaute Funktion (wie Verlust oder KfoldLoss) in Matlab? Oder muss ich diese als Funktionen implementieren?

+0

Können Sie mir bitte den Grund für down sagen, damit ich es zukünftig vermeiden kann? – Abrar

Antwort

0

Hier implementiert ich sowohl die Richtungs Symmetry (DS) und Mittlerer absoluter Fehler in Prozent (MAPE) als Funktionen

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 

Obwohl dies funktioniert gut für mich, aber ich werde es begrüßen, wenn jemand hilft mir, um es zu verbessern entweder Minimierung der Anzahl der Linien oder Erhöhung der Effizienz.