Python将k-means集群关联到实例

提问

我已经阅读了文档
here以及查看this教程,但我仍然缺少在scikit-learn中使用K-means的基本知识:

说我有这样一个数据集:

|UserName| Variable1 | Variable2 | Variable3 |  Cluster |
|  bob   |    1      |     3     |    7      |          |
|  joe   |    2      |     4     |    8      |          |
|  bill  |    1      |     6     |    4      |          |

由于K-means采用一个numpy数组,因此我必须去除用户名,而仅使用数字变量.但是,在创建群集之后,如何将它们重新关联到每个用户,以进行进一步分析.即我如何用相应的群集号填充“群集”列?

最佳答案

这是一个示例,假设您将数据从文件中读取到列表中:

import sklearn.cluster
import numpy as np

data = [
    ['bob', 1, 3, 7],
    ['joe', 2, 4, 8],
    ['bill', 1, 6, 4],
]

labels = [x[0] for x in data]
a = np.array([x[1:] for x in data])
clust_centers = 2

model = sklearn.cluster.k_means(a, clust_centers)

模型现在包含一个具有(质心,标签,间质)的元组

因此,像这样返回标签:

clusters = dict(zip(lables, model[1]))

并打印“一个”的集群标识:

print clusters['bob']

或者将其发送回csv,如下所示:

for d in data:
    print '%s,%d' % (','.join([str(x) for x in d]), clusters[d[0]])