Elección de clústeres para k-means: el caso de 1 clúster

9

¿Alguien sabe un buen método para determinar si la agrupación utilizando kmeans es incluso apropiada? Es decir, ¿qué pasa si su muestra es realmente homogénea? Sé que algo así como un modelo de mezcla (a través de mclust en R) proporcionará estadísticas de ajuste para el caso de clúster 1: k, pero parece que todas las técnicas para evaluar kmeans requieren al menos 2 clústeres.

¿Alguien sabe de una técnica para comparar los casos de clúster 1 y 2 para kmeans?

dmartin
fuente

Respuestas:

10

La estadística de brecha es una excelente manera de hacer esto; Tibshirani, Hastie y Walther (2001).

http://stat.ethz.ch/R-manual/R-devel/library/cluster/html/clusGap.html : el paquete R relevante.

La idea es que realice una prueba de hipótesis secuencial de agrupar sus datos para K = 1,2,3, ... frente a una hipótesis nula de ruido aleatorio, que es equivalente a un grupo. Su fortaleza particular es que le da una indicación confiable de si K = 1, es decir, si no hay grupos.

Aquí hay un ejemplo, estaba inspeccionando algunos datos de astronomía hace unos días a medida que sucede, es decir, de una encuesta de exoplanetas en tránsito. Quería saber qué evidencia hay para los grupos (convexos). Mis datos son 'tránsito'

library(cluster)
cgap <- clusGap(transit, FUN=kmeans, K.max=kmax, B=100)
for(k in 1:(kmax-1)) {
    if(cgap$Tab[k,3]>cgap$Tab[(k+1),3]-cgap$Tab[(k+1),4]) {print(k)}; 
    break;
}

Con la estadística de brecha, está buscando el primer valor de K donde la prueba 'falla', es decir, la estadística de brecha disminuye significativamente. El bucle anterior imprimirá tal k, sin embargo, simplemente trazar cgap le da la siguiente figura:
ingrese la descripción de la imagen aquí Vea cómo hay una caída significativa en la brecha de k = 1 a k = 2, lo que significa que, de hecho, no hay grupos (es decir, 1 grupo).

Jack
fuente
¿Cómo hacer lo mismo para la agrupación jerárquica con enlace único? ¿Puedes explicar el argumento divertido de clusGap? Ejecuté la siguiente línea para kmax jerárquico = 20 cgap <- clusGap (cluster_feat_base [, 2: ncol (cluster_feat_base)], FUN = hclust, K.max = kmax, B = 100). Pero está dando un error que dice Error en FUNcluster (X, kk, ...): método de agrupación no válido 2
GeorgeOfTheRF
4

También puede probar un método más reciente: A. Kalogeratos y A.Likas, Dip-means: un método de agrupación incremental para estimar el número de agrupaciones , NIPS 2012.

La idea es utilizar pruebas de hipótesis estadísticas para la unimodalidad en vectores que contienen la similitud / distancia entre un punto y el resto de los puntos del conjunto. La prueba se realiza utilizando la prueba de inmersión Hartigan-Hartigan , Ann. Estadístico. 13 (1): 70-84.

El método comienza con todo el conjunto de datos como un grupo y lo divide gradualmente siempre que se rechace la hipótesis de unimodalidad (es decir, más de un grupo está presente).

Por lo tanto, este método indicaría si hay más de un clúster en los datos (su pregunta), pero también puede proporcionar el clúster final.

Aquí puedes encontrar algún código en Matlab .

argyris
fuente
0

Supongamos que estoy considerando el mismo ejemplo,

library (cluster) cgap <- clusGap (transit, FUN = kmeans, K.max = kmax, B = 100) for (k in 1: (kmax-1)) {if (cgap Tab [(k + 1), 3] -cgap $ Tab [(k + 1), 4]) {print (k)}; rotura; }Tab[k,3]>cgap

¿Cómo puedo subconjunto de elementos de clústeres correspondientes a la mejor solución de clúster basado en estadísticas de brecha máxima? Para que pueda usarlo para un análisis más detallado de cada uno de los grupos.

Sé que hay un comando llamado subconjunto. No hay problemas al usar este comando cuando le hemos dado la cantidad de clústeres que queremos. Pero, ¿cómo subconjuntarlo cuando queremos subconjuntar en función de k óptimo obtenido usando gap (en resumen, subconjunto de elementos de clústeres si hay un bucle)

Tharang
fuente