Идентификация локальных минимумов на гистограмме

Мне интересно найти локальные минимумы на гистограмме, которая примерно напоминает

enter image description here

. Я бы хотел найти локальный минимум на 109,258, и самый простой способ сделать это - это определить, является ли количество отсчетов на 109,258 ниже, чем среднее количество отсчетов в некотором интервале вокруг (включая 109,258). Самым трудным для меня является определение этого интервала.

Что касается источника этих данных, то это гистограмма со 100 ячейками неоднородной ширины. Каждая ячейка имеет значение (показано на оси x) и количество образцов, попадающих в эту ячейку (показано на оси y). Я пытаюсь найти «лучшее» место для разделения гистограммы. Каждая сторона разбиения распространяется вниз по двоичному дереву как часть алгоритма классификации.

Я думаю, что лучше всего мне будет попытаться подогнать кривую к этой гистограмме, используя что-то вроде Алгоритм Левенберга-Марквардта , а затем сравнить локальные минимумы, чтобы найти «лучший». Надлежащая мера «наилучшего» будет включать некоторое указание значимости этого разделения, которое измеряется как разница между средними значениями счета в интервале слева и средним значением счета в интервале справа, а затем, возможно, взвесьте каждое различие с количеством включенных отсчетов, чтобы получить составное измерение «наилучшего», если это имеет смысл.

В любом случае вычислительная сложность алгоритма не является большой проблемой, 100 интервалов - это максимальное число I жду встречи. Однако этот расчет будет выполняться один раз для каждого образца, поэтому, конечно, было бы идеально, если бы он оставался линейным по отношению к количеству ящиков.

Между прочим, я все делаю на C ++ и использую библиотеки boost и STL, поэтому в этом отношении нет ничего запретного.

Мы будем очень благодарны за любые мысли или идеи относительно передовых методов!

11
задан svick 31 July 2011 в 14:12
поделиться