GSDMM 聚类聚类(短文本聚类)

GSDMM Convergence of Clusters (Short Text Clustering)

我正在使用 this GSDMM python implementation to cluster a dataset of text messages. GSDMM converges fast (around 5 iterations) according the inital paper。我也收敛到一定数量的集群,但是每次迭代还是有很多消息传递,所以很多消息还是在改变他们的集群。

我的输出如下:

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 显示了相同的模式,集群的数量几乎不变。

我不知道他们的数据集中有多少消息仍在传输。我的理解是,这个数字应该尽可能小,在最好的情况下为零(所以每条消息 "found" 正确的集群)。所以集群的数量可能会收敛,但这并不能说明 algorithm/clusters 的质量。我的理解正确吗?

也有可能是我的数据不够好,无法进行正确的聚类。

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

这里是算法的一些背景资料,当然这不是算法工作原理的完整描述:

• GSDMM 是一种软聚类算法

• 分布(以 Dirichlet 分布为先验的多项分布)

为集群分配输入(例如消息)

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

所以只要你没有非常清晰和容易分离的集群,就会有输入很可能“属于”几个集群,例如消息 1 对集群 1 的评分值为 0.5,对集群 2 的评分值为 0.4,对所有其他集群组合的评分值为 0.1。如果输入具有这样的分值,由于分配取决于多项式分布,它们有时会从一个集群跳到另一个集群。

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

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