Verständnis Gaussian Mixture Models

Ich versuche zu verstehen, die Ergebnisse aus der scikit-learn gaussian mixture-Modell-Implementierung. Werfen Sie einen Blick auf das folgende Beispiel:

#!/opt/local/bin/python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.mixture import GaussianMixture

# Define simple gaussian
def gauss_function(x, amp, x0, sigma):
    return amp * np.exp(-(x - x0) ** 2. / (2. * sigma ** 2.))

# Generate sample from three gaussian distributions
samples = np.random.normal(-0.5, 0.2, 2000)
samples = np.append(samples, np.random.normal(-0.1, 0.07, 5000))
samples = np.append(samples, np.random.normal(0.2, 0.13, 10000))

# Fit GMM
gmm = GaussianMixture(n_components=3, covariance_type="full", tol=0.001)
gmm = gmm.fit(X=np.expand_dims(samples, 1))

# Evaluate GMM
gmm_x = np.linspace(-2, 1.5, 5000)
gmm_y = np.exp(gmm.score_samples(gmm_x.reshape(-1, 1)))

# Construct function manually as sum of gaussians
gmm_y_sum = np.full_like(gmm_x, fill_value=0, dtype=np.float32)
for m, c, w in zip(gmm.means_.ravel(), gmm.covariances_.ravel(), 
               gmm.weights_.ravel()):
    gmm_y_sum += gauss_function(x=gmm_x, amp=w, x0=m, sigma=np.sqrt(c))

# Normalize so that integral is 1    
gmm_y_sum /= np.trapz(gmm_y_sum, gmm_x)

# Make regular histogram
fig, ax = plt.subplots(nrows=1, ncols=1, figsize=[8, 5])
ax.hist(samples, bins=50, normed=True, alpha=0.5, color="#0070FF")
ax.plot(gmm_x, gmm_y, color="crimson", lw=4, label="GMM")
ax.plot(gmm_x, gmm_y_sum, color="black", lw=4, label="Gauss_sum")

# Annotate diagram
ax.set_ylabel("Probability density")
ax.set_xlabel("Arbitrary units")

# Draw legend
plt.legend()
plt.show()

Verständnis Gaussian Mixture Models

Hier habe ich zum ersten generieren einer Beispiel-Verteilung konstruiert aus gaussfunktionen, dann passen ein gaussian mixture Modell für diese Daten. Als Nächstes möchte ich die Wahrscheinlichkeit berechnen für eine gegebene Eingabe. Praktischerweise ist der scikit-Implementierung bieten die score_samples Methode, genau das zu tun. Jetzt versuche ich zu verstehen, dass diese Ergebnisse. Ich dachte immer, dass ich nur die Parameter der gaussfunktionen von der GMM passen und zu konstruieren, das sehr gleiche Verteilung durch summieren über Sie und dann normalisiert sich das integral zu 1. Jedoch, wie Sie sehen können, in den plot, die gezogenen Proben aus den score_samples Methode, die perfekt passen (rote Linie), um die ursprünglichen Daten (blaues Histogramm), die manuell konstruierte Verteilung (schwarze Linie) nicht. Ich würde gerne verstehen, wo mein denken falsch gelaufen ist und warum kann ich nicht konstruieren, die die Verteilung selbst durch die Summe der gaussfunktionen, wie der GMM passen!?! Vielen Dank für jede Eingabe!

InformationsquelleAutor HansSnah | 2017-01-13
Schreibe einen Kommentar