【问题标题】:k-means in python: Determine which data are associated with each centroidpython中的k-means:确定哪些数据与每个质心相关联
【发布时间】:2013-01-12 07:08:39
【问题描述】:

我一直在使用 scipy.cluster.vq.kmeans 进行一些 k-means 聚类,但想知道是否有办法确定每个数据点(推定)与哪个质心相关联。

显然您可以手动执行此操作,但据我所知,kmeans 函数不会返回这个?

【问题讨论】:

    标签: python scipy cluster-analysis k-means


    【解决方案1】:

    scipy.cluster.vq 中有一个函数 kmeans2 也可以返回标签。

    In [8]: X = scipy.randn(100, 2)
    
    In [9]: centroids, labels = kmeans2(X, 3)
    
    In [10]: labels
    Out[10]: 
    array([2, 1, 2, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 2, 2, 1, 2, 1, 2, 1, 2, 0,
           1, 0, 2, 0, 1, 2, 0, 1, 0, 1, 1, 2, 2, 2, 2, 1, 2, 1, 1, 1, 2, 0, 0,
           2, 2, 0, 1, 0, 0, 0, 2, 2, 2, 0, 0, 1, 2, 1, 0, 0, 0, 2, 1, 1, 1, 1,
           1, 0, 0, 1, 0, 1, 2, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 2, 0, 2, 2, 0,
           1, 1, 0, 1, 0, 0, 0, 2])
    

    否则,如果必须使用kmeans,也可以使用vq获取标签:

    In [17]: from scipy.cluster.vq import kmeans, vq
    
    In [18]: codebook, distortion = kmeans(X, 3)
    
    In [21]: code, dist = vq(X, codebook)
    
    In [22]: code
    Out[22]: 
    array([1, 0, 1, 0, 2, 2, 2, 0, 1, 1, 0, 2, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1,
           2, 2, 1, 2, 0, 1, 1, 0, 2, 2, 0, 1, 0, 1, 0, 2, 1, 2, 0, 2, 1, 1, 1,
           0, 1, 2, 0, 1, 2, 2, 1, 1, 1, 2, 2, 0, 0, 2, 2, 2, 2, 1, 0, 2, 2, 2,
           0, 1, 1, 2, 1, 0, 0, 0, 0, 1, 2, 1, 2, 0, 2, 0, 2, 2, 1, 1, 1, 1, 1,
           2, 0, 2, 0, 2, 1, 1, 1])
    

    Documentation: scipy.cluster.vq

    【讨论】:

      猜你喜欢
      • 2017-09-12
      • 2014-02-08
      • 2019-05-14
      • 2020-02-21
      • 2013-07-17
      • 2018-09-19
      • 1970-01-01
      • 2017-03-13
      • 2018-05-09
      相关资源
      最近更新 更多