【发布时间】:2016-08-23 23:24:04
【问题描述】:
我有一个数组如下:
var myArray = [3, 6, 8, 9, 16, 17, 19, 37]
我需要删除异常值并将剩余数据分组到出现的任何独特组中。在这种情况下,37 将作为异常值删除,[3, 6, 8, 9] 将作为第一组返回,[16, 17, 19] 作为第二组返回。
这是第二个例子
var mySecondArray = [80, 90, 100, 200, 280, 281, 287, 500, 510, 520, 800]
200 和 800 将作为异常值被删除,[80, 90, 100] 将是第一组,[280, 281, 287] 将是第二组,[500, 510, 520] 作为第三组。
我已经编写了用于移除外部异常值的代码,这很简单,使用第一和第三四分位数。换句话说,将800 作为异常值从mySecondArray 中删除是没有问题的。但它不会将 280 作为异常值删除。
我认为异常值可以定义为成员少于n 的组,所以真正的问题是将这些数据分成适当数量的组的有效方法是什么 ?
非常感谢任何帮助!
【问题讨论】:
-
您可能正在寻找K-means clustering
-
你的
n == 10在这里吗? -
不,如果
n是 10,那么在我的示例中一切都是异常值 :)n在我的示例中可能是 3。换句话说,包含 2 个或更少项目的组是异常值。 -
@KyleFalconer 感谢您向我指出这一点 - K-means 看起来很像我正在寻找的东西。唯一的问题是,对于给定的实现,您必须指定要退出的组数以及它们之间的距离。有没有办法让它根据现有的数据为您检测到这一点?
-
通常异常值是大于 Q3 + 1.5 IQR 或低于 Q1 - 1.5 IQR 的点。我不明白你想如何确定组。
标签: javascript arrays outliers