21 votos

¿Debo eliminar las variables correlacionadas/colineales antes de ejecutar kmeans?

Estoy ejecutando kmeans para identificar grupos de clientes. Tengo aproximadamente 100 variables para identificar clusters. Cada una de estas variables representa el % de gasto de un cliente en una categoría. Así, si tengo 100 categorías, tengo estas 100 variables de tal manera que la suma de estas variables es 100% para cada cliente. Ahora bien, estas variables están fuertemente correlacionadas entre sí. ¿Necesito eliminar algunas de ellas para eliminar la colinealidad antes de ejecutar kmeans?

Estos son los datos de muestra. En realidad tengo 100 variables y 10 millones de clientes.

Customer CatA CatB CatC   
1         10%  70%  20%   
2         15%  60%  25%

12voto

Pat Puntos 1698

No elimine ninguna variable, pero considere la posibilidad de utilizar PCA. He aquí por qué.

En primer lugar, como señala Anony-mousse, k-means no se ve muy afectado por la colinealidad/correlaciones. No es necesario desechar información por ello.

En segundo lugar, si coloca las variables de forma incorrecta, acercará artificialmente algunas muestras. Un ejemplo:

Customer CatA CatB CatC
1        1    0    0
2        0    1    0
3        0    0    1

(He eliminado la notación % y sólo he puesto valores entre 0 y 1, restringidos para que todos sumen 1).

La distancia euclidiana entre cada uno de esos clientes en su espacio natural 3d es $\sqrt{(1-0)^2+(0-1)^2+(0-0)^2} = \sqrt{2}$

Ahora digamos que se te cae CatC.

Customer CatA CatB 
1        1    0    
2        0    1    
3        0    0    

Ahora la distancia entre los clientes 1 y 2 sigue siendo $\sqrt{2}$ , pero entre los clientes 1 y 3, y 2 y 3, es sólo $\sqrt{(1-0)^2+(0-0)^2}=1$ . Has hecho artificialmente que el cliente 3 sea más similar a 1 y 2, de una forma que los datos brutos no apoyan.

En tercer lugar, la colineraridad/correlaciones no son el problema. Su dimensionalidad lo es. 100 variables es lo suficientemente grande como para que, incluso con 10 millones de puntos de datos, me preocupe que k-means pueda encontrar patrones espurios en los datos y ajustarse a ellos. En su lugar, piense en utilizar PCA para comprimirlos en un número más manejable de dimensiones, digamos 10 o 12 para empezar (quizá mucho más alto, quizá mucho más bajo; tendrá que mirar la varianza a lo largo de cada componente y jugar un poco para encontrar el número correcto). De este modo, acercará artificialmente algunas muestras, sí, pero lo hará de un modo que debería preservar la mayor parte de la varianza de los datos y que eliminará preferentemente las correlaciones.

\~

EDITAR:

Re, comentarios más abajo sobre PCA. Sí, tiene absolutamente patologías. Pero es bastante rápido y fácil de probar, por lo que sigue sin parecerme una mala apuesta si se quiere reducir la dimensionalidad del problema.

A este respecto, he probado a introducir rápidamente algunos conjuntos de datos sintéticos de 100 dimensiones en un algoritmo k-means para ver qué resultaba. Aunque las estimaciones de la posición central de los conglomerados no eran muy precisas, las estimaciones de la posición central de los conglomerados sí lo eran. afiliación (es decir, si dos muestras se asignaron al mismo conglomerado o no, que parece ser lo que le interesa al OP) era mucho mejor de lo que pensaba. Así que mi corazonada de antes estaba muy posiblemente equivocada - k-means puede funcionar bien en el r

2voto

Amadiere Puntos 5606

En un ejemplo de juguete en 2D o 3D, no debería haber mucha diferencia, sólo añade algo de redundancia a tus datos: todos tus puntos están en un hiperplano impar, (d-1) dimensional. También lo están las medias de los clusters. Y la distancia en este (d-1) hiperplano dimensional es un múltiplo lineal de la misma distancia, por lo que no cambia nada.

Si construye artificialmente dichos datos, por ejemplo, haciendo $(x,y)\mapsto(x,y,x+y)$ entonces haces distorsionar espacio, y hacer hincapié en la influencia de $x$ y $y$ . Si haces esto a todas las variables no importa; pero puedes cambiar fácilmente los pesos de esta manera. Esto enfatiza el hecho conocido de que normalizar y ponderar las variables es esencial . Si tiene correlaciones en sus datos, esto es más importante que nunca.

Veamos el ejemplo más sencillo: las variables duplicadas.

Si ejecuta el ACP en su conjunto de datos y duplica una variable, esto significa en la práctica duplicar el peso de esta variable. El ACP se basa en la suposición de que la varianza en cada dirección es igual de importante, por lo que debería ponderar cuidadosamente las variables (teniendo en cuenta las correlaciones y realizando cualquier otro preprocesamiento necesario) antes de realizar el ACP.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X