Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Статистические фильтры  (Прочитано 11757 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« : 09-02-2007 10:55 » 

Положим, имеется последовательность случайных отсчётов времени t1, t2, ..., tn. n ~ 10000. Отсчёты времени случайны в том смысле, что dt = ti+1 - ti, i = 1, 2, ..., n-1 есть случайная величина.

Про dt известно, что часто, но не всегда чередуются относительно малые и относительно большие значения. Например: 5 cек., 2400 сек., 3 сек., 1728 сек. Периодически случаются интервалы, на которых dt много раз подряд принимает относительно малые значения. Периодически попадаются очень большие значения dt ~ 100000 сек.

Требуется на этой последовательности статистически определить какие-то усреднённые значения, которые принять за норму, и отсеять всё, что этой норме не соответствует. А именно:
1) Отсеять очень большие значения dt.
2) Определить и отсеять подпоследовательности dt, на которых частота (или плотность) малых значений dt выше нормальной.

По 1-му вопросу всё достаточно просто. Считается среднее dt (Mdt) и стандартное отклонение dt (Sdt). Всякое dti > Mdt + Sdt считается очень большим и отсеивается.

А вот по 2-му вопросу пока непонятно. Мысли, конечно, есть. Но всё пока выходят тупиковые - не буду писать и тем направлять читателей. По вопросу нужно определить и некую меру нормальности и метод нахождения границ искомых подпоследовательностей.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 10-02-2007 05:03 » 

По 2-му вопросу пока решили следующее.

Скользить вдоль t окном шириной Mdt и на каждом шаге считать количество точек, попавших в окно. Так получается распределение частоты f точек вдоль t. На этой последовательности, в свою очередь, считать среднее Mf и стандартное отклонение Sf.

Экспериментальная проверка показывает, что метод вроде бы нормальный, поскольку Mf оказывается близко к 1, что означает 1 точку на средний интервал между вводом точек - т.е. соответствует Mdt.

Затем отсеиваются все точки, для которых в окне частота fj, j = 1, 2, ... выше Mf + Sf.

Экспериментальная проверка показала, что в общем и целом отсеивается то, что нужно. Однако имеются и погрешности, возникающие из-за использования окон. Например при пороге частоты в 5 точек/час при среднем интервале в 30 минут может быть отсеяна последовательность: 1700, 5, 3, 7, 4, 5, 2, 1698. В ней крайние точки - лишние.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Olegator
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 15-02-2007 23:43 » 

Для отбраковки недостоверной информации на переходных и неустановившихся режимах ракетных двигателей применяется метод скользящих медиан. Знаешь такой метод?

Для этого строится рядом последовательность такой же длины. на первом и последнем месте остаются такие же числа. На остальных местах выбирается ближайшее к среднему из трёх.
Например:
Код:
_______________________
"A"                "B"
_______________________
 3                  3
 1                 "3"
1000000          1000000
_______________________
Ближайшее число к среднему "3" значит ставим "3"

И так для каждого следующего числа.
Из An-1,An,An+1 находим ближйшее к среднему. И всё. Оно ставится на n-ое место.
Потом выстраиваем ещё последовательности по тому же принципу до тех пор пока очередная последовательность не будет отличатся от предыдущей.
Количество итераций не превышает шести. Если выбирать из пяти, то может потребоваться больше.

Этот метод применяется для отбраковки грубых и случайных ошибок. Есть ещё систематические ошибки. Для них применяются функционально-аналитические методы.
« Последнее редактирование: 16-02-2007 00:35 от Olegator » Записан
sss
Специалист

ru
Offline Offline

« Ответ #3 : 16-02-2007 04:36 » 

Очень рекомендую скачать файл DJV  Ю.Сато "Обработка сигналов" ( 1,32 МБ). Я не знаю откуда он у меня есть, но по этой теме в ней просто супер все прожевано.
Записан

while (8==8)
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 18-02-2007 16:35 » 

Не совсем понятно, как применить методы сглаживания к моей задаче. Мне не сглаживать нужно, а находить некорректные dt (чтобы потом их пометить на графике). Кроме того, их потом нужно "исключить" (по мысли заказчика) из дальнейшей обработки.

