1

我有 2 列x,每列y100 分。我想删除异常值数据并用靠近它们的点的平均值来填补它们的空白。首先,我可以这样做吗?有任何Matlab函数吗?其次,如果是,那么最好的技术是什么?

例如:

x = 1:1:100
y = rand(1,99)
y(end+1)=2

在这种情况下,与我的问题不太相似,我想在最后删除值 2 并替换为与其相邻点相似的值。在我的情况下, 的分布[x,y]是一个非线性函数,几乎没有异常值。

4

1 回答 1

1

这取决于你所说的异常值是什么意思。例如,如果您假设离群值与中位数的标准差超过三个标准差,您可以这样做

all_idx = 1:length(x)
outlier_idx = abs(x - median(x)) > 3*std(x) | abs(y - median(y)) > 3*std(y) % Find outlier idx
x(outlier_idx) = interp1(all_idx(~outlier_idx), x(~outlier_idx), all_idx(outlier_idx)) % Linearly interpolate over outlier idx for x
y(outlier_idx) = interp1(all_idx(~outlier_idx), y(~outlier_idx), all_idx(outlier_idx)) % Do the same thing for y

此代码将仅删除异常值并使用非异常值的最接近值对其位置进行线性插值。

于 2013-11-22T18:05:54.497 回答