Mi respuesta no se limita a K-means, sino que comprueba si tenemos maldición de la dimensionalidad para cualquier método basado en la distancia. K-means se basa en una medida de distancia (por ejemplo, la distancia euclidiana)
Antes de ejecutar el algoritmo, podemos comprobar la distribución de las métricas de distancia, es decir, todas las métricas de distancia para todos los pares de datos. Si tiene $N$ puntos de datos, debería tener $0.5\cdot N\cdot(N-1)$ métrica de la distancia. Si los datos son demasiado grandes, podemos comprobar una muestra de los mismos.
Si tenemos el problema de la maldición de la dimensionalidad, lo que verás es que estos valores están muy cerca unos de otros. Esto parece muy contra-intuitivo, porque significa que cada uno está cerca o lejos de cada uno y la medida de distancia es básicamente inútil.
A continuación, una simulación para mostrar estos resultados contraintuitivos. Si todas las características están distribuidas uniformemente, y si hay demasiadas dimensiones, cada métrica de distancia debería estar cerca de $\frac 1 6$ que viene de $\int_{x_i=0}^1\int_{x_j=0}^1 (x_i-x_j)^2 dx_i dx_j$ . Siéntase libre de cambiar la distribución uniforme por otras distribuciones. Por ejemplo, si cambiamos a la distribución normal (cambiar runif
a rnorm
), convergerá a otro número con grandes dimensiones numéricas.
Aquí está la simulación para la dimensión de 1 a 500, las características son la distribución uniforme de 0 a 1.
plot(0, type="n",xlim=c(0,0.5),ylim=c(0,50))
abline(v=1/6,lty=2,col=2)
grid()
n_data=1e3
for (p in c(1:5,10,15,20,25,50,100,250,500)){
x=matrix(runif(n_data*p),ncol=p)
all_dist=as.vector(dist(x))^2/p
lines(density(all_dist))
}
3 votos
Creo que va a tener que aclararnos lo que entiende por síntoma.
0 votos
Si "síntoma" es una versión manual de "prueba", entonces tal vez podría tomar submuestras de su conjunto de datos - tal vez el 66% del tamaño de la muestra, realizar su análisis (kmeans, en su caso), y luego ver cómo son los resultados. Por ejemplo, podría ver con qué frecuencia se asignan determinadas observaciones al mismo clúster. Por otra parte, puede que no merezca la pena el esfuerzo. Si le preocupa la posibilidad de un problema de dimensionalidad, es probable que lo tenga. Podría considerar otros enfoques de clustering que reduzcan un poco la dimensionalidad.
0 votos
@generic_user si ese comentario fuera una respuesta, lo contaría como una respuesta aceptada :)
0 votos
@mdewey He actualizado el título para responder a tu comentario
1 votos
Esta cuestión está lo suficientemente clara como para permanecer abierta, OMI.
0 votos
Para mí, la formulación no es lo suficientemente clara. O bien la pregunta es teórica ("muéstrame por qué y cómo k-means funciona peor para encontrar clusters bajo hi-dim") o sobre todo práctica ("dime qué debo hacer para diagnosticar el fallo de k-means teniendo en cuenta la dimensionalidad").
0 votos
@ttnphns: la pregunta es práctica, pero lo siento: no veo cómo formular esa pregunta para transmitir este sentido más claramente.
1 votos
A menudo, se encuentran problemas mucho más graves de k-means antes que la "maldición de la dimensionalidad". k-means puede funcionan en datos de 128 dimensiones (por ejemplo, vectores de color SIFT) si los atributos son de buena naturaleza. Hasta cierto punto, a veces puede funcionar incluso con datos de texto de 10000 dimensiones. El modelo teórico de la maldición nunca se mantiene para los datos reales. Los mayores problemas son las características incomparables, la escasez y la imposibilidad de visualizar y comprobar el resultado.