¿Técnica de reducción de dimensionalidad para maximizar la separación de grupos conocidos?


8

Digamos que tengo un montón de puntos de datos en R ^ n, donde n es bastante grande (como 50). Sé que estos datos se dividen en 3 grupos, y sé de qué grupo forma parte cada punto de datos. Todo lo que quiero hacer es visualizar estos grupos en 2D de tal manera que maximice la separación visual entre grupos que veo, con el objetivo de demostrar que los grupos son fácilmente separables en función de la ubicación del punto de datos en R ^ n solo.

La forma en que he estado haciendo esto hasta ahora implica hacer una transformación de PCA en los puntos de datos y luego visualizar pares de PC al azar hasta que encuentre uno donde los grupos parecen estar bastante limpios. Sin embargo, este enfoque parece bastante ad hoc, y parece que debería haber una manera fácil de encontrar una rotación de datos de estilo PCA que, en lugar de maximizar la varianza general, maximice la separación entre grupos.

¿Existe una técnica estándar por ahí que haga esto? Si no, ¿alguna idea sobre cómo crear tal transformación?


Quizás te interese la Búsqueda de proyección . (Disponible en el software GGobi .)
chl

Respuestas:


6

"una rotación de datos de estilo PCA que, en lugar de maximizar la varianza general, maximiza la separación entre grupos". El análisis discriminante es exactamente una técnica de este tipo. Un componente principal maximiza la varianza a lo largo de él. Una función discriminante maximiza la relación entre varianza-agrupación / varianza dentro de agrupación a lo largo de ella.


El análisis discriminante no se presenta canónicamente como algo que produce una incrustación 2D de los datos. ¿Qué incrustación 2D sugiere extraer, por ejemplo, de Fisher's LDA?
eric_kernfeld

@eric_kernfeld, se trazan fácilmente los datos en el espacio de las funciones discriminantes. Además, es fácil mostrar las funciones como ejes adicionales dentro del espacio de las variables originales, como se muestra aquí y aquí .
ttnphns

8

Hay dos métodos que me vienen a la mente que podrían interesarle. El primero es hacer uso de grupos conocidos y Goldberger et al . Lo llaman "Análisis de componentes de vecindad" .

La idea es que aprenda un mapeo (por ejemplo, afín) desde el espacio dimensional superior a un espacio visualizable. (por ejemplo, ). Este mapeo se estima maximizando el número promedio de clasificación correcta si se utiliza una variación de la clasificación de vecino k-más cercano. Hay algunos resultados impresionantes obtenidos:UNA:RnorteR2

NCA en el conjunto de datos de vino, caras y dígitos

El otro es tSNE , que aprende una asignación (por ejemplo, ). Este mapeo no tiene restricciones, pero la pérdida optimizada (no wrt para alguna parametrización, pero con nuevos puntos en ) es que el nuevo espacio refleja distancias similares al espacio original. Similar es bastante complicado aquí, se basa en asumir ciertas distribuciones de los puntos en el espacio y la correspondiente divergencia KL.UNA:RnorteR2R2

Para este último, hay un código matlab que puede encontrar en el enlace dado. Aquí hay una visualización del conjunto de datos MNIST:

tSNE en MNIST


3

Es posible que desee ver este documento:

G. Sanguinetti, Reducción de dimensionalidad de conjuntos de datos agrupados, IEEE Trans. Análisis de patrones e inteligencia artificial (PAMI) 30 (3), 535-540 (2008) (www)

Que describe una versión no supervisada de análisis discriminante lineal, he visto algunas demostraciones de esto y parece una herramienta muy útil para tener en la caja de herramientas.

Si ya sabe a qué clases pertenece cada muestra, entonces (como sugiere ttnphns) desea un Análisis discriminante lineal, el libro de Andrew Webb sobre reconocimiento de patrones estadísticos es un buen libro de referencia para ese tipo de cosas.


0

El artículo "Un enfoque unificado para PCA, PLS, MLR y CCA" (por M Borga et al) proporciona una descripción compacta sobre varios tipos de métodos de proyección lineal, incluidos PCA y LDA.


0

Los mínimos cuadrados parciales harán lo que quieras. La biblioteca "pls" en R es lo que tradicionalmente he usado. Aquí hay un ejemplo que crea 3 grupos de 50 puntos, los ensambla en un marco de datos con etiquetas de grupo y ejecuta PLS en ellos:

library(MASS)
library(pls)

pts1 = mvrnorm(50,c(3,0,3),diag(c(1,1,1)))
pts2 = mvrnorm(50,c(-3,0,3),diag(c(1,1,1)))
pts3 = mvrnorm(50,c(3,3,-3),diag(c(1,1,1)))
pts = as.data.frame(rbind(pts1,pts2,pts3))

pts$labels = c(rep(1,50),rep(2,50),rep(3,50))

plsresult = plsr(labels~.,ncomp=2,data=pts)
plot(plsresult$scores,col=pts$labels)

¿Por qué no utilizar el análisis discriminante PLS en este caso?
chl
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.