Прогнозирующие распределения модели смеси в scikit-learn

Я вычеркнул проблему, с которой я столкнулся при моделировании смеси в scikit, и изучил следующий 1D пример. Просто подгонка модели смеси к 1D плотности. Я испытываю хорошую производительность при использовании простого GMM, но странное поведение при использовании GMM Variational или Dirichlet Process. Во-первых, соответствие очень плохое, а во-вторых, предполагаемое распределение не нормализуется (см. Код и изображение ниже).

Такое же поведение проявляется в примере http://scikit-learn.org/stable/auto_examples/mixture/plot_gmm_pdf.html. Вероятности, возвращаемые классом GMM, приблизительно нормализуются, а вероятности из DPGMM - нет. Нормализации были вычислены путем добавления следующей строки:

print np.sum(np.exp(-Z)) * (x[1] - x[0]) * (y[1] - y[0])

Это ошибка или я что-то не так делаю?

Код:

import numpy as np
import numpy.random as rndn

import sklearn.mixture as skmix

import matplotlib.pyplot as plt

X = rnd.randn(0.7 * 300, 1) - 5
X = np.vstack((X, rnd.randn(0.3 * 300, 1) * 0.3 + 3))

# gmm = skmix.GMM(2)
gmm = skmix.DPGMM(2)
gmm.fit(X)

x = np.linspace(-10, 10, 1000)
p = np.exp(gmm.score(x))

plt.hist(X, bins=50, normed=True)
plt.plot(x, p)
plt.show()

integral = np.sum(p) * (x[1] - x[0])
print integral

DPGMM плохо подходит

0 ответов

Другие вопросы по тегам