在matlab中的MAPE计算中排除0

时间:2017-01-13 00:24:05

标签: matlab math

我有两个时间序列。一个是预测的,一个是原始的。为了计算预测精度,我想计算MAPE(平均绝对百分比误差)。

平均绝对百分比误差(MAPE),也称为平均绝对百分比偏差(MAPD),是统计中预测方法的预测准确度的度量,例如在趋势估计中。它通常以百分比表示准确度,并由公式定义:

formula for MAPE calculation

我在MATLAB中这样做如下:

function m = mape(testY, pred)
% Compute mean absolute percent error
%
% m = mape(actual, pred)
%
% actual is a column vector of actual values
% pred is a matrix of predictions (one per column)
%
% m is the mean absolute percent error (ignoring NaNs) for each column of
% pred. 


err = abs(bsxfun(@minus, pred, testY));
pcterr = bsxfun(@rdivide, err, testY);
m = nanmean(pcterr,1);
end

但是当Actual系列中有0时,函数会在结果中返回-INF。

我想在其他序列中排除0和相应的值并计算MAPE值。

1 个答案:

答案 0 :(得分:1)

您可以在nanmean中使用逻辑索引来排除testY

中的零值
m = nanmean(pcterr(testY~=0),1);