我尝试在给定的 DataFrame 上应用 GMM 聚类算法(如https://spark.apache.org/docs/latest/ml-clustering.html),如下所示:
vector.show(1)
身份证 | 特征
33.0 | [0.0,1.0,27043.0,....]
type(vector)
pyspark.sql.dataframe.DataFrame
type(vector.select('features'))
pyspark.sql.dataframe.DataFrame
vector.printSchema()
根
|-- id: double (可为空 = true)
|-- 特征:向量(可为空=真)
然后我尝试了以下代码来创建集群:
from pyspark.ml.clustering import GaussianMixture
gmm = GaussianMixture().setK(5).setSeed(538009335).setFeaturesCol("features")
gmm_model = gmm.fit(vector)
gmm_model.gaussiansDF.show()
gmm_predictions = gmm_model.transform(vector)
gmm_predictions.show()
这可以正常工作,没有任何错误或麻烦,但算法最终为所有集群返回相同的均值和协方差,并将每一行/ID 分配给同一个集群 0(对于任何集群,概率始终为 0.2([0.2,0.2,0,2,0.2 ,0.2]))。
你知道为什么它会给我这样的结果吗?
注意:数据不是造成这种“坏”聚类的原因:在使用 Scikit-learn 和 PySpark 尝试过 Kmeans 后,我得到了使用 Scikit-learn 的“现实”聚类。
预先感谢您的帮助。
此致