我一直在使用这个 Stackoverflow answer从数据集中删除异常值到 1 的量级。
这对于删除大数字非常有用,但它不会删除较低的异常值。
例如,来自以下数据集:(0, 1, 344, 345, 10000)
当我希望删除它们时,它会保留 0, 1
。
我如何编辑上面链接的答案中的代码以删除较低的异常值?
最佳答案
问题是,您只有很少的数字和非常高的标准偏差(平均值:2138,标准偏差:大约 4400)。
您可以调整大小,但这似乎不是一个好的解决方案。我认为最好在您的情况下使用 median (请参阅此处如何实现该功能: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);
}
关于php - 在 PHP 中删除较低的离群值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38203665/