python - python : Determine which data are associated with each centroid 中的 k 均值

标签 python scipy cluster-analysis k-means

我一直在使用 scipy.cluster.vq.kmeans 进行一些 k 均值聚类,但想知道是否有一种方法可以确定每个数据点是哪个质心(假定)与相关联。

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

最佳答案

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

关于python - python : Determine which data are associated with each centroid 中的 k 均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14570610/

相关文章:

python - typeError 帮助,plt.scatter 将我的 .csv 读取为真/假而不是数值

python - 计算角度值的代码

python - 创建多个以逗号分隔的空列表

python - 使用父类调用方法

python-2.7 - Python从数据中删除异常值

python - 访问python中特定矩阵行中的非零元素

python - numpy search在切片上按字典顺序排序

python - 无监督地将需求聚类为小时组

python - 两种不同的聚类方法(通过频谱分析)和两种不同的结果......发生了什么?

python 3 : module in same directory as script: "ImportError: No module named"