Escolar Documentos
Profissional Documentos
Cultura Documentos
1o Semestre de 2005/2006
1 Introdução
Muitos dos algoritmos clássicos de processamento de sinal recorrem, de uma ou de outra forma,
a métodos de descorrelação de dados. As vantagens de tais técnicas baseiam-se num princı́pio
relativamente simples: ao descorrelacionar os dados, estamos a eliminar parte da informação
redundante em cada dimensão. Certos sinais, como é o caso de sinais fala ou de imagens, que
apresentam uma substancial correlação entre amostras ou “pixeis” consecutivos, são os can-
didatos ideais para os algoritmos de descorrelação. Os benefı́cios resultantes são vários: os
dados podem ser descritos de uma forma mais concisa, certas caracterı́sticas escondidas dos
dados podem vir à luz depois de transformadas, a distribuição dos dados pode ser represen-
tada (aproximadamente) pelas densidades individuais de cada dimensão. Porventura, um dos
métodos mais utilizados para a descorrelação de dados, é o método denominado análise em
componentes principais (ACP).
near de dimensão, relativa ao erro quadrático médio. Tal redução é vantajosa para compressão,
visualização dos dados, redução do cálculo necessário em fases de processamento posteriores,
etc. . .
2 Requisitos Teóricos
Os conceitos abordados nesta secção lidam com matrizes de covariância de vectores aleatórios
e com a decomposição em valores e vectores próprios destas matrizes. De seguida é definida a
notação utilizada.
Notação
2
2.1 Transformações Lineares e Matrizes de Covariância 3
Considere um vector aleatório x ∈ Rm , com uma média µx , e com uma matriz de covariância
Σx . Considere ainda a seguinte transformação:
x1
y1 a1,1 · · · a1,m b
1
. . .. .. .. ..
y = .. = .. . . . + . = Ax + b (1)
yn a1,n · · · an,m bn
xm
Σy = AΣx A⊤
Como era de espera, o vector b da equação (1), não afecta o valor da matriz de covariância, Σy :
b só afecta a média de y. De notar ainda que as matrizes de covariância têm que satisfazer as
seguintes propriedades:
3
2.2 Valores e Vectores Próprios 4
e é dado por:
E {xi xj } − µxi µxj
ρxi xj =
σxi σxj
e satisfaz as seguintes propriedades:
– −1 ≤ ρxi xj ≤ +1
– Para ρxi xj = ±1, xi e xj são totalmente correlacionadas (ex. xj = axi + b)
– Para ρxi xj = 0, xi e xj são descorrelacionadas
– Se xi e xj são independentes, então ρxi xj = 0. Convém no entanto notar que
descorrelação não implica independência: se ρxi xj = 0 não quer dizer que as
variáveis xi e xj sejam independentes.
Aγ = λγ (4a)
(A − λI) γ = 0 (4b)
A − λI = 0 (4c)
4
2.2 Valores e Vectores Próprios 5
• Para λ1 = 2 temos
1 −1 1 x 0
−1 3 −1 y = 0
1 −1 1 z 0
o que admite uma infinidade de soluções do tipo: x = −z, y = 0 (ex. γ 1 = [1, 0, −1]⊤ ).
• Para λ2 = 3 temos
0 −1 1 x 0
−1 2 −1 y = 0
1 −1 0 z 0
• Para λ3 = 6 temos
−3 −1 1 x 0
−1 −1 −1 y = 0
1 −1 −3 z 0
Sendo A uma matriz n×n com valores próprios distintos (λi 6= λj , ∀i 6= j, para i, j = 1, . . . , n),
existe um único vector próprio γ i associado a cada valor próprio λi 1 . No entanto, os vectores
próprios são indeterminados respectivamente a um factor de escala. Relativamente ao exemplo
1
No caso de haver um valor próprio com uma multiplicidade k > 1, poderá haver número entre 1 e k vectores
próprios associados ao valor próprio.
5
2.2 Valores e Vectores Próprios 6
De notar que em ambiente M ATLAB, os vectores próprios retornados pela função eig também
têm norma unitária:
6
2.3 Descorrelação de Dados 7
Seja Σx a matriz de covariância do vector aleatório, real, x. Se Σx for uma matriz não-singular3 ,
então Σx pode ser decomposto no seguinte produto matricial:
Σx = Γx Λx Γ⊤
x
para
λ 0 ··· 0
γ · · · γ1n 1 (5)
11 ..
.. .
.. 0 λ2 0 .
Γx = . . . . = γ 1, · · · , γ n Λx =
.. ..
. 0 . 0
γn1 · · · γnn
0 · · · 0 λn
y = Ax = Γ⊤
xx (6)
Σy = AΣx A⊤ = Γ⊤ ⊤ ⊤
x Σx Γx = Γx Γx Λx Γx Γx = Λx (7)
| {z }
Σx
Sendo a matriz Σy uma matriz diagonal, implica que os elementos do vector y são descorre-
lacionados entre si. Adicionalmente, cada valor próprio da matriz Σx corresponde ao valor da
variância σy2i , de cada dimensão de y. É habitual ordenar matriz Λx de forma a que os valores
próprios estejam em ordem descendente (i.e. λ1 ≥ λ2 ≥ . . . λn ). Sendo Γx a matriz de vectores
próprios correspondente as valores próprios ordenados, a transformação da equação (6) dá-nos
um vector y cujas primeiras dimensões variam mais do que as últimas.
3
Matrizes não-singulares são matrizes invertı́veis (se A for não-singular, então o determinante |A| =
6 0). De
notar que matrizes de covariância não-singulares também são definidas positivas (A ∈ Rn×n é uma matriz definida
positiva se x⊤ Ax > 0 para qualquer vector x ∈ Rn , real e não nulo).
7
3 Análise em Componentes Principais 8
componentes y. Isto indica-nos que certas componentes de y variam muito pouco relativamente
a outras, e, nestes casos, podemos descartar as dimensões de menor variância sem afectar subs-
tancialmente a qualidade do dados. Os próximos exemplos ilustram este facto.
Considere que os dados com os quais pretendemos fazer a análise em componentes principais
estão representados na seguinte figura:
4
Outra denominação menos utilizada é a transformação de Hotelling
8
3.1 Exemplo: Compressão de Dados Sintéticos 9
x2
3
−1
−1 0 1 2 3 4 5 6 7
x
1
Dados originais.
Estes dados consistem em 100 pontos bidimensionais, gerados sinteticamente em M ATLAB com
as seguintes instruções:
>> randn(’seed’,0),rand(’seed’,0)
>> x=[1 -1;1 1]*[rand(1,100)*6;randn(1,100)*sqrt(0.01)];
>> Cx=cov(x’)
Cx =
3.1013 3.0554
3.0554 3.0459
De notar que se pode calcular esta matriz analiticamente. O conjunto pontos x foi obtido
com uma transformação do tipo x = As, com a matriz A = 11 −1 ⊤
1 . O vector s = [s1 , s2 ] foi
Isto significa que a primeira dimensão s1 , é uma variável aleatória uniformemente distribuı́da
entre [0, 6] e a segunda dimensão s2 é uma variável aleatória gaussiana de média nula e variância
σs22 = 0.01. Adicionalmente s1 e s2 são independentes, e por isso a matriz de covariância Σs de
s é uma matriz diagonal:
2
σs 0 3 0
Σs = 1 =
0 σs22 0 0.01
9
3.1 Exemplo: Compressão de Dados Sintéticos 10
Esta matriz difere da matriz obtida experimentalmente, com o comando Cx=cov(x’). Convém
realçar que Cx é apenas uma estimativa calculada com um conjunto de 100 pontos. No limite,
para um número infinito de pontos, os valores de Cx seriam iguais aos da matriz Σx .
Os valores próprios da matriz de covariância dos dados são os elementos da diagonal da ma-
triz U e os vectores próprios correspondentes são as colunas da matriz V. Os vectores próprios
indicam as direcções em que os dados variam mais. De notar que o segundo valor próprio é
consideravelmente superior ao primeiro. Isto significa que os dados estão distribuı́dos princi-
palmente ao longo da direcção do segundo vector próprio γ 2 = [−0.7103, −0.7039]⊤ : basta
sobrepor os vectores próprios e os dados originais para constatar este facto.
10
3.1 Exemplo: Compressão de Dados Sintéticos 11
x2
3
−1
−1 0 1 2 3 4 5 6 7
x
1
Dados originais e os vectores próprios (centrados na média dos
dados). A cheio estão representados os vectores próprios (de
norma unitária). As rectas a tracejado seguem as direcções dos
vectores próprios e foram incluı́das para facilitar a visualização
destas direcções).
Antes de projectar os dados x nas componentes principais vamos ordenar a matriz de vectores
próprios por ordem descendente de grandeza: neste caso basta trocar a primeira com a segunda
coluna da matriz V.
>> Vo=V(:,2:-1:1);
Ao transformarmos os dados x pelo transposto da matriz Vo, iremos obter um conjunto descor-
relacionado, com variâncias iguais aos valores próprios da matriz Cx:
>> y=Vo’*x;
>> cov(y’)
ans =
6.1292 0.0000
0.0000 0.0181
11
3.1 Exemplo: Compressão de Dados Sintéticos 12
2
0
y
−1
−2
−3
−4
−5
−9 −8 −7 −6 −5 −4 −3 −2 −1 0
y
1
O vector y não é mais do que uma transformação linear e bijectiva do vector x: isto é, o conjunto
de pontos representados na figura anterior contém a mesma informação que o conjunto original.
Para recuperar os dados originais basta fazer a transformação inversa (multiplicar o vector y
pela matriz de vectores próprios Γx ). É fácil de ver que com esta transformação iremos obter
exactamente os mesmos dados que tı́nhamos à partida:
y = Γ⊤
xx
z = Γx y = Γx Γ⊤ x=x
| {z x}
I
Os dois conjuntos x e y contêm a mesma informação mas existe uma diferença fundamental
entre os dois: no conjunto x as variâncias da primeira e da segunda coordenada são aproximada-
mente iguais. No conjunto y, os dados variam essencialmente ao longo da primeira dimensão.
Podemos então descartar os valores da segunda coordenada sem perder muita informação. No
M ATLAB basta multiplicar x pela componente principal (transposta):
>> yc=Vo(:,1)’*x;
>> size(yc)
ans =
1 100
12
3.2 Exemplo: Compressão de Imagem 13
Se utilizarmos o conjunto yc para recuperar os dados, irá haver uma perda de informação.
No entanto iremos ganhar em termos de compressão visto que necessitamos aproximadamente
de metade da memória do que seria necessário para armazenar o conjunto original. Os dados
recuperados só com um vector próprio são:
>> xc=Vo(:,1)*yc;
>> size(xc)
ans =
2 100
4
xc2
−1
−1 0 1 2 3 4 5 6 7
xc
1
Comparando a figura anterior com os dados originais podemos ver que de facto houve perdas de
informação: a variação longo da componente principal foi preservada, mas a variação ao longo
da segunda componente é inexistente.
13
3.2 Exemplo: Compressão de Imagem 14
blocos como uma amostra do vector aleatório x (se m = 2 então x ∈ R4 ,se m = 3 então
x ∈ R9 ,etc. . . ). Por exemplo, considere que uma imagem a nı́veis de cinzento de 256 × 256
pixeis, foi dividida em blocos de 8 × 8 pixeis. Podemos então representar esta imagem por
um conjunto de 1024 vectores num espaço em R64 . Depois, é necessário calcular a matriz de
covariância do conjunto e fazer uma decomposição em valores e vectores próprios desta matriz.
Para comprimir a imagem, temos que escolher um subconjunto de vectores próprios (associa-
dos aos maiores valores próprios), transformar os dados pela matriz compostas pelos vectores
próprios escolhidos, e guardar os dados transformados e a matriz de transformação. Para recu-
perar a imagem original basta fazer a transformação inversa. Todos estes passos são, de seguida,
ilustrados com uma imagem do M ATLAB.
Imagem original.
Vamos agora dividir a imagem em blocos de 8 × 8 com ajuda da função blkimag (esta
função é dada em apêndice):
>> [x]=blkimag(I,8);
>> size(x)
ans =
64 1024
O conjunto x representa a imagem original dividida em blocos. Cada coluna de x é um
bloco de 8 × 8. O seguinte comando calcula a matriz de covariância dos dados e faz uma
decomposição em valores e vectores próprios dessa matriz:
>> [V,U]=eig(cov(x’));
14
3.2 Exemplo: Compressão de Imagem 15
1
3
0
2.5 −1
−2
log(λi)
2
−3
i
λ
−4
1.5
−5
1 −6
−7
0.5
−8
0 −9
0 10 20 30 40 50 60 0 10 20 30 40 50 60
i i
As figuras anteriores mostram que os primeiros valores próprios são substancialmente mais
elevados do que os restantes. As primeiras componentes principais são as direcções em que os
dados têm a maior variância. As restantes componentes podem ser descartadas sem se perder
muita informação visto que nestas direcções os dados variam muito pouco. Assim, não é ne-
cessário guardar toda a informação contida na imagem (no conjunto x: podemos projectar x
nas primeiras componentes principais, e guardar o conjunto transformado. Por exemplo, se só
tivermos em conta as primeiras 8 componentes, ao transformarmos os dados passamos a ter um
conjunto de 1024 pontos a 8 dimensões (em vez das 64 dimensões). Obtemos aproximadamente
um factor de compressão de 8. No entanto existem perdas neste tipo de compressão. Para visu-
alizarmos a degradação ocorrida, temos que reconstruir a imagem com os dados transformados.
Estes passos são:
y=Vo(:,1:8)’*x;
xc=Vo(:,1:8)*y;
Ic=unblkimag(xc,8,256,256);
15
3.2 Exemplo: Compressão de Imagem 16
onde xc ∈ R64 é o vector que correspondente aos blocos de 8 × 8 da imagem reconstruı́da, onde
Γc ∈ R64×8 é uma matriz composta pelas 8 componentes principais (os 8 vectores próprios
γ i associados aos 8 valores próprios mais elevados), e onde y = [y1 , . . . , y8 ]⊤ são os dados
transformados.
Cada componente principal é um vector em R64 , e para visualizar cada componente pode-
mos representa-la por um bloco de 8 × 8 pixeis. Como no total existem 64 componentes, iremos
obter uma imagem com 64 blocos de 8 × 8.
16
3.2 Exemplo: Compressão de Imagem 17
Na imagem reconstruı́da, cada bloco foi obtido com uma soma ponderada dos 8 primeiros
blocos da imagem anterior (a primeira linha desta imagem).
4 componentes 8 componentes
16 componentes 32 componentes
17
3.2 Exemplo: Compressão de Imagem 18
Apêndice
function [x,sc]=blkimag(s,n)
%function [x,imag_cut]=blkimag(imag,n)
% imag: matriz de RxC com a imagem
% n: imag dividida em blocos de nxn
% x: matriz de (nˆ2 x numero_de_blocos_na_imagem)
% imag_cut: matriz de (r x c) r=n*round(R/n) e c=n*round(C/n);
[R,C]=size(s);
r=floor(R/n);
c=floor(C/n);
sc=s(1:n*r,1:n*c);
N=r*c;
x=zeros(n*n,N);
for i=1:r
x(:,1+(i-1)*c:i*c)=reshape(sc(1+(i-1)*n:i*n,:),n*n,c);
end
function [s,y]=unblkimag(x,n,r,c)
%function [imag]=unblkimag(x,n,R,C)
% x: blocos da imagem (nˆ2 x numero de blocos na imagem)
% imag: matriz de RxC com a imagem reconstruida
% n: imagem original dividida em blocos de nxn => x
if(sum(size(x)==[n*n,r*c/nˆ2])˜=2)
error(’dimensoes erradas!’)
exit(1)
end
r=r/n;
c=c/n;
for i=1:r
s(1+(i-1)*n:i*n,:)=reshape(x(:,1+(i-1)*c:i*c),n,c*n);
end
y=s;
%quantificar imagem em 256 niveis de cinzento
s=s-min(min(s));
s=uint8(255*s/max(max(s)));
18