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

时间:2018-09-07 15:24:36

标签: pyspark k-means 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

1 个答案:

答案 0 :(得分:1)

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

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

他们清楚地提到由于维数灾难而使用对角协方差矩阵。

<块引用>

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