Преобразовать независимый склеарн GaussianMixture логарифмические вероятностные оценки в вероятности, суммирующие к 1 - PullRequest
0 голосов
/ 26 ноября 2018

Я пометил 2D данные.В наборе 4 метки, и я знаю соответствие каждой точки ее метке.Я хотел бы, учитывая новую произвольную точку данных, найти вероятность того, что она имеет каждую из 4 меток.Он должен принадлежать одной и только одной из меток, поэтому вероятности должны составлять 1.

На данный момент я обучил 4 независимых GMM sklearn (sklearn.mixture.GaussianMixture) на связанных точках данных.с каждой этикеткой.Следует отметить, что я не хочу обучать один GMM с 4 компонентами, потому что я уже знаю метки и не хочу кластеризоваться так, чтобы это было хуже, чем мои известные метки.(Может показаться, что есть способ предоставить Y= метки для функции fit(), но я не могу заставить ее работать).

enter image description here

На приведенном выше графике точки закрашены их известными метками, а контуры представляют четыре независимых GMM, приспособленных к этим 4 наборам точек.

Для новой точки я попытался вычислитьвероятность его метки двумя способами:

  1. GaussianMixture.predict_proba(): поскольку каждый независимый GMM имеет только одно распределение, это просто возвращает вероятность 1 для всех моделей.

  2. GaussianMixture.score_samples(): Согласно документации, этот возвращает «взвешенные логарифмические вероятности для каждой выборки».Моя процедура состоит в том, что для одного нового пункта я делаю четыре вызова этой функции от каждого из четырех независимо обученных GMM, представляющих каждое распределение выше.Здесь я получаю полуразумные результаты - обычно положительное число для правильной модели и отрицательные числа для каждой из трех неправильных моделей, с более запутанными результатами для точек вблизи пересекающихся границ распределения.Вот типичный отчетливый результат:

2.904136, -60.881554, -20.824841, -30.658509

Эта точка на самом деле связана с первой меткой и с наименьшей вероятностью будет второй меткой (самая дальняя)из второго раздачи).Моя проблема заключается в том, как преобразовать приведенные выше оценки в вероятности, которые составляют 1 и точно отражают вероятность того, что данная точка принадлежит одному и только одному из четырех распределений?Учитывая, что это 4 независимых модели, возможно ли это?Если нет, есть ли другой метод, который я упустил из виду, который позволил бы мне обучать GMM на основе известных меток и обеспечивал бы вероятность, равную 1?

1 Ответ

0 голосов
/ 29 ноября 2018

В общем, если вы не знаете, как рассчитываются оценки, но знаете, что между показателями и вероятностью существует монотонная зависимость, вы можете просто использовать функцию softmax для аппроксимации вероятности с помощью дополнительной переменной температурыкоторый контролирует остроту распределения.

Пусть V будет вашим списком баллов, а tau будет температурой.Тогда

p = np.exp(V/tau) / np.sum(np.exp(V/tau))

- ваш ответ.

PS: К счастью, мы знаем, как работает sklearn GMM, и softmax с tau=1 - ваш точный ответ.

...