高斯混合模型 (GMM) 仅给出一个聚类



我有一个有 70 列和 440 万行的数据集。我想对其执行聚类。我首先做了TF-IDF,然后我使用了K均值聚类,平分k均值和高斯混合模型(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

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

在此处检查其实现:https://github.com/apache/spark/blob/master/mllib/src/main/scala/org/apache/spark/ml/clustering/GaussianMixture.scala

他们明确提到使用对角协方差矩阵,因为维度的诅咒。

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

相关内容

最新更新