我有2列x
,y
,每行100分。我想删除异常值数据并用它们附近的点的平均值重新填充它们的差距。首先,我可以这样做吗?是任何Matlab函数?其次,如果是的话,最好的技术是什么?
E.g:
x = 1:1:100
y = rand(1,99)
y(end+1)=2
在这种情况下,与我的问题不太相似,我想在结尾删除值2,并替换为与其邻居点类似的值。在我的例子中,[x,y]
的分布是非线性函数,几乎没有异常值。
答案 0 :(得分: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
此代码将删除异常值,并使用不是异常值的最接近值对其位置进行线性插值。