Pytanie Jak mogę wykreślić funkcję gęstości prawdopodobieństwa dla dopasowanego modelu mieszanki Gaussa w ramach uczenia się przez scikit?


Walczę z raczej prostym zadaniem. Mam wektor pływaków, do którego chciałbym dopasować model mieszaniny Gaussa z dwoma jądrami Gaussa:

from sklearn.mixture import GMM

gmm = GMM(n_components=2)
gmm.fit(values)  # values is numpy vector of floats

Chciałbym teraz wyrysować funkcję gęstości prawdopodobieństwa dla stworzonego przeze mnie modelu miksu, ale nie mogę znaleźć żadnej dokumentacji, jak to zrobić. Jak najlepiej postępować?

Edytować:

Tutaj jest wektorem danych, które pasuję. Poniżej znajduje się bardziej szczegółowy przykład tego, jak robię różne rzeczy:

from sklearn.mixture import GMM
from matplotlib.pyplot import *
import numpy as np

try:
    import cPickle as pickle
except:
    import pickle

with open('/path/to/kde.pickle') as f:  # open the data file provided above
    kde = pickle.load(f)

gmm = GMM(n_components=2)
gmm.fit(kde)

x = np.linspace(np.min(kde), np.max(kde), len(kde))

# Plot the data to which the GMM is being fitted
figure()
plot(x, kde, color='blue')

enter image description here

# My half-baked attempt at replicating the scipy example
fit = gmm.score_samples(x)[0]
plot(x, fit, color='red')

Dopasowana krzywa nie wygląda dokładnie tak, jak się spodziewałam. Nie wydaje się nawet Gaussa, co jest trochę dziwne, biorąc pod uwagę, że zostało ono wyprodukowane w procesie Gaussa. Czy jestem szalony?


11
2018-05-12 12:58


pochodzenie


posługiwać się plot(x, np.exp(fit), color='red') zamiast. Bo gmm.score_samples daje log prawdopodobieństwo. - emeth
@blz Link do wektora danych jako wygasł. - shahensha


Odpowiedzi:


Spójrz na przykład z Github na temat naukowego uczenia się

https://github.com/scikit-learn/scikit-learn/blob/master/examples/mixture/plot_gmm_pdf.py

Chodzi o generowanie meshgrid, weź ich score z gmmi spiskuj to.

Przykład pokazuje

enter image description here


2
2018-05-12 13:06



Próbowałem zastosować ten sam samouczek do moich niezmiennych danych, ale niestety nie miałem takiego szczęścia. Czy mógłbyś spojrzeć na moje edycje? Może odkryją, gdzie zawiedli ... - blz


Spójrz na ten link:

http://www.astroml.org/book_figures/chapter4/fig_GMM_1D.html

Pokazują, jak wykreślić GMD 1D na 3 różne sposoby:

Plany GMD 1D http://www.astroml.org/_images/fig_GMM_1D_1.png


4
2018-01-15 16:35





Podążyłem za niektórymi przykładami wymienionymi w tym wątku i innymi, i udało się zbliżyć do rozwiązania, ale funkcja gęstości prawdopodobieństwa końcowego nie jest zintegrowana z jednym. Sądzę, że opublikuję pytanie na ten temat w innym wątku.

import ntumpy as np
import matplotlib.pyplot as plt
from sklearn.mixture import GaussianMixture

np.random.seed(1)

mus =  np.array([[0.2], [0.8]])
sigmas = np.array([[0.1], [0.1]]) ** 2
gmm = GaussianMixture(2)
gmm.means_ = mus
gmm.covars_ = sigmas
gmm.weights_ = np.array([0.5, 0.5])

#Fit the GMM with random data from the correspondent gaussians
gaus_samples_1 = np.random.normal(mus[0], sigmas[0], 10).reshape(10,1)
gaus_samples_2 = np.random.normal(mus[1], sigmas[1], 10).reshape(10,1)
fit_samples = np.concatenate((gaus_samples_1, gaus_samples_2))
gmm.fit(fit_samples)

fig = plt.figure()
ax = fig.add_subplot(111)
x = np.linspace(0, 1, 1000).reshape(1000,1)
logprob = gmm.score_samples(x)
pdf = np.exp(logprob)
#print np.max(pdf) -> 19.8409464401 !?
ax.plot(x, pdf, '-k')
plt.show()

Here is the resulting plot


2
2017-12-22 10:32



To odpowiada na moje pytanie dotyczące wartości większych niż jeden w funkcji gęstości prawdopodobieństwa: math.stackexchange.com/questions/105455/... - rauldg


Myślę, że to doskonałe źródło - https://jakevdp.github.io/blog/2013/12/01/kernel-density-estimation/


1
2018-04-15 20:29