Variáveis ​​de "normalização" para SVD / PCA


17

Suponha que tenhamos N variáveis ​​mensuráveis, (uma1,uma2,...,umaN) , fazemos um número M>N de medições e, em seguida, desejamos realizar uma decomposição de valor singular nos resultados para encontrar os eixos de maior variância para a M pontos no espaço N dimensional. ( Nota: supor que os meios de umaEu já foram subtraídos, assim umaEu=0 0 para todo Eu .)

Agora, suponha que uma (ou mais) das variáveis ​​tenha uma magnitude característica significativamente diferente das demais. Por exemplo, uma1 poderia ter valores na gama de 10-100 enquanto que o resto pode ser em torno de 0,1-1 . Isto irá distorcer o eixo de maior variância em direção uma1 'eixo s muito.

A diferença de magnitudes pode ser simplesmente por causa de uma escolha infeliz da unidade de medida (se estamos falando de dados físicos, por exemplo, quilômetros x metros), mas, na verdade, as diferentes variáveis ​​podem ter dimensões totalmente diferentes (por exemplo, peso x volume), então pode não haver uma maneira óbvia de escolher unidades "comparáveis" para elas.

Pergunta: Gostaria de saber se existem formas comuns / padrão de normalizar os dados para evitar esse problema. Estou mais interessado em técnicas padrão que produzem magnitudes comparáveis ​​para uma1-umaN para esse fim, em vez de criar algo novo.

EDIT: Uma possibilidade é normalizar cada variável pelo seu desvio padrão ou algo semelhante. No entanto, o seguinte problema aparece: vamos interpretar os dados como uma nuvem de pontos no espaço N dimensional. Essa nuvem de pontos pode ser rotacionada e esse tipo de normalização fornecerá resultados finais diferentes (após o SVD), dependendo da rotação. (Por exemplo, no caso mais extremo, imagine girar os dados precisamente para alinhar os eixos principais com os eixos principais.)

Espero que não exista nenhuma maneira invariável de rotação para fazer isso, mas eu apreciaria se alguém pudesse me indicar alguma discussão sobre esse assunto na literatura, especialmente com relação a advertências na interpretação dos resultados.


4
O problema em si normalmente não é invariável para a rotação, porque cada uma das variáveis ​​é registrada com uma unidade de medida convencional apropriada. Por exemplo, pode estar em pés, um 2 em mícrons, um 3 em litros, etc. Mesmo quando todas as unidades são iguais, se as variáveis ​​medem diferentes tipos de coisas, as quantidades pelas quais elas variam provavelmente diferem em aspectos característicos dessas variáveis: mais uma vez, isso não é invariável para a rotação. Portanto, você deve abandonar a invariância da rotação como um princípio orientador ou consideração. uma1uma2uma3
whuber

Respostas:


11

As três normalizações comuns são centralização, dimensionamento e padronização.

Seja uma variável aleatória.X

A centralização é

xEu=xEu-x¯.

O resultante terá ¯ x * = 0 .xx¯=0 0

A escala é

xEu=xEu(EuxEu2).

O resultante terá Σ i x * i 2 = 1xixi2=1 .

Padronizar é centralizar e redimensionar. O resultante terá ¯ x = 0 e i x i 2 = 1 .xx¯=0ixi2=1


Você pode definir "SS", por favor?
precisa

Soma dos quadrados. Soma do quadrado Xi.
ttnphns

A razão para definir a soma dos quadrados como 1, e não a variação, é que os valores singulares corresponderão aos desvios padrão ao longo dos eixos principais (a menos que eu esteja enganado)?
precisa

Por favor, veja também minha edição da pergunta.
precisa

@Szabolcs, na verdade, posso perder um ponto da sua edição. Mas o PCA (ou SVD) é apenas uma rotação em si (um caso especial de rotação ortogonal dos eixos). Qualquer conversão (como centralização) ou encolhimento / dilatação (como escala) da nuvem deve afetar os resultados dessa rotação.
ttnphns

6

Você está absolutamente certo de que ter variáveis ​​individuais com variações muito diferentes pode ser problemático para o PCA, especialmente se essa diferença for devida a unidades diferentes ou dimensões físicas diferentes. Por esse motivo, a menos que as variáveis ​​sejam todas comparáveis ​​(mesma quantidade física, mesmas unidades), é recomendável executar o PCA na matriz de correlação em vez da matriz de covariância. Veja aqui:

Fazer PCA na matriz de correlação é equivalente a padronizar todas as variáveis ​​anteriores à análise (e depois fazer PCA na matriz de covariância). Padronizar significa centralizar e depois dividir cada variável pelo seu desvio padrão, para que todas elas se tornem de variação unitária. Isso pode ser visto como uma "mudança de unidades" conveniente, para tornar todas as unidades comparáveis.

Pode-se perguntar se às vezes pode haver uma maneira melhor de "normalizar" variáveis; por exemplo, pode-se optar por dividir por uma estimativa robusta da variação, em vez da variação bruta. Isso foi solicitado no segmento a seguir e veja a discussão que se segue (mesmo que nenhuma resposta definitiva tenha sido dada lá):

Finalmente, você estava preocupado que a normalização por desvio padrão (ou algo semelhante) não seja invariável na rotação. Bem, sim, não é. Mas, como o @whuber observou no comentário acima, não há uma maneira invariável de rotação: alterar unidades de variáveis ​​individuais não é uma operação invariável de rotação ! Não há nada com que se preocupar aqui.


4

Uma técnica comum antes de aplicar o PCA é subtrair a média das amostras. Se você não fizer isso, o primeiro vetor próprio será a média. Não tenho certeza se você fez isso, mas deixe-me falar sobre isso. Se falamos no código MATLAB: este é

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 pode ser visto na figura, acho que você deve subtrair a média dos dados se quiser analisar melhor a (co) variância. Os valores não ficarão entre 10-100 e 0,1-1, mas a média será zero. As variações serão encontradas como valores próprios (ou quadrado dos valores singulares). Os vetores próprios encontrados não são afetados pela escala de uma dimensão para o caso quando subtraímos a média tanto quanto o caso quando não o fazemos. Por exemplo, testei e observei o seguinte, que diz que subtrair a média pode ser importante para o seu caso. Portanto, o problema pode resultar não da variação, mas da diferença de conversão.

% 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

insira a descrição da imagem aqui


1
Eu deveria ter mencionado na pergunta que a média já foi subtraída. Vou editá-lo de acordo.
precisa

1
NN

1
Sei que pode não haver uma maneira invariável de rotação para fazê-lo, mas gostaria de pelo menos ler algumas discussões sobre esses problemas ... quaisquer sugestões são bem-vindas. Nota: Eu não tenho treinamento em estatística aplicada (apenas matemática, como linalg, teoria dos prob), então estou aprendendo essas coisas enquanto vou.
precisa

1
Quando você não centraliza as amostras (subtrai as médias das colunas), o primeiro vetor próprio geralmente não é o vetor de médias.
whuber

-1 Diminuiu o voto, porque esta resposta é apenas sobre centralização, enquanto a pergunta é sobre dimensionamento. Além disso, a afirmação de que o primeiro vetor próprio é necessariamente o vetor de meios está errada, conforme observado por @whuber.
ameba diz Restabelecer Monica

-5

Para normalizar os dados do PCA, a fórmula a seguir também usou

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

XctX


7
Quem disse algo sobre países ou anos?
Nick Stauner
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.