8 votos

Cómo visualizar la verdadera dimensionalidad de los datos?

Tengo un conjunto de datos que nominalmente 16-dimensional. Tengo cerca de 100 muestras en un caso, y cerca de 20.000 en otro. Basado en diversos análisis exploratorios he llevado a cabo utilizando PCA y mapas de calor, estoy convencido de que la verdadera dimensionalidad (es decir, el número de dimensiones necesarias para la captura de la mayoría de la "señal") es de alrededor de 4. Quiero crear una presentación para que el efecto de una presentación. La "sabiduría convencional" acerca de este tipo de datos, lo que yo estoy buscando para refutar, es que la verdadera dimensionalidad es uno o dos.

¿Qué es una buena, la simple visualización para mostrar la verdadera dimensionalidad de un conjunto de datos? De preferencia debe ser comprensible para las personas que tienen antecedentes en las estadísticas, pero no son "reales" de los estadísticos.

6voto

Shawn Puntos 8120

Un enfoque estándar sería hacer PCA y, a continuación, mostrar un gráfico de sedimentación, que usted debería ser capaz de conseguir que fuera de cualquier software que usted puede elegir. Un poco de bricolaje y usted podría hacer más interpretables para su audiencia en particular si es necesario. A veces ellos pueden ser convincentes, pero a menudo son ambiguas y no a lugar a la objeción acerca de cómo leer, de manera un gráfico de sedimentación de mayo (edit: no!) ser ideal. Vale la pena un vistazo, aunque.

4voto

Akira Puntos 1061

Una manera de visualizar esto sería como sigue:

  1. Realizar un PCA en los datos.
  2. Deje $V$ ser el espacio vectorial generado por los dos primeros componentes principales vectores, y deje $V^\top$ ser el complemento.
  3. Descomponer cada uno de vectores $x_i$ en el conjunto de datos como la suma de un elemento en $V$ más un resto plazo (que es en $V^\top$). Escribo esto como $x_i = v_i + c_i$. (esto debería ser fácil de usar los resultados de la PCA.)
  4. Crear un gráfico de dispersión de $||c_i||$ frente al $||v_i||$.

Si los datos son verdaderamente $\le 2$ dimensiones, la trama debe verse como una línea plana.

En Matlab (ducking de todos los zapatos lanzados):

lat_d = 2;   %the latent dimension of the generating process
vis_d = 16;  %manifest dimension
n = 10000;   %number of samples
x = randn(n,lat_d) * randn(lat_d,vis_d) + 0.1 * randn(n,vis_d); %add some noise
xmu = mean(x,1);
xc = bsxfun(@minus,x,xmu);    %Matlab syntax for element recycling: ugly, weird.
[U,S,V] = svd(xc);  %this will be slow;
prev = U(:,1:2) * S(1:2,1:2);
prec = U(:,3:end) * S(3:end,3:end);
normv = sqrt(sum(prev .^2,2));
normc = sqrt(sum(prec .^2,2));
scatter(normv,normc);
axis equal;  %to illlustrate the differences in scaling, make axis 'square'

Esto genera el siguiente diagrama de dispersión:

scatter plot made by the code

Si cambias lat_d 4, la línea es menos plana.

0voto

Steve Scheffler Puntos 1166

He hecho similar usando PROC Varclus en SAS. La idea básica es generar un 4 solución de clúster, escoger el más alto de la variable correlacionada con cada clúster y, a continuación, para demostrar que este 4 solución de clúster explica más de la variación de los dos solución de clúster. Para el 2 solución de clúster usted podría utilizar cualquiera Varclus o los 2 primeros Componentes Principales, pero me gusta Varclus ya que todo se explica a través de variables y no los componentes. Hay un varclus en R, pero no estoy seguro de si se hace la misma cosa.

-Ralph Inviernos

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