Variabili di "normalizzazione" per SVD / PCA


17

Supponiamo di avere N variabili misurabili, , facciamo un numero di misurazioni e quindi desideriamo eseguire una decomposizione di valore singolare sui risultati per trovare gli assi con la varianza più alta per i punti nello spazio N- dimensionale. ( Nota: supponiamo che i mezzi di a_i siano già stati sottratti, quindi \ langle a_i \ rangle = 0 per tutti i .)M > N(a1,a2,,aN)M>NNMNun i= 0 iaiai=0i

Supponiamo ora che una (o più) delle variabili abbia una grandezza caratteristica significativamente diversa dalle altre. Ad esempio a1 potrebbe avere valori nell'intervallo 10100 mentre il resto potrebbe essere circa 0.11 . Questo inclinerà molto l'asse della più alta varianza verso l'asse di a1 .

La differenza di magnitudo potrebbe semplicemente essere dovuta a una sfortunata scelta di unità di misura (se stiamo parlando di dati fisici, ad esempio chilometri vs metri), ma in realtà le diverse variabili potrebbero avere dimensioni totalmente diverse (ad esempio peso vs volume), quindi potrebbe non esserci alcun modo ovvio per scegliere unità "comparabili" per loro.

Domanda: Vorrei sapere se esistono metodi standard / comuni per normalizzare i dati per evitare questo problema. Sono più interessato alle tecniche standard che producono magnitudini comparabili per a1aN per questo scopo piuttosto che inventare qualcosa di nuovo.

EDIT: una possibilità è quella di normalizzare ogni variabile con la sua deviazione standard o qualcosa di simile. Tuttavia, appare il seguente problema: interpretiamo i dati come una nuvola di punti nello spazio N -dimensionale. Questa nuvola di punti può essere ruotata e questo tipo di normalizzazione fornirà risultati finali diversi (dopo SVD) a seconda della rotazione. (Ad esempio, nel caso più estremo, immagina di ruotare i dati con precisione per allineare gli assi principali con gli assi principali.)

Mi aspetto che non ci sia alcun modo invariante di rotazione per farlo, ma apprezzerei se qualcuno potesse indicarmi qualche discussione su questo problema in letteratura, specialmente riguardo alle avvertenze nell'interpretazione dei risultati.


4
Il problema stesso di solito non è invariante alla rotazione, poiché ciascuna delle variabili viene registrata con un'unità di misura convenzionale appropriata. Ad esempio, potrebbe essere in piedi, in micron, in litri, ecc. Anche quando tutte le unità sono uguali, se le variabili misurano diversi tipi di cose, gli importi con cui variano probabilmente differiranno nei modi caratteristici di tali variabili : ancora una volta, questo non è invariante alla rotazione. Pertanto dovresti abbandonare l'invarianza di rotazione come principio guida o considerazione. a 2 a 3a1a2a3
whuber

Risposte:


11

Le tre normalizzazioni comuni sono centratura, ridimensionamento e standardizzazione.

Lascia che sia una variabile casuale.X

Il centraggio è

xi=xix¯.

Il risultante avrà .¯ x = 0xx¯=0

Il ridimensionamento è

xi=xi(ixi2).

La risultante avrà .xixi2=1

La standardizzazione è centrare, quindi ridimensionare. Il risultante avrà e .xx¯=0ixi2=1


Puoi definire "SS" per favore?
Szabolcs,

Somma dei quadrati. Somma del quadrato Xi.
ttnphns,

Il motivo per cui la somma dei quadrati è 1, e non la varianza, è che i valori singolari corrisponderanno alle deviazioni standard lungo gli assi principali (a meno che non mi sbagli)?
Szabolcs,

Vedi anche la mia modifica alla domanda.
Szabolcs,

@Szabolcs, in realtà potrei perdere un punto della tua modifica. Ma PCA (o SVD) è solo una rotazione stessa (un caso speciale di rotazione ortogonale degli assi). Qualsiasi traduzione (come il centraggio) o la riduzione / dilatazione (come il ridimensionamento) del cloud dovrebbero influenzare i risultati di questa rotazione.
ttnphns,

