Я пытаюсь применить алгоритм кластеризации GMM (как в https://spark.apache.org/docs/latest/ml-clustering.html) в данном DataFrame следующим образом:
vector.show(1)
ID | Функции
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 (nullable = 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()
Это работает без каких-либо ошибок или проблем, но алгоритм, в конце концов, возвращает одно и то же среднее значение и ковариацию для всех кластеров и присваивает каждой строке/идентификатору один и тот же кластер 0 (вероятность всегда равна 0,2 для любого кластера ([0,2,0,2,0,2,0,2 ,0,2])).
Не могли бы вы знать, почему это дает мне такие результаты, пожалуйста?
NB: данные не несут ответственности за эту «плохую» кластеризацию: попробовав Kmeans с Scikit-learn и PySpark, я получаю «реалистичную» кластеризацию с Scikit-learn.
Спасибо заранее за вашу помощь.
С наилучшими пожеланиями