我一直在使用此Stackoverflow answer将数据集中的异常值移除到1级。
这对于删除大数字很有用,但它不会删除较低的异常值。
例如,从以下数据集中(0, 1, 344, 345, 10000)
,当我删除它时,它会保留0, 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);
}