当我只获得成行的集群时,如何微调 K 均值集群?

How can I fine tune K means clustering when I'm only getting clusters in lines?

这是我第一次尝试使用 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. 如果我不知道我正在寻找的关系是什么,我如何微调此图以告诉我更多信息并向我展示有用的关系?
  1. 根据你的代码,X轴对应于你的样本的索引(看你的图表,我想你当时有大约10 000个用户),Y轴对应于标签每个样本。

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

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

希望对您有所帮助!

阅读 k-means 的局限性。

请特别注意

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

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

  3. k-means 假设 连续 变量。对分类数据的使用,即使是单热编码,也是值得怀疑的。它有时工作 "okayish" 但几乎没有工作 "good".