алгоритм — устранение нижних выбросов в переполнении стека

Я использовал это Stackoverflow ответ удалить выбросы из набора данных до величины 1.

Это прекрасно работает для удаления больших чисел, но не удаляет нижние выбросы.

Например, из следующего набора данных: (0, 1, 344, 345, 10000) это будет держать 0, 1 когда я хотел бы их удалить.

Как я могу отредактировать код из приведенного выше связанного ответа, чтобы удалить и нижние выбросы?

2

Решение

Проблема в том, что у вас очень мало номеров и очень высокое стандартное отклонение (среднее значение: 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);
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]