Оценить плотность гауссовской (смеси) из набора взвешенных образцов - PullRequest
8 голосов
/ 22 марта 2010

Предположим, у меня есть набор взвешенных выборок, где каждый образец имеет соответствующий вес от 0 до 1. Я хотел бы оценить параметры распределения гауссовой смеси, которое смещено в сторону образцов с более высоким весом. В обычном невзвешенном случае оценка смеси Гаусса выполняется с помощью EM-алгоритма. Кто-нибудь знает реализацию (любой язык в порядке), который позволяет проходить веса? Если нет, кто-нибудь знает, как изменить алгоритм для учета весов? Если нет, то может ли кто-нибудь дать мне подсказку о том, как включить веса в первоначальную формулу формулировки задачи с максимальным логарифмическим правдоподобием?

Спасибо!

Ответы [ 4 ]

4 голосов
/ 24 марта 2011

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

Если $ v_i $ является весом i-го образца, алгоритм из учебника (см. Конец Раздела 6.2.) Изменяется так, что $ gamma_ {ij} $ умножается на этот весовой коэффициент.Для вычисления новых весов $ w_j $, $ n_j $ нужно разделить на сумму весов $ \ sum_ {i = 1} ^ {n} v_i $ вместо просто n.Вот и все ...

3 голосов
/ 17 июля 2010

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

Таким образом, ваша проблема сводится к минимизации $ - \ ln L = \ sum_i w_i \ ln f (x_i | q) $ (см. статью Википедии для оригинальной формы).

0 голосов
/ 25 августа 2014

Я искал аналогичное решение, связанное с оценкой ядра Гаусса (вместо смеси Гаусса) распределения.

Стандарт gaussian_kde не позволяет этого, но я нашел здесь реализацию Python модифицированной версии http://mail.scipy.org/pipermail/scipy-user/2013-May/034580.html

0 голосов
/ 17 июля 2010

Просто предложение, так как другие ответы не отправляются.

Вы можете использовать обычную EM с GMM (например, OpenCV имеет много оболочек для многих языков) и поместить несколько точек в кластер, который вы хотите иметь «больший вес». Таким образом, EM считает эти пункты более важными. Вы можете удалить дополнительные очки позже, если это имеет значение.

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

...