studio similitud resueltos means mano hacer ejercicios ejemplos ejemplo dendrograma conglomerados como cluster analisis r cluster-analysis k-means

similitud - ejercicios resueltos de k-means



Cómo calcular BIC para agrupar k-medias en R (4)

He estado utilizando k-means para agrupar mis datos en R, pero me gustaría poder evaluar la complejidad de ajuste versus modelo de mi agrupación usando el Criterio de Información de Baysiean (BIC) y AIC. Actualmente el código que he estado usando en R es:

KClData <- kmeans(Data, centers=2, nstart= 100)

Pero me gustaría poder extraer el BIC y la posibilidad de registro. Cualquier ayuda sería muy apreciada!


En lugar de volver a implementar AIC o BIC , podemos definir una función de probabilidad de registro para objetos kmeans ; Esto será utilizado por la función BIC en el paquete de stats .

logLik.kmeans <- function(object) structure( -object$tot.withinss/2, df = nrow(object$centers)*ncol(object$centers), nobs = length(object$cluster) )

Luego, para usarlo, llame a BIC como de costumbre. Por ejemplo:

example(kmeans, local=FALSE) BIC(cl) # [1] 26.22842084

Este método se proporcionará en la próxima versión del paquete .


Para calcular BIC, simplemente agregue .5*k*d*log(n) (donde k es el número de medias, d es la longitud de un vector en su conjunto de datos y n es el número de puntos de datos) al estándar k - Significa función de error.

La penalización estándar de k-medias es /sum_n (m_k(n)-x_n)^2 , donde m_k(n) es la media asociada con el punto n de datos. Esta penalización puede interpretarse como una probabilidad de registro, por lo que BIC es perfectamente válido.

BIC simplemente agrega un término de penalización adicional al error k-medias proporcional a k .


Para cualquier persona que aterrice aquí, hay un método propuesto por Sherry Towers en http://sherrytowers.com/2013/10/24/k-means-clustering/ , que usa la salida de stats::kmeans . Yo cito:

El AIC se puede calcular con la siguiente función:

kmeansAIC = function(fit){ m = ncol(fit$centers) n = length(fit$cluster) k = nrow(fit$centers) D = fit$tot.withinss return(D + 2*m*k) }

En la ayuda de stats::AIC , también puede ver que el BIC se puede calcular de forma similar al AIC. Una forma fácil de obtener el BIC es reemplazar el return() en la función anterior, con esto:

return(data.frame(AIC = D + 2*m*k, BIC = D + log(n)*m*k))

Así que usarías esto de la siguiente manera:

fit <- kmeans(x = data,centers = 6) kmeansAIC(fit)


Solo para agregar a lo que dijo user1149913 (no tengo suficiente reputación para comentar), ya que está usando la función /sum_n (m_k(n)-x_n)^2 en R, /sum_n (m_k(n)-x_n)^2 ya está calculado para usted como KClData$tot.withinss .