仅给出一个集群的高斯混合模型 (GMM)

Posted

技术标签:

【中文标题】仅给出一个集群的高斯混合模型 (GMM)【英文标题】:Gaussian Mixture Model (GMM) giving only one cluster 【发布时间】:2019-02-12 23:40:51 【问题描述】:

我有一个包含 70 列和 440 万行的数据集。我想对其进行聚类。我首先做了 TF-IDF,然后我使用了 K-means 聚类、二等分 k-means 和高斯混合模型 (GMM)。虽然其他技术给了我指定数量的集群,但 GMM 只给出了一个集群。例如,在下面的代码中,我想要 20 个集群,但它只返回 1 个集群。这是因为我有很多列还是仅仅是由于数据的性质造成的?

gmm = GaussianMixture(k = 20, tol = 0.000001, maxIter=10000, seed =1)
model = gmm.fit(rescaledData)
df1 = model.transform(rescaledData).select(['label','prediction'])
df1.groupBy('prediction').count().show()  # this returns 1 row

【问题讨论】:

【参考方案1】:

在我看来,Pyspark GMM 聚类性能不佳的主要原因是它的实现是使用对角协方差矩阵完成的,该矩阵没有考虑数据集中存在的不同特征之间的协方差。

在这里检查它的实现:https://github.com/apache/spark/blob/master/mllib/src/main/scala/org/apache/spark/ml/clustering/GaussianMixture.scala

由于维度灾难,他们明确提到使用对角协方差矩阵。

@note 该算法的特征数量有限,因为它需要存储一个协方差矩阵,该矩阵的大小与特征数量成二次方。即使特征的数量没有超过这个限制,这个算法也可能在高维数据上表现不佳。这是由于高维数据 (a) 使其难以聚类(基于统计/理论论据)和 (b) 高斯分布的数值问题。

【讨论】:

在这种情况下,您会在 GMM 之前建议 PCA 来解决维度灾难吗?

以上是关于仅给出一个集群的高斯混合模型 (GMM)的主要内容,如果未能解决你的问题,请参考以下文章

高斯混合模型GMM核心参数高斯混合模型GMM的数学形式

gmm模型难吗

05 EM算法 - 高斯混合模型 - GMM

单高斯模型SGM & 高斯混合模型GMM

高斯混合模型GMM的EM算法实现(聚类)

高斯混合模型(GMM)