Отсчёты ti есть моменты времени, в которые происходят события одного класса.

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

Длинные интервалы без событий являются исключениями и оказывают влияние на прогноз моментов будущих событий. Прогноз получается "осторожным" - с учётом прошлых исключений. А нужен "оптимистичный" прогноз - без учёта прошлых исключений.

Впрочем, вопрос не в том, как строить прогноз, а в том, как найти некорректные интервалы. Именно найти, а не исключить сглаживанием.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 18-02-2007 17:06 » 

Хотелось бы уточнить такой момент. Все эти действия должны проводиться в реалоьнеом времени? Это раз.
Вообще по второму вопросу идея такова. В связи с тем, что при решении первого вопроса мы уже узнаем среднее сзначение dt. Делаю вывод, что все, что ниже среднего dt и есть малое значение. Затем строим график (таблицу значений)  частоты появления малых значений dt. Затем тут два пути. Либо, используя численные методы, мы определяем параметры эмпирической функции и затем ищем ее экстремумы. Либо сразу, в лоб бежим по этим значениями и ищем глобальный экстремум, который удаляем после его рассмотрения. В связи с етм, что никакого сглаживания совсем не надо, то наверное второй способ подойдет, хотя он мне кажется очень ресурсоемкий.
Записан

ещё один вопрос ...
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 18-02-2007 18:24 » 

Цитата: nikedeforest
Хотелось бы уточнить такой момент. Все эти действия должны проводиться в реалоьнеом времени?
В реальном. Только, наверно, ты не о том думаешь. Масштаб времени - от секунд до тысяч секунд и более, а общая выборка за полгода.

Цитата: nikedeforest
Делаю вывод, что все, что ниже среднего dt и есть малое значение.
Вывод неверный. Нужно учитывать меру отклонения от среднего, иначе около 70% точек попадёт в "малые значения". Проку от этого никакого.

Обрезать по Mdt-Sdt не получится, поскольку всякое dt>=0 (отрицательных приростов времени не бывает), а Sdt>Mdt причём в разы (установлено экспериментально). Т.е. не существует таких dt, чтобы удовлетворяли неравенству dt<Mdt-Sdt.

Цитата: nikedeforest
Затем строим график (таблицу значений)  частоты появления малых значений dt.
Так вот и строим.

Цитата: nikedeforest
Либо, используя численные методы, мы определяем параметры эмпирической функции и затем ищем ее экстремумы.
Мне нужные не точки экстремумов, а интервалы, на которых функция превышает некоторый определённый порог значений.

Аппроксимация дискретных значений непрерывной функцией y(f) и решение уравнения y(f)=c (где c - порог значений) численными методами в данном случае неоправданно усложнит решение, в разы повышая объём вычислений без какого-либо практического преимущества в получаемых результатах.

Цитата: nikedeforest
Либо сразу, в лоб бежим по этим значениями и ищем глобальный экстремум, который удаляем после его рассмотрения.
Не понял, причём тут глобальный экстремум... Я не разыскиваю экстремумы.

Цитата: nikedeforest
то наверное второй способ подойдет, хотя он мне кажется очень ресурсоемкий.
Пробежаться по массиву порядка 10000 целых чисел раз в 15 минут на нормальной современной workstation - не так чтобы уж очень ресурсоёмко (IMHO).

Проблема здесь в том, как от частот вернуться к интервалам времени. Сейчас, фактически, за искомые интервалы принимаются целые окна шириной Mdt со всеми попадающими в них точками - те окна, для которых определялась частота.

Сглаживание для последовательности dt здесь может помочь тем, что в интервалах с высокой чатотой ввода имеется множество dt малых значений - в этом месте сглаженная функция будет сильнее прогибаться вниз от Mdt. Если на сглаженной функции посчитать среднее и стандартное отклонение, то, в силу сглаженности, стандартное отклонение будет меньшим, чем в необработанной последовательности - тогда можно будет попытаться применить фильтр dt<Mdt-Sdt, который выдаст искомые интервалы. Вот это стоит обдумать.
« Последнее редактирование: 18-02-2007 18:28 от dimka » Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines