Variables de «normalisation» pour SVD / PCA


17

Supposons que nous ayons variables mesurables, , nous effectuons un nombre de mesures, puis souhaitons effectuer une décomposition en valeurs singulières sur les résultats pour trouver les axes de variance la plus élevée pour les points dans l'espace dimensionnel. ( Remarque: supposons que les moyennes de ont déjà été soustraites, donc pour tout .)N(a1,a2,,aN)M>NMNaiai=0i

Supposons maintenant qu'une (ou plusieurs) des variables ait une amplitude caractéristique significativement différente des autres. Par exemple, pourrait avoir des valeurs comprises entre et tandis que le reste pourrait être d'environ . Cela faussera beaucoup l'axe de la plus grande variance vers l'axe de .a1101000.11a1

La différence d'amplitude pourrait simplement être due à un choix malheureux d'unité de mesure (si nous parlons de données physiques, par exemple des kilomètres par rapport aux mètres), mais en fait, les différentes variables peuvent avoir des dimensions totalement différentes (par exemple, le poids par rapport au volume), donc il pourrait ne pas y avoir de moyen évident de choisir des unités "comparables" pour eux.

Question: Je voudrais savoir s'il existe des moyens standard / communs de normaliser les données pour éviter ce problème. Je suis plus intéressé par les techniques standard qui produisent des amplitudes comparables pour à cet effet plutôt que de trouver quelque chose de nouveau.a1aN

EDIT: Une possibilité est de normaliser chaque variable par son écart-type ou quelque chose de similaire. Cependant, le problème suivant apparaît alors: interprétons les données comme un nuage de points dans l'espace dimensionnel. Ce nuage de points peut être tourné, et ce type de normalisation donnera des résultats finaux différents (après la SVD) en fonction de la rotation. (Par exemple, dans le cas le plus extrême, imaginez une rotation précise des données pour aligner les axes principaux avec les axes principaux.)N

Je m'attends à ce qu'il n'y ait pas de méthode invariante de rotation pour ce faire, mais j'apprécierais que quelqu'un me pointe vers une discussion de cette question dans la littérature, en particulier concernant les mises en garde dans l'interprétation des résultats.


4
Le problème lui-même n'est généralement pas invariant par rotation, car chacune des variables est enregistrée avec une unité de mesure conventionnelle qui lui convient. Par exemple, peut être en pieds, en microns, en litres, etc. Même lorsque toutes les unités sont les mêmes, si les variables mesurent différents types de choses, les quantités par lesquelles elles varient varieront probablement de manière caractéristique de ces variables : encore une fois, ce n'est pas invariant de rotation. Par conséquent, vous devez abandonner l'invariance de rotation comme principe directeur ou considération. a 2 a 3a1a2a3
whuber

Réponses:


11

Les trois normalisations courantes sont le centrage, la mise à l'échelle et la standardisation.

Soit une variable aléatoire.X

Le centrage est

xi=xix¯.

La résultante aura ¯ x = 0 .xx¯=0

La mise à l'échelle est

xi=xi(ixi2).

La résultante aura i x i 2 = 1 .xixi2=1

La normalisation, c'est le centrage puis la mise à l'échelle. La résultante aura ¯ x = 0 et i x i 2 = 1 .xx¯=0ixi2=1


Pouvez-vous définir "SS" s'il vous plaît?
Szabolcs

Somme des carrés. Somme de Xi au carré.
ttnphns

La raison pour laquelle la somme des carrés est fixée à 1, et non la variance, est-ce que les valeurs singulières correspondront aux écarts-types le long des axes principaux (sauf erreur de ma part)?
Szabolcs

Veuillez également consulter ma modification de la question.
Szabolcs

@Szabolcs, je peux en fait rater un point de votre montage. Mais l'ACP (ou SVD) n'est qu'une rotation elle-même (un cas particulier de rotation orthogonale des axes). Toute translation (comme le centrage) ou rétrécissement / dilatation (comme la mise à l'échelle) du nuage devrait affecter les résultats de cette rotation.
ttnphns

