Короткая версия: Какой наиболее эффективный в вычислительном отношении метод оценки режима многомерного набора данных, взятого из непрерывного распределения?
Длинная версия: у меня есть набор данных, который мне нужен для оценки режима. Режим не совпадает со средним или медианой. Пример показан ниже, это 2D-пример, но решение ND было бы лучше:
В настоящее время мой метод
- Рассчитать оценку плотности ядра на сетке, равную требуемому разрешению режима
- Ищите наибольшую рассчитанную точку
Очевидно, что при этом вычисляется KDE по многим неправдоподобным точкам, что особенно плохо, если имеется много точек данных больших размеров или я ожидаю хорошего разрешения в режиме.
Альтернативой может быть использование имитации отжига, генетического алгоритма и т. Д., Чтобы найти глобальный пик в KDE.
Вопрос в том, есть ли более разумный способ выполнения этого расчета?
Ответы:
Метод, который бы соответствовал всем требованиям того, что вы хотите сделать, - это алгоритм среднего смещения . По существу, средний сдвиг зависит от перемещения вдоль направления градиента, который оценивается не-параметрический с «тенью», данного ядром . То есть, если плотность оценивается с помощью , то оценивается с помощью . Детали оценки градиента плотности ядра описаны в этой статье , в которой также случайно появился алгоритм среднего сдвига. K f ( x ) K ∇ f ( x ) K ′К' К f(x) K ∇f(x) K′
Очень подробное изложение алгоритма также приведено в этой записи блога .
источник
Если ваш основной интерес - это двумерные задачи, я бы сказал, что оценка плотности ядра - хороший выбор, поскольку она обладает хорошими асимптотическими свойствами (обратите внимание, что я не говорю, что она лучшая). Смотри например
Для более высоких измерений (4+) этот метод действительно медленный из-за известной трудности в оценке матрицы оптимальной полосы пропускания, см .
Теперь проблема с командой
ks
в пакетеKDE
состоит в том, что, как вы упомянули, она оценивает плотность в конкретной сетке, что может быть очень ограничивающим. Эта проблема может быть решена, если вы используете пакетKDE
для оценки матрицы пропускной способности, напримерHscv
, реализуете оценщик плотности ядра и затем оптимизируете эту функцию с помощью командыoptim
. Это показано ниже с использованием смоделированных данных и гауссова ядра вR
.Оценки с ограниченной формой, как правило, быстрее, например
Но они слишком пики для этой цели.
Другие методы, которые вы можете рассмотреть с помощью: подгонка многомерной конечной смеси нормалей (или других гибких распределений) или
Надеюсь, это поможет.
источник
Недавно мы опубликовали статью, в которой предлагается быстрая оценка согласованного режима.
Я бы также предложил новые оценки минимальной дисперсионной моды из моей недавней статьи
источник