2017-11-21 3 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

各クラスタについては、次のことができます各トレーニングのポイントのためにそれに対応する密度を測定し、そのクラスタを表現するために最大密度とPoingのかを選択します。

このコードは、例としての役割を果たすことができます。

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はマハラノビス距離を使用してポイントを割り当てるためです。 GMMモデルでは、これはこのクラスタに属する可能性が最も高いポイントです。

これを計算するために必要なのは、クラスタmeans_covariances_です。

関連する問題