Variables de "normalización" para SVD / PCA


17

Supongamos que tenemos variables medibles, , hacemos un número de mediciones y luego deseamos realizar una descomposición de valores singulares en los resultados para encontrar los ejes de mayor varianza para los puntos en el espacio -dimensional. ( Nota: suponga que las medias de ya se han restado, por lo que para todo .)( a 1 , a 2 , , a N ) M > NN(a1,a2,,aN)M>NNMNun i= 0 iaiai=0i

Ahora suponga que una (o más) de las variables tiene una magnitud característica significativamente diferente que el resto. Por ejemplo, podría tener valores en el rango de mientras que el resto podría estar alrededor de . Esto sesgará mucho el eje de mayor varianza hacia el eje de . 10 - 100 0.1 - 1 a 1a1101000.11a1

La diferencia en las magnitudes podría deberse simplemente a una desafortunada elección de la unidad de medida (si hablamos de datos físicos, por ejemplo, kilómetros frente a metros), pero en realidad las diferentes variables pueden tener dimensiones totalmente diferentes (por ejemplo, peso frente a volumen), por lo que Es posible que no haya una forma obvia de elegir unidades "comparables" para ellos.

Pregunta: Me gustaría saber si existen formas estándar / comunes de normalizar los datos para evitar este problema. Estoy más interesado en técnicas estándar que producen magnitudes comparables para para este propósito en lugar de crear algo nuevo.a1aN

EDITAR: Una posibilidad es normalizar cada variable por su desviación estándar o algo similar. Sin embargo, aparece el siguiente problema: interpretemos los datos como una nube de puntos en el espacio -dimensional. Esta nube de puntos se puede girar, y este tipo de normalización dará resultados finales diferentes (después de la SVD) dependiendo de la rotación. (Por ejemplo, en el caso más extremo, imagine rotar los datos con precisión para alinear los ejes principales con los ejes principales).N

Espero que no haya una forma invariable de rotación para hacer esto, pero agradecería si alguien pudiera señalarme alguna discusión sobre este tema en la literatura, especialmente con respecto a las advertencias en la interpretación de los resultados.


44
El problema en sí mismo generalmente no es la rotación invariable, porque cada una de las variables se registra con una unidad de medida convencional apropiada para ella. Por ejemplo, puede estar en pies, en micras, en litros, etc. Incluso cuando todas las unidades son iguales, si las variables miden diferentes tipos de cosas, las cantidades en las que varían probablemente diferirán en las características de esas variables. : una vez más, esto no es invariante de rotación. Por lo tanto, debe abandonar la invariancia de rotación como principio rector o consideración. a 2 a 3a1a2a3
whuber

Respuestas:


11

Las tres normalizaciones comunes son centrar, escalar y estandarizar.

Deje ser una variable aleatoria.X

El centrado es

xi=xix¯.

La resultante tendrá .¯ x = 0xx¯=0

La escala es

xi=xi(ixi2).

La resultante tendrá .xixi2=1

Estandarizar es centrar y luego escalar. La resultante tendrá y .xx¯=0ixi2=1


¿Puedes definir "SS" por favor?
Szabolcs

Suma de cuadrados. Suma de Xi al cuadrado.
ttnphns

La razón para establecer la suma de cuadrados en 1, y no la varianza, es que los valores singulares corresponderán a las desviaciones estándar a lo largo de los ejes principales (a menos que me equivoque).
Szabolcs

Por favor, vea también mi edición de la pregunta.
Szabolcs

@Szabolcs, en realidad puedo perder un punto de tu edición. Pero PCA (o SVD) es solo una rotación en sí (un caso especial de rotación ortogonal de los ejes). Cualquier traslación (como centrado) o contracción / dilatación (como escala) de la nube debería afectar los resultados de esta rotación.
ttnphns

7

Tiene toda la razón en que tener variables individuales con variaciones muy diferentes puede ser problemático para PCA, especialmente si esta diferencia se debe a diferentes unidades o diferentes dimensiones físicas. Por esa razón, a menos que todas las variables sean comparables (misma cantidad física, mismas unidades), se recomienda realizar PCA en la matriz de correlación en lugar de la matriz de covarianza. Mira aquí:

Hacer PCA en la matriz de correlación es equivalente a estandarizar todas las variables antes del análisis (y luego hacer PCA en la matriz de covarianza). Estandarizar significa centrar y luego dividir cada variable por su desviación estándar, de modo que todas se conviertan en unidades de varianza. Esto puede verse como un "cambio de unidades" conveniente, para hacer que todas las unidades sean comparables.

Uno puede preguntar si a veces puede haber una mejor manera de "normalizar" las variables; por ejemplo, uno puede elegir dividir por una estimación robusta de la varianza, en lugar de por la varianza en bruto. Esto se preguntó en el siguiente hilo, y vea la discusión subsiguiente (aunque no se dio una respuesta definitiva allí):

