Visualización de datos multidimensionales (LSI) en 2D

11

Estoy usando indexación semántica latente para encontrar similitudes entre documentos (¡ gracias, JMS! )

Después de la reducción de dimensiones, probé la agrupación de k-means para agrupar los documentos en grupos, lo que funciona muy bien. Pero me gustaría ir un poco más lejos y visualizar los documentos como un conjunto de nodos, donde la distancia entre dos nodos es inversamente proporcional a su similitud (los nodos que son muy similares están muy juntos).

Me sorprende que no pueda reducir con precisión una matriz de similitud a un gráfico bidimensional ya que mis datos son> 2 dimensiones. Entonces mi primera pregunta: ¿hay una forma estándar de hacer esto?

¿Podría reducir mis datos a dos dimensiones y luego trazarlos como los ejes X e Y, y eso sería suficiente para un grupo de ~ 100-200 documentos? Si esta es la solución, ¿es mejor reducir mis datos a 2 dimensiones desde el principio, o hay alguna forma de elegir las dos "mejores" dimensiones de mis datos multidimensionales?

Estoy usando Python y la biblioteca gensim si eso hace la diferencia.

Jeff
fuente
¿Por qué necesitas reducir la dimensionalidad? Para construir el gráfico que desea, solo necesita bordes donde la longitud de un borde es proporcional a la distancia entre documentos. Ya lo tiene, de la métrica utilizada para su agrupación de k-means.
Aman
@Aman que no funciona para mostrar similitud entre> 2 documentos en un plano 2D (gráfico). claro, puedo trazar los puntos A y B con una separación basada en la distancia k-medias. pero luego, cuando necesito trazar el punto C, según las distancias a A y B, normalmente no hay ningún punto en el espacio 2D que satisfaga todas las relaciones por pares.
Jeff

Respuestas:

7

Para esto está diseñado MDS (escalamiento multidimensional). En resumen, si se le da una matriz de similitud M, desea encontrar la aproximación más cercana donde tiene rango 2. Esto se puede hacer calculando la SVD de donde . S M = V Λ V = X X X = V Λ 1 / 2S=XXSM=VΛV=XXX=VΛ1/2

Ahora, suponiendo que está permutado de modo que los valores propios están en orden decreciente, las dos primeras columnas de son su incrustación deseada en el plano.XΛX

Hay mucho código disponible para MDS (y me sorprendería si scipy no tiene alguna versión de él). En cualquier caso, siempre que tenga acceso a alguna rutina SVD en Python, está configurado.

Suresh Venkatasubramanian
fuente
1
Creo que LDA sería mejor para esto. PCA, a medida que pasa SVD, no conservaría ninguna información discriminatoria de clúster (clase), que es lo que busca el OP.
Zhubarb
0

Existe un software llamado ggobi que puede ayudarlo. Le permite explorar pseudoespacios multidimensionales. ¡Es principalmente para la exploración de datos, pero su interfaz es extremadamente amigable y 'simplemente funciona'!

Solo necesita un formato CSV (en RI generalmente solo use write.csv con los parámetros predeterminados) o un archivo XML (este formato le permite más control; generalmente guardo mi tabla en CSV, luego la exporto a XML con ggobi y la edito manualmente por ejemplo para cambiar el orden de algunos factores).

pedrosaurio
fuente