【问题标题】:Remove outliers from mostly linearly incrementing array从大多数线性递增数组中删除异常值
【发布时间】:2019-09-11 11:02:37
【问题描述】:

给定一个应该线性递增的数组,但是

  • 可能缺少一些数字并且
  • 可能会输入一些意想不到的数字,

您将如何构建一个算法来从数组中删除所有异常值?

可能的数组示例:

1,2,3,4,1,1,1,100,5,6,7

1,2,4,100,5,6,7

1,2,4,100,101,5,6,7,300

2,3,4,5,6,7,300

在上述所有示例中,您应该能够知道数组应该是 1-7 还是 2-7。

一些现实生活中的示例数组:

1、2、295、296、297、4、5、6、8、9、10、11、12、13、6、6、6、6、6、6、6、6、6、6 , 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6 , 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 6, 6, 6, 6, 5, 5, 6, 6, 6, 6, 6, 4, 6 , 6, 3, 4, 6, 6, 6, 5, 6, 6, 6, 4, 5, 6, 3, 6, 6, 6, 6, 6, 6, 6, 5, 6, 6, 6 , 6, 6, 4, 6, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 4, 6, 6, 6, 6, 6 , 6, 5, 6, 6, 6, 3, 3, 6, 6, 6, 3, 6, 6, 4, 4, 6, 6, 6, 6, 6, 3, 6, 6, 6, 3 , 6, 4, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3 , 6, 6, 3, 6, 6, 6, 6, 6, 6, 5, 6, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6 , 6, 6, 6, 6, 3, 6, 6, 6, 6, 6, 6, 15, 18, 20, 21, 22, 23, 24, 27, 28, 30, 31, 32, 33, 34 , 35, 36, 37

1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17、18、19、20、21、26、712、383 , 114, 118, 225, 304, 323, 349, 357, 550, 556, 590, 649, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41 , 42, 43, 44, 45, 46, 47, 48, 49, 51

我想出的一个解决方案是过滤掉所有大于 N (=5?) 大于前一个有效值的值,以及所有小于前一个有效值的值。

const filterOutliers = (someArray) => {
  let previousValidValue = null;
  return someArray.filter((x, index) => {
    //Assume the first value is valid - although this assumption might not always be true.
    if(!previousValidValue) {
      previousValidValue = x;
      return true;
    }
    // if the number is less than the previous valid value, remove it
    if(x < previousValidValue) {
      return false;
    }
    // if the number is more than 5 greater than the last valid value, remove it
    if(x > previousValidValue + 5) {
      return false;
    }
    previousValidValue = x;
    return true;
  })
}

潜在相关链接:Javascript: remove outlier from an array?

【问题讨论】:

  • 这些工作的基本方法是生成一个简单的线性回归线方程(因为你说的主要是线性的),然后通过你的增量值消除偏离线方程的那些(离群值)选择。 Here is a good tutorial on generating the linear regression line equation
  • @Redu:最小二乘的标准线性回归对异常值非常敏感。这不适用于给定的数据集。

标签: arrays algorithm sorting filtering outliers


【解决方案1】:

您的内部数据值似乎确实有一个恒定的增量。所以计算增量,采用模式并保持跟随这个增量的值序列(到一个合适的容差)。

【讨论】:

  • 我不太明白你的意思。 “计算增量”是什么意思?
猜你喜欢
  • 1970-01-01
  • 2020-08-28
  • 2023-03-05
  • 1970-01-01
  • 2016-08-20
  • 2017-04-24
  • 2018-07-29
  • 1970-01-01
  • 2016-06-15
相关资源
最近更新 更多