我已经阅读了文档 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”列?
答案 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_
将以完全相同的顺序返回标签。
将它们放在一起,zip
或map
。