Гауссовская модель смеси, чтобы найти распределение вероятностей? - PullRequest
0 голосов
/ 11 июня 2019

Я пытаюсь приспособить модель гауссовой смеси к моим данным и оценить параметры. Я могу подобрать модель и найти параметры, но подобранная кривая не достигает пика распределения данных. Ниже мой код и гистограмма моих данных. Как видно на изображении, пики кривых не достигают пиковых данных, какой параметр или какие изменения в коде мне необходимо внести для достижения этого?

from sklearn.mixture import GaussianMixture
gmm = GaussianMixture(n_components = 3,max_iter=150)
gmm.fit(np.expand_dims(data, 1)) # Parameters: array-like, shape `(`n_samples, n_features), 1 dimension dataset so 1 feature
Gaussian_nr = 1
for mu, sd, p in zip(gmm.means_.flatten(), np.sqrt(gmm.covariances_.flatten()), gmm.weights_):
    print('Gaussian {:}: μ = {:.2}, σ = {:.2}, weight = {:.2}'.format(Gaussian_nr, mu, sd, p))
    g_s = stats.norm(mu, sd).pdf(x) * p
    plt.plot(x, g_s, label='gaussian sklearn');
    Gaussian_nr += 1
sns.distplot(data, bins=200, kde=False, norm_hist=True)
gmm_sum = np.exp([gmm.score_samples(e.reshape(-1, 1)) for e in x]) #gmm gives log probability, hence the exp() function
plt.plot(x, gmm_sum, label='gaussian mixture');
plt.legend();

введите описание изображения здесь

...