【问题标题】:How can I get a representative point of a GMM cluster?如何获得 GMM 集群的代表点?
【发布时间】:2018-05-04 21:30:28
【问题描述】:

我使用 sklearn 高斯混合模型算法 (GMM) 对我的数据 (75000, 3) 进行了聚类。我有 4 个集群。我的数据的每个点都代表一个分子结构。现在我想得到每个簇最具代表性的分子结构,我理解的是簇的质心。到目前为止,我已经尝试使用 gmm.means_ 属性定位位于集群中心的点(结构),但是该确切点不对应于任何结构(我使用了 numpy.where)。我需要获取离质心最近的结构的坐标,但我在模块的文档中没有找到执行此操作的函数 (http://scikit-learn.org/stable/modules/generated/sklearn.mixture.GaussianMixture.html)。如何获得每个集群的代表性结构?

非常感谢您的帮助,任何建议将不胜感激。

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

【问题讨论】:

    标签: scikit-learn cluster-analysis centroid gmm


    【解决方案1】:

    对于每个簇,你可以测量每个训练点对应的密度,选择密度最大的点来表示它的簇:

    此代码可以作为示例:

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

    它将中心绘制为橙色点:

    【讨论】:

      【解决方案2】:

      找到到聚类中心的马氏距离最小的点。

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

      您拥有计算此所需的一切:集群 means_covariances_

      【讨论】:

        猜你喜欢
        • 2014-04-28
        • 2014-12-11
        • 2018-08-20
        • 1970-01-01
        • 1970-01-01
        • 2021-03-10
        • 2019-05-16
        • 1970-01-01
        • 2021-07-24
        相关资源
        最近更新 更多