21 votos

"Normalización" de variables para SVD / PCA

Supongamos que tenemos $N$ variables medibles, $(a_1, a_2, \ldots, a_N)$ hacemos un número $M > N$ de mediciones, y luego desea realizar descomposición de valores singulares sobre los resultados para encontrar los ejes de mayor varianza para el $M$ puntos en $N$ -espacio dimensional. ( Nota: suponer que los medios de $a_i$ ya se han restado, por lo que $\langle a_i \rangle = 0$ para todos $i$ .)

Supongamos ahora que una (o varias) de las variables tiene una magnitud característica significativamente diferente a la del resto. Por ejemplo $a_1$ podría tener valores en el rango $10-100$ mientras que el resto podría estar en torno a $0.1-1$ . Esto sesgará el eje de mayor varianza hacia $a_1$ 'eje mucho.

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

Pregunta: Me gustaría saber si existe alguna forma estándar / común de normalizar los datos para evitar este problema. Me interesan más las técnicas estándar que producen magnitudes comparables para $a_1 - a_N$ para este fin en lugar de inventar algo nuevo.

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

Supongo que no habrá ninguna forma invariante de la rotación para hacerlo, pero agradecería que alguien me indicara algún debate sobre esta cuestión en la bibliografía, especialmente en lo que respecta a las advertencias en la interpretación de los resultados.

10voto

Uri Puntos 111

Las tres normalizaciones habituales son el centrado, el escalado y la normalización.

Sea $X$ sea una variable aleatoria.

Centrarse es $$x_i^* = x_i-\bar{x}.$$

El resultado $x^*$ tendrá $\bar{x^*}=0$ .

El escalado es $$x_i^* = \frac{x_i}{\sqrt{(\sum_{i}{x_i^2})}}.$$

El resultado $x^*$ tendrá $\sum_{i}{{{x_i^*}}^2} = 1$ .

Normalizar es centrar-entonces-escalar. El resultado $x^*$ tendrá $\bar{x^*}=0$ y $\sum_{i}{{{x_i^*}}^2} = 1$ .

4voto

petrichor Puntos 740

Una técnica habitual antes de aplicar el ACP es restar la media de las muestras. Si no lo haces, el primer vector propio será la media. No estoy seguro de que lo hayas hecho, pero permíteme que te hable de ello. 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 puede verse en la figura, creo que deberías restar la media de los datos si quieres analizar mejor la (co)varianza. Entonces los valores no estarán entre 10-100 y 0,1-1, sino que su media será toda cero. Las varianzas se encontrarán como los valores propios (o cuadrado de los valores singulares ). Los vectores propios encontrados no se ven afectados por la escala de una dimensión para el caso en que restamos la media tanto como para el caso en que no lo hacemos. Por ejemplo, he probado y observado lo siguiente que dice que restar la media puede importar para tu caso. Así que 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

enter image description here

-5voto

user2262511 Puntos 34

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

$\text{SC}=100\frac{X-\min(X)}{\max(X)-\min(X)}$

donde $X$ es el valor bruto de ese indicador para el país $c$ en año $t$ y $X$ describe todos los valores brutos de todos los países para ese indicador en todos los años.

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