【问题标题】:Python Relating k-means cluster to instancePython将k-means集群与实例相关联
【发布时间】:2014-02-08 08:27:56
【问题描述】:

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

【问题讨论】:

    标签: python numpy scikit-learn


    【解决方案1】:

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

    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]])
    

    【讨论】:

    • 奇怪...这工作了一次,但在第二次通过 model = sklearn.cluster.k_means(a, clust_centers) 之后我得到一个 ValueError: Buffer dtype mismatch, expected 'DOUBLE' but got 'float' 错误
    • 嗯,你是怎么运行脚本的?听起来 'a' 的 dtype 以某种方式损坏了。
    • 使用内置 python 2.7 在 Ubuntu 12.04 上运行它。我为此打开了另一个问题,因为谷歌让我失望了stackoverflow.com/questions/21220131/…
    • 在另一台机器上重新运行它(这台机器安装了 Anaconda)并且它在那个环境中工作
    【解决方案2】:

    我想起了我不得不面对完全相同的问题的时候。 :-)

    这是我所知道的。当您将数据矩阵 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

    【讨论】:

      猜你喜欢
      • 2011-11-14
      • 2012-11-06
      • 1970-01-01
      • 2017-07-28
      • 2017-08-10
      • 2012-11-01
      • 2018-10-04
      • 1970-01-01
      • 2020-10-24
      相关资源
      最近更新 更多