Кластеризация гауссовой модели смеси в спарклире - PullRequest
0 голосов
/ 25 октября 2019

Я пытаюсь кластеризовать свои данные, используя Gaussian Mixture Model в sparklyr:

ml_gaussian_mixture(formula= ~ var1 + var2 + var3 + var4 + var5, k = 5)

Однако вызов этой функции не возвращает метрику для оценки количества кластеров, как ml_kmeans() (эта функция возвращает WSSSE). Есть ли способ получить счет Силуэт или BIC для ml_gaussian_mixture() в sparklyr?

1 Ответ

0 голосов
/ 25 октября 2019

С

gmm_model <- ml_gaussian_mixture(iris_tbl, Species ~ .)

вы можете получить логарифмическую вероятность как

gmm_model$summary$log_likelihood

, которую затем можете использовать для получения BIC или AIC.

Я уверен, что должен быть способ получить его напрямую. Но если нет, вы можете рассчитать BIC как

log(n) + k-1 + k * p + k * p * (p-1) / 2 - 2 * gmm_model$summary$log_likelihood

Где n - количество выборок, k - количество кластеров, p - количество переменных. Выше * k-1 + k * p + k * p * (p-1) / 2 - это число свободных параметров в модели гауссовой смеси (с матрицами ковариации без ограничений)


Пример:

library(sparklyr)
sc <- spark_connect(master = "local")
iris_tbl <- sdf_copy_to(sc, iris, name = "iris_tbl", overwrite = TRUE)
gmm_model <- ml_gaussian_mixture(iris_tbl, Species ~ .)

gmm_model$summary$log_likelihood
#[1] -294.1398
...