7

Vous avez absolument raison d'avoir des variables individuelles avec des variances très différentes peut être problématique pour l'ACP, surtout si cette différence est due à différentes unités ou différentes dimensions physiques. Pour cette raison, à moins que les variables ne soient toutes comparables (même quantité physique, mêmes unités), il est recommandé d'effectuer l'ACP sur la matrice de corrélation au lieu de la matrice de covariance. Vois ici:

Faire PCA sur matrice de corrélation équivaut à standardiser toutes les variables avant l'analyse (puis faire PCA sur matrice de covariance). Normaliser signifie centrer puis diviser chaque variable par son écart-type, de sorte que toutes deviennent de variance unitaire. Cela peut être vu comme un "changement d'unités" commode, pour rendre toutes les unités comparables.

On peut se demander s'il pourrait parfois y avoir un meilleur moyen de "normaliser" les variables; Par exemple, on peut choisir de diviser par une estimation robuste de la variance, plutôt que par la variance brute. Cela a été demandé dans le fil suivant, et voir la discussion qui a suivi (même si aucune réponse définitive n'y a été donnée):

Enfin, vous craigniez que la normalisation par écart-type (ou quelque chose de similaire) ne soit pas invariante par rotation. Eh bien, oui, ce n'est pas le cas. Mais, comme l'a remarqué @whuber dans le commentaire ci-dessus, il n'y a pas de façon invariante de rotation de le faire: changer les unités de variables individuelles n'est pas une opération invariante de rotation ! Il n'y a rien à craindre ici.


Je l'obtiens pour PCA. Mais est-il également recommandé d'effectuer tout type de normalisation avant d'exécuter la décomposition à valeur unique?
hipoglucido

4

Avant d'appliquer l'APC, une technique courante consiste à soustraire la moyenne des échantillons. Si vous ne le faites pas, le premier vecteur propre sera la moyenne. Je ne sais pas si vous l'avez fait, mais permettez-moi d'en parler. Si nous parlons en code MATLAB: c'est

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')

Comme le montre la figure, je pense que vous devriez soustraire la moyenne des données si vous souhaitez mieux analyser la (co) variance. Les valeurs ne seront alors pas comprises entre 10-100 et 0,1-1, mais leur moyenne sera toutes nulles. Les variances seront trouvées comme les valeurs propres (ou carré des valeurs singulières). Les vecteurs propres trouvés ne sont pas affectés par l'échelle d'une dimension pour le cas où l'on soustrait la moyenne autant que le cas quand on ne le fait pas. Par exemple, j'ai testé et observé les éléments suivants qui indiquent que la soustraction de la moyenne peut être importante pour votre cas. Le problème peut donc résulter non pas de la variance mais de la différence de conversion.

% 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


1
J'aurais dû mentionner dans la question que la moyenne a déjà été soustraite. Je vais le modifier en conséquence.
Szabolcs

1
NN

1
Je me rends compte qu'il n'y a peut-être pas de méthode invariante de rotation pour le faire, mais j'aimerais au moins lire quelques discussions sur ces questions ... tous les conseils sont les bienvenus. Remarque: Je n'ai aucune formation en statistique appliquée (uniquement en mathématiques, comme linalg, théorie des prob), donc j'apprends ce genre de choses au fur et à mesure.
Szabolcs

1
Lorsque vous ne centrez pas les échantillons (soustrayez les moyennes des colonnes), le premier vecteur propre n'est généralement pas le vecteur des moyennes.
whuber

-1 Voté, car cette réponse concerne uniquement le centrage, alors que la question concerne la mise à l'échelle. En outre, l'affirmation selon laquelle le premier vecteur propre est nécessairement le vecteur des moyens est fausse, comme l'a noté @whuber.
amibe dit Réintégrer Monica le

-5

Pour normaliser les données de l'ACP, la formule suivante a également été utilisée

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

XctX


7
Qui a parlé des pays ou des années?
Nick Stauner
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.