在PHP中删除较低的异常值

时间:2016-07-05 12:36:55

标签: php algorithm outliers

我一直在使用此Stackoverflow answer将数据集中的异常值移除到1级。

这对于删除大数字很有用,但它不会删除较低的异常值。

例如,从以下数据集中(0, 1, 344, 345, 10000),当我删除它时,它会保留0, 1

如何编辑上述链接答案中的代码以删除较低的异常值?

1 个答案:

答案 0 :(得分:0)

问题是,你只有很少的数字和非常高的标准偏差(平均值:2138,标准差:约4400)。

您可以调整幅度,但这似乎不是一个好的解决方案。我认为在您的情况下使用中位数是最好的(请参阅此处如何实现该功能:https://codereview.stackexchange.com/a/223)。简单地说:中位数是中间值。

所以你的功能看起来像这样:

function removeOutliers($arr, $alpha = 0.8, $beta = 1.2) {
  $median = array_median($arr);
  // assuming the array is sorted after median calculation
  $bound = $median * $alpha;
  $lower = 0;
  while ($arr[$lower] < $bound)
    $lower++;
  $bound = $median * $beta;
  $upper = count($arr) - 1;
  while ($arr[$upper] > $bound)
    $upper--;
  return array_slice($arr, $lower, $upper - $lower + 1);
}