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

时间:2014-01-19 02:25:24

标签: python numpy scikit-learn

我已经阅读了文档 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数组,我必须删除用户名并只使用数值变量。但是,在创建群集后,如何将它们与每个用户关联以进行进一步分析。我将如何用相应的簇号填充“Cluster”列?

2 个答案:

答案 0 :(得分:3)

以下是一个示例,假设您将数据读入文件列表:

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)

模型现在包含一个元组(质心,标签,intertia)

所以像这样拿回标签:

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

并打印“one”的群集ID:

print clusters['bob']

或者将它发回给像这样的csv:

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

答案 1 :(得分:1)

我想起了我必须面对同样问题的时候。 : - )

这就是我所知道的。当您将数据矩阵X输入KMeans(或任何sklearn的算法)时,会记住该顺序。假设您创建了一个KMeans群集器:

from sklearn.cluster import KMeans

kms = KMeans().fit(X) #where X is your data

您可以将标签检索为:

labels = list(kms.labels_)

我认为的方式通常是在列表或词典中,所以我倾向于将许多东西作为列表或数组。

标签的顺序与您的数据集相同。换句话说,如果bob的数据位于0位置,依此类推,那么kms.labels_将以完全相同的顺序返回标签。

将它们放在一起,zipmap