2017-11-21 8 views
0

Ich habe meine Daten (75000, 3) mit dem Sklearn Gaussian Mischung Modell Algorithmus (GMM) gruppiert. Ich habe 4 Cluster. Jeder Punkt meiner Daten repräsentiert eine molekulare Struktur. Jetzt möchte ich die repräsentativste Molekülstruktur jedes Clusters erhalten, von der ich verstehe, dass sie der Schwerpunkt des Clusters ist. Bisher habe ich versucht, den Punkt (die Struktur), der sich in der Mitte des Clusters befindet, mit dem Attribut gmm.means_ zu lokalisieren, dieser genaue Punkt entspricht jedoch keiner Struktur (ich habe numpy.where verwendet). Ich müsste die Koordinaten der nächsten Struktur zum Schwerpunkt erhalten, aber ich habe die Funktion nicht gefunden, um das in der Dokumentation des Moduls zu tun (http://scikit-learn.org/stable/modules/generated/sklearn.mixture.GaussianMixture.html). Wie kann ich eine repräsentative Struktur jedes Clusters erhalten?Wie kann ich einen repräsentativen Punkt eines GMM-Clusters erhalten?

Vielen Dank für Ihre Hilfe, jeder Vorschlag wird geschätzt.

((Da dies eine allgemeine Frage ist, habe ich nicht für nötig befunden, den Code für das Clustering oder irgendwelchen Daten verwendet hinzufügen möchten, informieren Sie mich bitte wissen, ob es notwendig ist))

Antwort

0

Für jedes Cluster können Sie seine entsprechende Dichte für jedes Training Punkt messen, und wählen Sie den poing mit der maximalen Dichte seine Cluster darstellen:

Dieser Code kann als Beispiel dienen:

import numpy as np 
import matplotlib.pyplot as plt 
import scipy.stats 
from sklearn import mixture 

n_samples = 100 
C = np.array([[0.8, -0.1], [0.2, 0.4]]) 

X = np.r_[np.dot(np.random.randn(n_samples, 2), C), 
     np.random.randn(n_samples, 2) + np.array([-2, 1]), 
     np.random.randn(n_samples, 2) + np.array([1, -3])] 

gmm = mixture.GaussianMixture(n_components=3, covariance_type='full').fit(X) 

plt.scatter(X[:,0], X[:, 1], s = 1) 

centers = np.empty(shape=(gmm.n_components, X.shape[1])) 
for i in range(gmm.n_components): 
    density = scipy.stats.multivariate_normal(cov=gmm.covariances_[i], mean=gmm.means_[i]).logpdf(X) 
    centers[i, :] = X[np.argmax(density)] 
plt.scatter(centers[:, 0], centers[:, 1], s=20) 
plt.show() 

Es würde die Zentren als orangefarbene Punkte zeichnen:

enter image description here

0

Finden Sie den Punkt mit dem kleinsten Mahalanobis-Abstand zum Clusterzentrum.

Da GMM Mahalanobis-Abstand verwendet, um Punkte zuzuweisen. Nach dem GMM-Modell ist dies der Punkt mit der höchsten Wahrscheinlichkeit, zu diesem Cluster zu gehören.

Sie haben alles, was Sie brauchen, um dies zu berechnen: Cluster means_ und .

Verwandte Themen