Алгоритм удаления шипов - PullRequest
3 голосов
/ 24 мая 2011

У меня есть массив значений в диапазоне от 30 до 300. Я хочу как-то сделать средневзвешенное значение, где, если у меня есть 5 значений, и одно намного больше остальных (шип), это не повлияет наусредните это так же, как если бы я просто сделал среднее арифметическое: например: (n1+n2+n3+n4+n5)/5.

У кого-нибудь есть идеи, как создать простой алгоритм, который делает именно это, или где искать?

Ответы [ 6 ]

5 голосов
/ 24 мая 2011

Похоже, вы хотите отбросить данные, которые выходят за пределы указанного вами диапазона параметров.Вы можете сделать это, вычисляя медиану / режим и игнорируя значения вне этого диапазона при вычислении среднего значения.Разумеется, вам придется соответствующим образом настроить делитель, чтобы учесть количество отброшенных значений.Какой должен быть этот «допустимый» диапазон, в конечном итоге решать вам, и, вероятно, будет зависеть от ваших конкретных потребностей приложения.

В качестве альтернативы, вы можете попробовать что-то вроде удаления элементов r% из диапазона вашего среднего значения,Как то так (в javascript):

function RangedAverage(arr, r)
{
    x = Average(arr);
    //now eliminate items r% out of range
    for(var i=0; i<arr.length; i++)
        if(arr[i] < (x/r) || arr[i]>(x*(1+r)))
            arr.splice(i,1);
    x = Average(arr); //compute new average
    return x;
}
3 голосов
/ 24 мая 2011

Вы можете попробовать медианный фильтр вместо среднего фильтра . Он часто используется в обработке изображений для уменьшения значений побочных пикселей (в отличие от белого шума).

1 голос
/ 24 мая 2011

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

это должен быть комментарий, но js кажется сломанным для меня, атм: не совсем ясно, что вы после единственного числа, котороеявляется характеристикой вашего массива (то есть среднего значения) или нового массива с удаленными шипами (медианный фильтр)

в ответ на это, тогда я бы посоветовал вам сначала посмотреть, является ли медиана или режим более подходящимстатистики.если нет, тогда примените медианный фильтр (очень хорошо удаляет шипы), тогда в среднем

0 голосов
/ 25 мая 2011

«Надежная статистика» - это поисковый термин, который поможет вам проникнуть в литературу. Преимущество фильтра Калмана состоит в том, что у вас есть текущая оценка изменчивости данных, и это позволяет вам в конечном итоге «отбросить наблюдения, которые с вероятностью более чем на x% могут быть ложными, учитывая весь набор наблюдений до настоящего времени».

0 голосов
/ 24 мая 2011

Множество способов сделать это: Вы можете реализовать цифровой фильтр нижних частот .

Или, если вы просто заинтересованы в удалении выбросов из статистической сводки, вы можете просто удалить самое высокое и самое низкое N% ваших значений данных из набора данных перед усреднением.

0 голосов
/ 24 мая 2011

A Фильтр Калмана часто используется в подобных приложениях.Я не знаю, квалифицируется ли он как «простой», но он надежен и хорошо известен.

...