2012-05-11 17 views
5

Los k-medoids en la clara() función utiliza la distancia para formar racimos por lo que obtener este patrón:¿Cómo agrupar por tendencia en lugar de por distancia en R?

a <- matrix(c(0,1,3,2,0,.32,1,.5,0,.35,1.2,.4,.5,.3,.2,.1,.5,.2,0,-.1), byrow=T, nrow=5) 
cl <- clara(a,2) 
matplot(t(a),type="b", pch=20, col=cl$clustering) 

clustering by clara()

Pero yo quiero encontrar un método de agrupamiento que asigna un clúster para cada línea de acuerdo con su tendencia, entonces las líneas 1, 2 y 3 pertenecen a un grupo y las líneas 4 y 5 a otro.

Respuesta

5

Esta pregunta podría ser más adecuada para stats.stackexchange.com, pero aquí hay una solución de todos modos.

Su pregunta es en realidad "¿Cómo elijo la métrica de distancia correcta?". En lugar de la distancia euclidiana entre estos vectores, desea una distancia que mida la similitud en la tendencia.

Aquí hay una opción:

a1 <- t(apply(a,1,scale)) 
a2 <- t(apply(a1,1,diff)) 

cl <- clara(a2,2) 
matplot(t(a),type="b", pch=20, col=cl$clustering) 

enter image description here

En lugar de definir una nueva métrica de distancia, lo que he logrado esencialmente la misma cosa mediante la transformación de los datos. Primero escalando cada fila, de modo que podamos comparar tendencias relativas sin diferencias de escala que nos arrojen. A continuación, simplemente convertimos los datos a las diferencias.

Advertencia: Esto es no necesariamente va a funcionar para todos los datos de "tendencia". En particular, observar las diferencias sucesivas solo captura una faceta única y limitada de la "tendencia". Puede que tenga que pensar un poco en métricas más sofisticadas.

2

Más información preprocesamiento. Para cualquier extracción de datos, el preprocesamiento es el 90% del esfuerzo.

Por ejemplo, si desea agrupar por tendencias, entonces quizás deba aplicar el agrupamiento a las tendencias y no a los valores brutos. Entonces, por ejemplo, estandarice las curvas cada una a una media de 0 y una desviación estándar de 1. Luego calcule las diferencias de un valor al siguiente, luego aplique la agrupación a estos datos preprocesados.

+0

¿Es esto diferente de lo que @joran ha propuesto? Puede que no vea la diferencia – nachocab

+0

Habiendo leído su respuesta: no, no es sustancialmente diferente. Estoy sugiriendo una escala diferente. Sin embargo, el punto clave que quería señalar es que esto pertenece al paso importante de preprocesamiento que no debe descuidar. Es por eso que siempre se habla mucho sobre el proceso de KDD: https://en.wikipedia.org/wiki/Data_mining#Process Es el 90% del esfuerzo en la minería real, es como máximo el 5% de los resultados científicos, que centrarse en nuevos algoritmos. –