Finalmente, le preocupaba que la normalización por desviación estándar (o algo similar) no sea invariante de rotación. Pues sí, no lo es. Pero, como comentó @whuber en el comentario anterior, no existe una forma de rotación invariable: ¡cambiar las unidades de variables individuales no es una operación de rotación invariante ! No hay nada de qué preocuparse aquí.


Lo consigo para PCA. Pero, ¿también se recomienda realizar algún tipo de normalización antes de ejecutar la descomposición de valor único?
hipoglucido

4

Una técnica común antes de aplicar PCA es restar la media de las muestras. Si no lo hace, el primer vector propio será la media. No estoy seguro de si lo has hecho, pero déjame hablar sobre eso. Si hablamos en código MATLAB: esto es

clear, clf
clc
%% Let us draw a line
scale = 1;
x = scale .* (1:0.25:5);
y = 1/2*x + 1;

%% and add some noise
y = y + rand(size(y));

%% plot and see
subplot(1,2,1), plot(x, y, '*k')
axis equal

%% Put the data in columns and see what SVD gives
A = [x;y];
[U, S, V] = svd(A);

hold on
plot([mean(x)-U(1,1)*S(1,1) mean(x)+U(1,1)*S(1,1)], ...
     [mean(y)-U(2,1)*S(1,1) mean(y)+U(2,1)*S(1,1)], ...
     ':k');
plot([mean(x)-U(1,2)*S(2,2) mean(x)+U(1,2)*S(2,2)], ...
     [mean(y)-U(2,2)*S(2,2) mean(y)+U(2,2)*S(2,2)], ...
     '-.k');
title('The left singular vectors found directly')

%% Now, subtract the mean and see its effect
A(1,:) = A(1,:) - mean(A(1,:));
A(2,:) = A(2,:) - mean(A(2,:));

[U, S, V] = svd(A);

subplot(1,2,2)
plot(x, y, '*k')
axis equal
hold on
plot([mean(x)-U(1,1)*S(1,1) mean(x)+U(1,1)*S(1,1)], ...
     [mean(y)-U(2,1)*S(1,1) mean(y)+U(2,1)*S(1,1)], ...
     ':k');
plot([mean(x)-U(1,2)*S(2,2) mean(x)+U(1,2)*S(2,2)], ...
     [mean(y)-U(2,2)*S(2,2) mean(y)+U(2,2)*S(2,2)], ...
     '-.k');
title('The left singular vectors found after subtracting mean')

Como se puede ver en la figura, creo que debería restar la media de los datos si desea analizar mejor la (co) varianza. Entonces los valores no estarán entre 10-100 y 0.1-1, pero su media será cero. Las variaciones se encontrarán como los valores propios (o al cuadrado de los valores singulares). Los vectores propios encontrados no se ven afectados por la escala de una dimensión para el caso cuando restamos la media tanto como el caso cuando no lo hacemos. Por ejemplo, he probado y observado lo siguiente que dice que restar la media podría ser importante para su caso. Por lo tanto, el problema puede resultar no de la varianza sino de la diferencia de traducción.

% scale = 0.5, without subtracting mean
U =

-0.5504   -0.8349
-0.8349    0.5504


% scale = 0.5, with subtracting mean
U =

-0.8311   -0.5561
-0.5561    0.8311


% scale = 1, without subtracting mean
U =

-0.7327   -0.6806
-0.6806    0.7327

% scale = 1, with subtracting mean
U =

-0.8464   -0.5325
-0.5325    0.8464


% scale = 100, without subtracting mean
U =

-0.8930   -0.4501
-0.4501    0.8930


% scale = 100, with subtracting mean
U =

-0.8943   -0.4474
-0.4474    0.8943

ingrese la descripción de la imagen aquí


1
Debería haber mencionado en la pregunta que la media ya se ha restado. Lo editaré en consecuencia.
Szabolcs

1
NN

1
Me doy cuenta de que puede que no haya una forma invariable de rotación para hacerlo, pero me encantaría leer al menos una discusión sobre estos temas ... cualquier sugerencia bienvenida. Nota: no tengo entrenamiento en estadística aplicada (solo matemáticas, como linalg, teoría del problema), así que estoy aprendiendo estas cosas a medida que avanzo.
Szabolcs

1
Cuando no centra las muestras (resta las medias de las columnas), el primer vector propio generalmente no es el vector de medias.
whuber

-1 Voto negativo, porque esta respuesta solo se trata de centrar, mientras que la pregunta se trata de escalar. Además, la afirmación de que el primer vector propio es necesariamente el vector de los medios es incorrecta, como lo señaló @whuber.
ameba dice Reinstate Monica

-5

Para normalizar los datos para PCA, también se usa la siguiente fórmula

SC=100Xmin(X)max(X)min(X)

XctX


77
¿Quién dijo algo sobre países o años?
Nick Stauner
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.