Sparklyr中的高斯混合模型聚类

时间:2019-10-25 03:00:33

标签: r k-means apache-spark-mllib sparklyr gmm

我正在尝试使用Sparklyr中的高斯混合模型对数据进行聚类:

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

但是,调用此函数不会像ml_kmeans()那样返回度量聚类数的度量(此函数返回WSSSE)。 有没有办法在Sparklyr中获得ml_gaussian_mixture()的Silhouette得分或BIC?

1 个答案:

答案 0 :(得分:0)

使用

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