7

Hai assolutamente ragione a dire che avere variabili individuali con varianze molto diverse può essere problematico per PCA, specialmente se questa differenza è dovuta a unità diverse o dimensioni fisiche diverse. Per tale motivo, a meno che le variabili non siano tutte comparabili (stessa quantità fisica, stesse unità), si consiglia di eseguire PCA sulla matrice di correlazione anziché sulla matrice di covarianza. Vedere qui:

Fare PCA su matrice di correlazione equivale a standardizzare tutte le variabili prima dell'analisi (e quindi fare PCA su matrice di covarianza). Standardizzare significa centrare e quindi dividere ogni variabile per la sua deviazione standard, in modo che tutte diventino di varianza unitaria. Questo può essere visto come un comodo "cambio di unità", per rendere comparabili tutte le unità.

Ci si può chiedere se a volte potrebbe esserci un modo migliore di "normalizzare" le variabili; per esempio, si può scegliere di dividere per qualche solida stima della varianza, anziché per la varianza grezza. Questo è stato chiesto nel seguente thread e vedere la discussione che segue (anche se lì non è stata data una risposta definitiva):

Infine, eri preoccupato che la normalizzazione per deviazione standard (o qualcosa di simile) non fosse invariante alla rotazione. Beh, sì, non lo è. Ma, come ha osservato @whuber nel commento sopra, non esiste un modo invariante di rotazione per farlo: cambiare unità di singole variabili non è un'operazione invariante di rotazione ! Non c'è nulla di cui preoccuparsi qui.


Ho capito per PCA. Si consiglia inoltre di eseguire qualsiasi tipo di normalizzazione prima di eseguire la decomposizione a valore singolo?
hipoglucido,

4

Una tecnica comune prima di applicare la PCA è quella di sottrarre la media dai campioni. Se non lo fai, il primo autovettore sarà la media. Non sono sicuro che tu l'abbia fatto, ma lascia che ne parli. Se parliamo nel codice MATLAB: questo è

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

Come si può vedere dalla figura, penso che dovresti sottrarre la media dai dati se vuoi analizzare meglio la (co) varianza. Quindi i valori non saranno compresi tra 10-100 e 0,1-1, ma la loro media sarà tutta zero. Le varianze si troveranno come autovalori (o quadrato dei valori singolari). Gli autovettori trovati non sono influenzati dalla scala di una dimensione per il caso quando sottraggiamo la media tanto quanto il caso quando non lo facciamo. Ad esempio, ho testato e osservato quanto segue che dice che sottrarre la media potrebbe essere importante per il tuo caso. Quindi il problema potrebbe non derivare dalla varianza ma dalla differenza di traduzione.

% 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
Avrei dovuto menzionare nella domanda che la media è già stata sottratta. Lo modificherò di conseguenza.
Szabolcs,

1
NN

1
Mi rendo conto che potrebbe non esserci un modo invariante di rotazione per farlo, ma mi piacerebbe almeno leggere alcune discussioni su questi problemi ... qualsiasi suggerimento benvenuto. Nota: non ho alcuna formazione in stat applicata (solo matematica, come linalg, teoria dei prob), quindi sto imparando queste cose mentre sto andando.
Szabolcs,

1
Quando non centrate i campioni (sottraete i mezzi dalle colonne), il primo autovettore di solito non è il vettore dei mezzi.
whuber

-1 Downvoted, perché questa risposta riguarda solo il centraggio, mentre la domanda riguarda il ridimensionamento. Inoltre, l'affermazione secondo cui il primo autovettore è necessariamente il vettore dei mezzi è errata, come osservato da @whuber.
ameba dice di reintegrare Monica il

-5

Per normalizzare i dati per PCA, è stata utilizzata anche la seguente formula

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

XctX


7
Chi ha parlato di paesi o anni?
Nick Stauner,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.