GSDMM 聚类的收敛(短文本聚类)

sim*_*mon 6 python cluster-analysis topic-modeling convergence

我正在使用这个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
Run Code Online (Sandbox Code Playgroud)

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

纸上的图

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

也有可能我的数据不够好,无法获得适当的聚类。

sim*_*mon 1

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

\n

以下是有关该算法的一些背景信息,当然这并不是该算法如何工作的完整描述:

\n

\xe2\x80\xa2 GSDMM 是一种软聚类算法

\n

\xe2\x80\xa2 输入(例如消息)到集群的分配的底层是分布(以狄利克雷分布作为先验的多项分布)

\n

\xe2\x80\xa2 \xe2\x80\x9cScore\xe2\x80\x9d-Metric 显示输入属于某个簇的概率,基于多项分布,所有簇的总和为 1

\n

因此,只要你不\xc2\xb4t有非常清晰和容易分离的集群,就会有输入\xe2\x80\x9c属于\xe2\x80\x9d有很大概率的几个集群,例如消息1的得分值为聚类 1 的得分值为 0.5,聚类 2 的得分值为 0.4,所有其他聚类的得分合计为 0.1。如果存在具有类似分值的输入,由于分配取决于多项分布,它们有时会从一个簇跳转到另一个簇。

\n

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

\n

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

\n