首页 > 解决方案 > GSDMM 聚类收敛(短文本聚类)

问题描述

我正在使用这个GSDMM python 实现来聚类文本消息数据集。根据最初的论文,GSDMM 收敛速度很快(大约 5 次迭代)。我也有收敛到一定数量的簇,但是每次迭代还是有很多消息传递,所以很多消息还在改变他们的簇。

我的输出看起来像:

In stage 0: transferred 9511 clusters with 150 clusters populated 
In stage 1: transferred 4974 clusters with 138 clusters populated 
In stage 2: transferred 2533 clusters with 90 clusters populated
….
In stage 34: transferred 1403 clusters with 47 clusters populated 
In stage 35: transferred 1410 clusters with 47 clusters populated 
In stage 36: transferred 1430 clusters with 48 clusters populated 
In stage 37: transferred 1463 clusters with 48 clusters populated 
In stage 38: transferred 1359 clusters with 48 clusters populated

在最初的论文中,图 3 显示了相同的模式,集群的数量几乎是恒定的。

论文中的图表

我无法弄清楚他们的数据集中有多少消息仍在传输。我的理解是,这个数字应该尽可能小,最好是零(所以每条消息都“找到”了正确的集群)。所以集群的数量可能会收敛,但这并不能说明算法/集群的质量。我的理解正确吗?

我的数据也有可能不足以获得正确的聚类。

标签: pythoncluster-analysistopic-modelingconvergence

解决方案


在深入了解 GSDMM 算法的功能后,我可以分享一些新信息。

这里有一些关于算法的背景信息,当然这不是算法工作原理的完整描述:

• GSDMM 是一种软聚类算法

• 将输入(例如消息)分配给集群的是分布(以狄利克雷分布为先验的多项分布)

• 显示输入属于某个集群的概率的“分数”度量基于多项分布,所有集群的总和为 1

因此,只要您没有非常清晰且易于分离的集群,就会有输入“属于”具有显着概率的几个集群,例如,消息 1 对集群 1 的得分值为 0.5,对于集群 1 的得分值为 0.4集群 2 和 0.1 用于所有其他集群的组合。如果输入具有这样的分值,由于分配取决于多项分布,它们有时会从一个集群跳到另一个集群。

知道我会说这是正常的,即使经过很多次迭代,有跳跃的输入。要衡量聚类的质量,您应该将输入分配给具有最高分值的聚类,并且不应根据训练的最后一次迭代进行聚类。

另一种选择是忽略跳跃很多或没有具有优越价值的集群的输入,因为这些输入不适合集群(可能是一些坏数据,当然取决于具体情况)


推荐阅读