![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Фильтрация массива чисел от шума
abun © (2009-08-10 16:10:00)Есть упорядоченный массив чисел типа real. Нужно отфильтровать явно "левые" числа (т.е. видно, что они совсем другой величины). Длина массива не более 1000.
Пример массива:
90,100,2100,2120,2130,2135,2140,2160,2200,2300,2500,3500,4000,100000.
Результатом работы фильтра должно исключение из списка чисел 90, 100 и 100000. "Неправильных" чисел не может быть в массиве много. Точное количество их не указать. Но если очень принципиально, то пусть будет ограничение: не более 4-х.
Казалось бы, задача элементарная. Опробовал: входит ли в интервал
[матожидание*0,8..матожидание*1,2] (0,8 и 1,2 - т.е. -20 и +20% иначе говоря) - не помогает, т.к. матожидание серьезно искажается этими "неправильными" числами и выпадают правильные.
Пробовал и через среднее по разнице между соседними элементами.
Тогда 2 и более соседних "неправильных" чисел прикрывают друг дружку.
Такое ощущение, что задача вообще нерешаема строгим алгоритмом.
abun (2009-08-10 20:52:00) [21]Надо было корень здесь:
S - СКО = sqrt(sum(X[i] - Xav)^2/(N-1))
abun (2009-08-10 20:13:00) [22]что-то не хочет со стьюдентом совсем фильтровать... :(
может, че не так я понял
KilkennyCat (2009-08-10 20:00:00) [23]не выйдет. Пример 98-года, когда курс изменился в разы.
abun (2009-08-10 19:51:00) [24]Да тут не сигнал - тут просто список курсов валют. И эти курсы иногда с ошибками - хотелось бы их фильтровать в автоматическом режиме.
Jeer (2009-08-10 18:13:00) [25]Многое зависит от распределения чисел с которыми Вы работаете.
Если все это дело укладывается в нормальное распределение, то применимы хорошо себя зарекомендовавшие традиционные методы отбраковки ( Стьюдент и пр ).
Более робастная (устойчивая) оценка аномалий может быть сделана через медианную фильтрацию ( см. [[7] ), но работать надо не с самими числами, а, например, с той же относительной оценкой, что и в [8]
Ну и еще не мешало бы модель сигнала знать :)
abun (2009-08-10 17:57:00) [26]
> Если совсем просто, тоt1 = abs( X[i] - Xav)/S <= t2X[i]
> - проверяемый элементXav - среднее значениеS - СКО = sum(X[i]
> - Xav)^2/(N-1)t2 - квантиль распределения статистики t при
> уровне значимости pОбычно используют уровень значимости
> p=0.05 ( 95% доверительная вероятность )При N=25, t2 = 2.
> 72 для p= 0.05Если t1 <= t2, то элемент не отсеивают.После
> каждого отсева перевычисляют Xav и S
:) не поверите, но я уже экспериментальным путем начал выходить на что-то подобное!
Jeer (2009-08-10 17:38:00) [27]Если совсем просто, то
t1 = abs( X[i] - Xav)/S <= t2
X[i] - проверяемый элемент
Xav - среднее значение
S - СКО = sum(X[i] - Xav)^2/(N-1)
t2 - квантиль распределения статистики t при уровне значимости p
Обычно используют уровень значимости p=0.05 ( 95% доверительная вероятность )
При N=25, t2 = 2.72 для p= 0.05
Если t1 <= t2, то элемент не отсеивают.
После каждого отсева перевычисляют Xav и S
Smile (2009-08-10 17:36:00) [28]Отранжируй во временную переменную и отруби (по какой-нибудь дельте) "лишние" концы.
Затем "выкарябай" эти концы из своего упорядоченного массива
:)
Jeer (2009-08-10 17:16:00) [29]Почитать соответствующие книжки по мат.статистике и обработке данных.
Для отсева грубых погрешностей при указанном числе измерений можно рекомендовать использование критерия Стьюдента.
СКО, сплайны, фильтры - это из другой оперы.
abun (2009-08-10 17:15:00) [30]
> Среднеквадратичное отклонение попробуйте.
Я ж говорю, пробовал СКО. Ерунда получается - т.к. удаляется только 1 число за проход. Ну разве что попробую зациклить процесс фильтрации до тех пор, пока число удаленных не будет 0.
KilkennyCat (2009-08-10 17:01:00) [31]
> sniknik © (10.08.09 16:51) [3]
1,2,3,4,5,6,7,8,9,10,11,12...
sniknik (2009-08-10 16:51:00) [32]считаешь количество "длинн" чисел, т.е. Length(IntToStr(n[i])) каких больше те потом и оставляешь...
для "совсем другой величины"/т.е. порядка сойдет.
Kolan (2009-08-10 16:33:00) [33]Еще есть фильтрация. Есть прямо готовые фильтры, оконные функции и т. п.
Kolan (2009-08-10 16:32:00) [34]Среднеквадратичное отклонение попробуйте.
Вообще мат теории на это счет полно, сплайны там всякие и пр.