Scikit learn 如何获得GMM群集的代表点?

Scikit learn 如何获得GMM群集的代表点?,scikit-learn,cluster-analysis,centroid,gmm,Scikit Learn,Cluster Analysis,Centroid,Gmm,我使用sklearn高斯混合模型算法(GMM)对我的数据(75000,3)进行了聚类。我有4个集群。我的数据中的每一点都代表了一个分子结构。现在我想得到每个团簇最具代表性的分子结构,我知道是团簇的质心。到目前为止,我已经尝试使用gmm.means uu属性定位集群正中心的点(结构),但是该确切点并不对应于任何结构(我使用numpy.where)。我需要获得最接近质心的结构的坐标,但在模块()的文档中没有找到这样做的函数。如何获得每个集群的代表性结构 非常感谢您的帮助,如有任何建议,我们将不胜感激

我使用sklearn高斯混合模型算法(GMM)对我的数据(75000,3)进行了聚类。我有4个集群。我的数据中的每一点都代表了一个分子结构。现在我想得到每个团簇最具代表性的分子结构,我知道是团簇的质心。到目前为止,我已经尝试使用gmm.means uu属性定位集群正中心的点(结构),但是该确切点并不对应于任何结构(我使用numpy.where)。我需要获得最接近质心的结构的坐标,但在模块()的文档中没有找到这样做的函数。如何获得每个集群的代表性结构

非常感谢您的帮助,如有任何建议,我们将不胜感激


((由于这是一个一般性问题,我认为没有必要添加用于聚类或任何数据的代码,如果有必要,请告诉我))

对于每个聚类,您可以测量每个训练点的相应密度,并选择密度最大的点来表示其聚类:

此代码可作为示例:

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()
它会将中心绘制为橙色点:


找到到星团中心的马氏距离最小的点

因为GMM使用马氏距离来指定点。根据GMM模型,这是属于该集群的概率最高的

你已经有了所有你需要计算的东西:聚类
意味着
协方差