2016-12-25 65 views
0

这是我第一次尝试使用Python和Sci-Kit Learn进行K-Means聚类,并且我不知道如何对最终聚类图做出什么或者如何微调我的K均值聚类算法。当我只是获取行集群时,如何优化K意味着集群?

我的最终目标是找到划分一些有趣或有用的行为特征的用户类别的聚类。

未遂1:

输入:性别,年龄范围,国家(全一热编码,因为数据是分类),和帐户年龄(以周龄数值)

enter image description here

代码:

# 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() 

简介:

enter image description here

具体的问题:

  1. 这是什么图形的X轴和Y轴?
  2. 这张图甚至告诉我什么?
  3. 为什么只有3个集群出现时,我把6个集群作为输入? (通过第一条评论和更新的代码和图形回答)
  4. 如果我不知道我在找什么样的关系是什么,我该如何微调这个图表来告诉我更多,并向我展示一种有用的关系?

回答

1
  1. 根据你的代码中,X轴对应于对样品的指数(看到你的图,我想你有大约10个000用户的话),和Y轴对应于每个标签样品。

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

  3. 您首先可以使用其他可视化来更好地理解您的数据如何被群集。 Sklearn的文档提供了许多可用于获取灵感的示例(1,2,3)。

希望它有帮助!

4

阅读k-means的局限性。

特别是,要知道,

  1. 你必须删除所有标识列

  2. K-均值为规模非常敏感。所有属性都需要根据其值范围,分布和重要性仔细缩放。预处理至关重要!

  3. k-均值假设连续变量。对分类数据的使用,即使是单热编码,也是有问题的。它有时工作“好”,但几乎没有工作过“好”。