我使用sklearn高斯混合模型算法(GMM)对我的数据进行聚类(75000,3)。我有4个集群。我的数据的每个点代表一个分子结构。现在我想得到每个簇的最具代表性的分子结构,我理解的是簇的质心。到目前为止,我已经尝试使用gmm.means_属性找到位于集群中心的点(结构),但是这个精确点并不对应于任何结构(我使用了numpy.where)。我需要获得与质心最接近的结构的坐标,但是我没有找到在模块文档(http://scikit-learn.org/stable/modules/generated/sklearn.mixture.GaussianMixture.html)中执行此操作的函数。如何获得每个群集的代表性结构?
非常感谢您的帮助,我们将不胜感激任何建议。
((由于这是我发现无需添加用于群集或任何数据的代码的一般性问题,如果有必要请告诉我))
答案 0 :(得分:2)
对于每个聚类,您可以测量每个训练点的相应密度,并选择具有最大密度的聚类来表示其聚类:
此代码可作为示例:
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()
它会将中心绘制为橙色点:
答案 1 :(得分:0)
找到与群集中心的马哈拉诺比斯距离最小的点。
因为GMM使用马哈拉诺比斯距离来分配点数。通过GMM模型,这是属于此群集的概率最高的点。
您只需计算一下:群集means_
和covariances_
。