2017-11-21 26 views
0

sklearn Gaussian 혼합 모델 알고리즘 (GMM)을 사용하여 데이터 (75000, 3)를 클러스터링했습니다. 나는 4 개의 클러스터를 가지고있다. 내 데이터의 각 점은 분자 구조를 나타냅니다. 이제 저는 클러스터의 중심이 이해하는 각 클러스터의 가장 대표적인 분자 구조를 얻고 싶습니다. 지금까지 gmm.means_ 속성을 사용하여 클러스터의 중심에있는 점 (구조)을 찾으려고 시도했지만 정확한 점은 어떤 구조에도 해당하지 않습니다 (numpy.where 사용). 중심에 가장 가까운 구조의 좌표를 가져와야하지만 모듈의 문서 (http://scikit-learn.org/stable/modules/generated/sklearn.mixture.GaussianMixture.html)에서 수행 할 함수를 찾지 못했습니다. 어떻게 각 클러스터의 대표적인 구조를 얻을 수 있습니까?GMM 클러스터의 대표 지점을 얻으려면 어떻게해야합니까?

도움을 주셔서 감사합니다. 어떤 제안이라도 감사하겠습니다.

((이것이 내가 클러스터링 또는 데이터에 사용되는 코드를 추가 할 필요가 발견되지 않은 일반적인 질문은, 그것은 필요한 경우 나에게) 알려 주시기 바랍니다), 각 클러스터의

답변

0

을 수행 할 수 있습니다 의 클러스터를 표현하기 위해 각각의 훈련 포인트에 대한 해당 밀도를 측정하고 최대 밀도와 세스 지점을 선택합니다

이 코드는 예를 들어 역할을 할 수 있습니다 :

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() 

그것은 오렌지 도트로 센터를 그릴 것입니다 :

enter image description here

0

클러스터 중심까지 가장 작은 마하라 누 비스 거리가있는 지점을 찾습니다.

GMM은 Mahalanobis 거리를 사용하여 점을 지정하기 때문에. GMM 모델의 경우이 클러스터에 속할 확률이 가장 높은 지점입니다.

당신은 이것을 계산할 필요가 있습니다 : 클러스터 means_covariances_.