Мне нужно получить как можно более точное значение яркости в основном стабильного источника света, учитывая двенадцать значений яркости образца. Датчик неидеален, и свет может иногда «мерцать» ярче или темнее, что можно игнорировать, отсюда моя потребность в обнаружении выбросов (я думаю?).
Я немного ознакомился с различными подходами здесь и не могу решить, какой подход выбрать. Количество выбросов никогда не известно заранее и часто будет равно нулю. Мерцание - это, как правило, очень большое отклонение от стабильной яркости (достаточное для того, чтобы действительно испортить любое среднее, полученное с большим присутствующим), но не обязательно так.
Вот примерный набор из 12 измерений для полноты вопроса:
295,5214, 277,7749, 274,6538, 272,5897, 271,0733, 292,5856, 282,0986, 275,0419, 273,084, 273,1783, 274,0317, 290,1837
Мое инстинктивное ощущение, что в этом конкретном наборе, вероятно, нет выбросов, хотя 292 и 295 выглядят немного высоко.
Итак, мой вопрос, что будет лучшим подходом здесь? Я должен упомянуть, что значения получены из взятия евклидова расстояния компонентов RG и B света от нулевой (черной) точки. Было бы программно больно, но возможно, вернуться к этим значениям, если это необходимо. Евклидово расстояние использовалось как мера "общей силы", так как меня не интересует цвет, а только сила выхода. Однако есть реальная вероятность, что упомянутые мелькатели имеют композицию RGB, отличную от обычной выходной информации.
В данный момент я играю с какой-то функцией, которая будет повторяться до тех пор, пока не будет достигнуто стабильное членство разрешенных мер:
- Нахождение стандартного отклонения
- Помещение всего, скажем, 2 SD в список игнорирования
- Пересчет среднего и SD без списка игнорирования
- Пересмотр того, кого игнорировать, на основе нового среднего и SD (оцените все 12)
- Повторите до стабильной.
Есть ли какая-то ценность в этом подходе?
Все комментарии с благодарностью приняты!
источник
Ответы:
Выбросы в небольших выборках всегда очень сложно обнаружить. На самом деле в большинстве случаев я бы выступил за то, чтобы, если вы чувствуете, что ваши данные не повреждены прямо, «чуждое» значение не может быть проблематичным, а его исключение может быть необоснованным. Вероятно, использование надежных статистических методов будет более разумным и ближе к среднему решению. У вас есть небольшой образец; Попробуй подсчитать каждую точку выборки. :)
Что касается предложенного вами подхода: я бы не стал навязывать нормальное предположение о ваших данных с правилом 68-95-99.7 на них (как вы, кажется, так или иначе делаете с вашим эвристическим правилом 2SD). Неравенство Чебышева на этот раз предполагает правило 75-88,9-93,8, которое явно менее жесткое. Другие « правила » также существуют; раздел « Идентификация выбросов » в лемме « Выброс» в Википедии содержит набор эвристик.
Опять же, учитывая, что у вас действительно небольшая выборка, если вы считаете, что ваша выборка явно не повреждена (ростом 9'4 дюйма), я бы посоветовал вам не исключать данные поспешно. Ваши "подозрительные выбросы" могут быть нетленными; их использование может помочь, а не навредить вашему анализу.
источник
Q-тест Диксона для выбросов в очень маленьких наборах данных хорошо подходит для такой ситуации:
http://en.wikipedia.org/wiki/Dixon%27s_Q_test
http://www.chem.uoa.gr/applets/AppletQtest/Text_Qtest2.htm
источник
Укажите первое - возможно, стоит вернуться к цвету RGB. Редко хорошо отбрасывать данные, и величина вектора rgb не единственный способ представить яркость - воспринимаемая яркость отличается, как и значение в HSV.
Но, говоря об этом и рассматривая имеющиеся у вас данные, вы рассматривали вопрос о том, чтобы сформировать это как проблему классификации, а не моделирования, и заняться каким-нибудь машинным обучением? У вас есть вход, который представляет собой вектор с 12 действительными значениями (показания яркости). У вас есть выход, который представляет собой вектор из 12 двоичных значений (1 = inlier, 0 = outlier). Получите несколько наборов показаний яркости и пометьте их вручную, показывая, какие показания яркости в каждом наборе являются внутренними / выбросными. Что-то вроде этого:
Затем выполните весь лот через какой-то классификатор:
И вы сделали! Не нужно суетиться, пытаясь найти «правило», которое отделяет внутренние от внешних. Просто получите несколько наборов данных, которые выглядят разумно, и пусть машина сделает это за вас :)
~~~
РЕДАКТИРОВАТЬ: Между прочим, предложенный вами метод, в котором вы итеративно подбираете гауссиан, а затем классифицируете каждую выборку на расстоянии более 2 стандартных отклонений как выброс, очень похож на алгоритм максимизации ожидания. Что-то вроде этого:
Если вы пойдете по этому пути, возможно, стоит поискать алгоритмы EM и проверить, какие предположения вы встраиваете в свою модель.
источник