【问题标题】:Matlab best technique to remove outliers in dataMatlab去除数据中异常值的最佳技术
【发布时间】:2013-11-22 17:34:14
【问题描述】:

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

例如:

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

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

【问题讨论】:

标签: matlab outliers nonlinear-functions nonlinear-optimization


【解决方案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

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

【讨论】:

  • 是的,我的异常值与中位数的偏差超过三个。谢谢!
  • 我试过了,有点乱!我希望向您展示 matlab 数字以查看结果。
  • @user1640255,当然,您可以发布或发送您的结果。您还可以将interp1 与“pchip”或“spline”插值方法一起使用,这可能会给您带来更美观(但不一定更“正确”)的结果。
猜你喜欢
  • 1970-01-01
  • 2019-12-25
  • 1970-01-01
  • 1970-01-01
  • 2017-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-25
相关资源
最近更新 更多