【问题标题】:How can I fine tune K means clustering when I'm only getting clusters in lines?当我只将集群排成一行时,如何微调 K 意味着集群?
【发布时间】:2016-12-25 23:01:59
【问题描述】:

这是我第一次尝试使用 Python 和 Sci-Kit Learn 进行 K-Means 聚类,我不知道如何制作我的最终聚类图或如何微调我的 K 均值聚类算法。

我的最终目标是找到一组描述一些有趣或有用的行为特征的用户类别。

尝试 1:

输入:性别、年龄范围、国家/地区(由于数据是分类数据,所有一项都是热编码的)和帐户年龄(以周为单位的数字)

代码:

# Convert DataFrame to matrix
mat2 = all_dummy.as_matrix()
# Using sklearn
km2 = sklearn.cluster.KMeans(n_clusters=6)
km2.fit(mat2)
# Get cluster assignment labels
labels2 = km2.labels_
# Format results as a DataFrame
results2 = pd.DataFrame([all_dummy.index,labels2]).T

plot_x2 = results2[0].tolist()
plot_y2 = results2[1].tolist()
pyplot.scatter(plot_x2,plot_y2)
pyplot.show()

剧情:

具体问题:

  1. 此图的 X 轴和 Y 轴是什么?
  2. 这个图表告诉我什么?
  3. 当我将 6 个集群作为输入时,为什么只显示 3 个集群? (由第一条评论和更新的代码和图表回答)
  4. 如果我不知道要查找的关系是什么,如何微调此图表以告诉我更多信息并向我展示有用的关系?

【问题讨论】:

    标签: python machine-learning scikit-learn cluster-analysis


    【解决方案1】:

    了解 k-means 的局限性。

    特别要注意

    1. 您必须删除所有标识符列

    2. k-means 对比例非常敏感。所有属性都需要根据它们的值范围、分布和重要性仔细调整。预处理是必不可少的!

    3. k-means 假定 连续 变量。对分类数据的使用,即使是单热编码,也是值得怀疑的。它有时工作“还可以”,但几乎没有工作过“好”。

    【讨论】:

      【解决方案2】:
      1. 根据您的代码,X 轴对应于样本的索引(查看您的图表,我想您那时大约有 10 000 个用户),Y 轴对应于每个样本的标签。

      2. 您可能没有 6 个集群作为输入。实际上,当您将结果格式化为数据框时,会使用 labels 变量,而实际上是 labels2 包含计算的集群分配。我不知道您的标签来自哪里,但我怀疑这就是您获得这些结果的原因。因此,关于问题 2,这张图可能没有显示任何相关内容。

      3. 您首先可以使用其他可视化来更好地了解您的数据是如何被聚类的。 Sklearn 的文档提供了许多示例,您可以从中获得灵感(123)。

      希望对您有所帮助!

      【讨论】:

        猜你喜欢
        • 2021-06-01
        • 1970-01-01
        • 2013-12-11
        • 2019-09-08
        • 1970-01-01
        • 2012-07-15
        • 1970-01-01
        • 2018-08-14
        • 2020-03-20
        相关资源
        最近更新 更多