2016-04-05 7 views
1

Я хочу подгонять модель смеси Гаусса к набору взвешенных точек данных с использованием питона.python Привязка взвешенных данных с моделью смеси Гаусса (GMM) с минимумом на ковариации

Я пробовал sklearn.mixture.GMM(), который отлично работает, за исключением того, что он равномерно распределяет все точки данных. Кто-нибудь знает способ присвоения весов точкам данных в этом методе? Я несколько раз пытался использовать точки данных, чтобы «увеличить их вес», но это кажется неэффективным для больших наборов данных.

Я также думал о реализации алгоритма ЭМ самостоятельно, но это, кажется, намного медленнее, чем, например, метод GMM выше и чрезвычайно увеличит время вычисления для больших наборов данных.

Я только что открыл метод opencv для алгоритма EM cv2.EM(). Это снова отлично работает, но имеет ту же проблему, что и sklearn.mixture.GMM, и, кроме того, не существует способа изменить минимум допустимых значений ковариации. Или существует способ изменения ковариационного минимума, например, 0,001? Я надеялся, что можно будет использовать параметр зонда для назначения весов данным, но это похоже только на выходной параметр и не влияет на процесс подгонки, не так ли? Использование probs0 и запуск алгоритма с шагом M с помощью trainM тоже не помогло. Для probs0 я использовал матрицу (число элементов данных) x (число компонентов GMM), столбцы которой идентичны, а весовые параметры для точек данных записываются в строку, соответствующую точке данных. Это также не решило проблему. Это только привело к модели смеси, где все средства, где 0.

Кто-нибудь знает, как манипулировать вышеприведенными методами или кто-нибудь знает другой метод, чтобы GMM мог быть оснащен взвешенными данными?

Спасибо, Джейн

+0

GMM может быть легко расширена для поддержки веса; но вам, вероятно, потребуется изменить реализацию для этого. Я бы пошел с Java, такой как ELKI: чистый питон слишком медленный, Cython нелегко начать, а C требует много отладочного опыта. Java проще, и дает производительность чуть хуже, чем C. Но что вы подразумеваете под «минимальной ковариацией» - почему ковариантность 0 была бы плохой, а что касается отрицательной ковариации? –

+0

0 Ковариантность плохо, потому что она вызывает бесконечность, поэтому модель, где среднее значение помещается только на точку данных с ковариантностью 0, достигнет наилучшего результата (максимального правдоподобия), даже если это определенно не является «правильным» решением чтобы описать данные, а не то, что нужно. Кроме того, я хочу опубликовать результаты процесса, и поэтому было бы неплохо определить минимум ковариации. – JaneD

+0

Нет. Пока у вас есть отклонения. Ковариация - это корреляция. –

ответ

0

Если вы все еще ищете решение, гранатовый теперь поддерживает учебный GMM на взвешенных данных. Все, что вам нужно сделать, это передать вектор весов во время обучения, и он будет обрабатывать его для вас. Вот краткий учебник по GMMs в гранате!

https://github.com/jmschrei/pomegranate/blob/master/tutorials/Tutorial_2_General_Mixture_Models.ipynb

 Смежные вопросы

  • Нет связанных вопросов^_^