为啥同组聚类数据点在 Kmeans 聚类中落得较远或分散?

Posted

技术标签:

【中文标题】为啥同组聚类数据点在 Kmeans 聚类中落得较远或分散?【英文标题】:Why is the same group of cluster's datapoints falling far away or scattered in Kmeans clustering?为什么同组聚类数据点在 Kmeans 聚类中落得较远或分散? 【发布时间】:2017-07-08 02:16:25 【问题描述】:

我有一个疑问,在我的会议中也被问了很多次,但我成功地没有回答它。我希望你能帮助我了解这个问题的见解。

我在我的项目中使用了 kmeans 聚类来为各个问题区域聚类大量文档。我还使用 matplotlib 绘制数据点的坐标。更常见的是,落入同一簇的数据点分散或远离落入同一簇的其他文档或数据点。人们通常问我的问题是,如果文档或数据点来自同一个集群/组,那么它需要彼此靠近,为什么对于同一组/集群的文档不会发生这种情况。

我如何说服他们,有时我会说不出话来。

对于同一个问题,我无法控制集群的形成,但作为我所在领域的领域专家,我非常了解文档所属的问题区域。那么,如何使用 Kmeans 或任何其他聚类机制或通过使用超参数准确地将这数千个文档配置/聚类到仅那些问题区域中。请帮助我。

我参考了http://brandonrose.org/clustering

父亲,纽约,兄弟是紫色的簇。如果它属于同一个集群,那么它都需要位于彼此靠近的一侧绘图屏幕上。为什么在剧情画面里到处都是。这也是我的情况。

【问题讨论】:

根据我的经验,文本上的 k-means 效果不太好。 永远不要相信结果。最多使用它来了解那里有什么,因为通常至少 50% 的点位于错误的集群中。 好的,在这种情况下,哪种算法适合文本。让我的问题要求更广泛。我有成千上万个来自不同来源的文档/问题,例如 bugzilla、socialcast、salesforce 等……我想将这些文档或 PR 聚集到一个尖锐的问题区域。比如说在 JAVA 中,人们每天都会遇到很多问题,他们会发布他们的问题,我需要将所有这些文档集中到特定的问题区域中,比如 nullpointerexception 应该都放在一个簇中,而与集合相关的问题应该放在另一个簇中簇。什么算法套件可以很好地对它进行聚类。 我怀疑任何集群都能够做到这一点。因为您使用了多个数据源,所以您更有可能看到与以下内容相对应的集群:bugzilla、socialcast、salesforce。这将是一个成功的集群,但对你来说毫无用处。 您好@Anony-Mousse 在您说之后,我正在针对每个数据源运行 kmeans 集群。来自 socialcast 的数据是单独运行的,无需与 bugzilla 或 saleforce 关联。但是我仍然看到集群正在形成基于一些理想情况下不应该成为集群的词(例如它给出“day”、“exist”、“around”、“info”)这些不是我的问题领域。我该怎么做预处理数据以获得一些有意义的集群。我也删除了停用词和不需要的词,当我删除不需要的词时,它给出一个错误说增加 max_df 或减少 tfidf 中的 min_df。 我对文本聚类没有任何积极的经验,抱歉。 【参考方案1】:

您提供的有关数据的信息很少,因此这个答案有点投机。但我很确定您的数据点有两个以上的组件,并且您在至少三维空间中进行 k-means 聚类。然后您使用某种投影以 2D 形式显示它们。由于投影,原本相距较远的点似乎靠得很近。二维图几乎没有说明原始高维空间中的邻域关系。

【讨论】:

我参考了这个链接来解决我的问题brandonrose.org/clustering 即使在这里我看到一个特定集群的电影被分散了。我也会上传上面的图片。我你看到集群名称是父亲,纽约,兄弟,紫色,这些数据点分散在图中的每个地方。为什么会这样,如果它都是同一个集群,那么它需要更接近正确。 @Niteshkumar:链接文档证实了我的假设,即实际聚类是在高维向量空间中完成的。在这个空间中,一个簇的点实际上是靠得很近的。你展示的图表只是这个空间的二维可视化。 好的,但是为什么同一簇下的数据点的二维可视化很远。我问的原因是,我真的很难在我的会议上解释。是否有任何可能的方法来解释高维向量空间以及为什么这些数据点对业务人员来说很远。如果你能用一些类比和深入的方式解释我,那就太好了。并且非常感谢您的时间和到目前为止所做的解释。 @Niteshkumar:假设您在 3D 中有 4 个点:A=(10,0,0), B=(20,0,0), C=(11,0,1000) 和 D =(21,0,1000)。显然,集群将是 A,B 和 C,D。现在,您通过删除第三个坐标将它们投影到 2D:A'=(10,0)、B'=(20,0)、C'=(11,0) 和 D'=(21,0)。现在 A',C' 和 B',D' 靠得很近了。 哇非常感谢@FrankPuffer。这对我真的很有帮助。

以上是关于为啥同组聚类数据点在 Kmeans 聚类中落得较远或分散?的主要内容,如果未能解决你的问题,请参考以下文章

用于在 KMeans 聚类中选择适当数量的聚类的轮廓索引

从 kmeans 聚类中了解客户属性

如何在 python 中的 KMeans 聚类中获得 X 值?

聚类算法 - kmeans

谱聚类为啥要用到kmeans

带有标签数据的 KMeans 聚类