Aula 4: Autovalores, Autovetores e Matrizes Simétricas
Álgebra Linear e Otimização para Aprendizado de Máquina
1 Revisão e Introdução
1.1 Revisão Rápida: Onde a Aula 3 Parou
A Aula 3 resolveu o problema da regressão sobredeterminada por completo, em três passos. Primeiro, formalizou a “sombra” (a projeção ortogonal \(\hat{\mathbf{y}}\) de \(\mathbf{y}\) sobre \(\text{col}(X)\)) como o ponto de menor distância, provando que essa condição é equivalente a uma condição algébrica exata: o resíduo \(\mathbf{y}-X\hat{\mathbf{w}}\) ortogonal a todo o espaço-coluna. Segundo, transformou essa condição de ortogonalidade nas Equações Normais, \(X^TX\hat{\mathbf{w}}=X^T\mathbf{y}\), e mostrou que — sob posto completo de \(X\) (herdado da Aula 2) — \(X^TX\) é invertível e \(\hat{\mathbf{w}}=(X^TX)^{-1}X^T\mathbf{y}\) é a única solução. Terceiro, no Bloco 6, mostrou que “posto completo” não é garantia de robustez numérica: comparando o par de atributos quase-colinear (AveRooms/AveBedrms, correlação \(0{,}865\)) com o par bem-condicionado (MedInc/HouseAge), a mesma perturbação de \(1\%\) nos dados produzia uma oscilação de \(\approx 29{,}5\%\) no peso do primeiro par contra \(\approx 0{,}1\%\) no segundo — quase \(300\) vezes mais sensível. Vale relembrar o que essa perturbação faz e o que ela mede: soma-se a MedHouseVal um ruído gaussiano de média zero e desvio-padrão igual a apenas \(1\%\) do desvio-padrão da própria variável (uma mudança minúscula, do tamanho de um erro de medição), reajusta-se por mínimos quadrados, e mede-se a taxa de amplificação entre essa mudança pequena na entrada e a mudança resultante no peso estimado — quanto maior a amplificação, mais frágil o par de atributos.
Essa fragilidade foi medida, não explicada. A Aula 3 batizou a quantidade certa para isso — o número de condição de \(X^TX\) — mas só soube calculá-lo perturbando os dados e observando o efeito (\(\text{cond}(X^TX)\approx 23\,460\) para os 4 atributos completos, \(\approx 420\) para o par quase-colinear, \(\approx 169\) para o par bem-condicionado, todos via np.linalg.cond). A própria aula fechou com essa promessa explícita, que serve de gancho direto para hoje: “o número de condição foi usado aqui de forma empírica (perturbar os dados e medir o efeito) — a Aula 4 dá a ferramenta exata para medi-lo diretamente a partir da estrutura de \(X^TX\) (seus autovalores e autovetores), sem precisar perturbar nada.”
1.2 Organizador Prévio: De Perturbar os Dados Para Olhar Direto Para Dentro de \(X^TX\)
Perturbar os dados e medir o efeito é um experimento — funciona, mas não explica por que um par de atributos é mais frágil que outro, nem permite prever a fragilidade antes de perturbar nada. Olhando com mais cuidado para o que esse experimento faz: ao somar um ruído pequeno a \(\mathbf{y}\) e reajustar, o que se está medindo, por fora, é uma taxa de amplificação — o quanto uma perturbação pequena na entrada se transforma numa oscilação grande (ou pequena) na saída (\(\hat{\mathbf{w}}\)). Essa taxa não é uma propriedade do ruído específico usado no experimento — é uma propriedade fixa da própria matriz \(X^TX\), que existiria mesmo que ninguém nunca tivesse perturbado nada. Esta aula propõe uma mudança de estratégia: em vez de sacudir a matriz \(X^TX\) de fora e observar como ela reage, vamos abrir \(X^TX\) por dentro e encontrar os números que já determinam essa taxa de amplificação de antemão, de forma exata — os autovalores. A ideia central, que vai se repetir em cada bloco: a maioria das direções do espaço, quando atravessa uma transformação linear \(A\), gira e muda de tamanho ao mesmo tempo; mas existem direções especiais que só mudam de tamanho, nunca de direção — e são exatamente essas direções, e os fatores de escala associados a elas, que carregam toda a informação sobre o comportamento numérico de uma matriz, incluindo a taxa de amplificação que o experimento de perturbação só conseguia estimar de fora.
1.3 Roteiro da Aula
A pergunta que fecha o Organizador Prévio — “que números, dentro de \(X^TX\), já determinam a fragilidade antes de qualquer perturbação?” — se desdobra em quatro perguntas mais específicas, cada uma resolvida em um ou mais blocos desta aula:
- O que é, geometricamente, um autovalor e um autovetor de uma matriz?
- Como calcular autovalores e autovetores à mão, de forma sistemática, via o polinômio característico?
- Por que toda matriz simétrica — como \(X^TX\), sempre — tem autovalores reais e autovetores ortogonais entre si? Esse é o Teorema Espectral Real.
- Como o sinal e a razão entre os autovalores definem, respectivamente, a definitude positiva de uma matriz e o número de condição exato de \(X^TX\) — fechando, sem perturbar nada, o ciclo aberto na Aula 3?
1.4 Problema Motivador
Volte aos mesmos dois pares de atributos do California Housing Dataset que a Aula 3 comparou no Bloco 6: AveRooms/AveBedrms (quase-colinear, correlação \(0{,}865\)) e MedInc/HouseAge (bem-condicionado). A Aula 3 só soube dizer qual par era mais frágil depois de perturbar os dados e observar a oscilação no peso estimado. Pense por um instante, sem fazer nenhuma conta ainda: será que existe alguma propriedade de \(X^TX\) — algo que se possa calcular olhando só para a matriz, sem perturbar absolutamente nada nos dados — que já anteciparia qual par vai se comportar mal?
Dica: o número de condição da Aula 3 foi medido via perturbação nos dados; pense se a escala dos atributos (não só a correlação entre eles) poderia influenciar o resultado.
- □ Dois pares de atributos com a mesma correlação de Pearson entre si necessariamente têm o mesmo número de condição de \(X^TX\), porque correlação e número de condição medem exatamente a mesma coisa.
- □ Se um par de atributos fosse exatamente ortogonal (correlação zero, como duas colunas perfeitamente descorrelacionadas), isso por si só não garante que o número de condição de \(X^TX\) para esse par seja igual a \(1\) — a escala relativa das duas colunas também importa.
- □ Num modelo de risco de crédito (dataset German Credit), com dois atributos de histórico de pagamento fortemente correlacionados entre si (ex.: duração do empréstimo e valor total do crédito, que tendem a crescer juntos), o mesmo tipo de fragilidade numérica de \(X^TX\) discutido aqui se aplicaria, mesmo fora do contexto de imóveis.
- □ Como a Aula 3 mediu a fragilidade só perturbando os dados, isso significa que não existe nenhuma forma de calcular o número de condição de \(X^TX\) sem realizar, na prática, uma perturbação real dos dados.
2 Intuição – Autovetores
2.1 Uma Matriz Agindo sobre um Conjunto de Direções
Antes de qualquer fórmula, uma imagem concreta. Tome a matriz \[ A = \begin{bmatrix} 4 & 2 \\ 1 & 3 \end{bmatrix} \] (a mesma matriz do MathML, Exemplo 4.5, reaproveitada no Bloco 3 para o cálculo à mão) e pense nela como uma transformação linear \(\mathbf{v}\mapsto A\mathbf{v}\) agindo sobre todo o plano \(\mathbb{R}^2\). Escolha um punhado de vetores unitários apontando em direções diferentes ao redor da origem, e observe o que \(A\) faz com cada um deles.
No painel esquerdo, cada seta cinza é um vetor unitário original, e a seta azul correspondente é sua imagem \(A\mathbf{v}\): a maioria delas gira visivelmente — a direção de chegada não é a mesma da direção de partida. Mas as duas retas tracejadas (laranja e vermelha) marcam duas direções específicas em que isso não acontece: qualquer vetor sobre essas retas continua, depois de multiplicado por \(A\), sobre a mesma reta — só o comprimento muda (nesse caso, sempre esticando, nunca invertendo, porque os dois fatores de escala são positivos). O painel direito mostra a mesma ideia de outro ângulo: o círculo unitário inteiro (pontilhado) vira uma elipse (linha cheia azul) sob a ação de \(A\), e os eixos dessa elipse caem exatamente sobre as duas direções especiais — cada eixo esticado por um fator diferente (\(\lambda=2\) numa direção, \(\lambda=5\) na outra, valores que o Bloco 3 vai calcular à mão, à mão).
Vale nomear informalmente o que o desenho já mostra, antes de qualquer equação: essas duas direções especiais são os autovetores de \(A\), e os fatores de escala associados a cada uma são os autovalores correspondentes. Repare em um detalhe que vai ficar importante no Bloco 4: as duas retas tracejadas do painel esquerdo não são perpendiculares uma à outra — o ângulo entre elas não é de \(90°\). Isso não é um detalhe cosmético; é uma propriedade de \(A\) não ser simétrica (\(A\ne A^T\), já que a entrada \((1,2)=2\) é diferente da entrada \((2,1)=1\)), e vai mudar completamente quando a matriz for simétrica — gancho direto para o Bloco 4.
2.2 A Equação Formal
A intuição visual do painel acima tem um nome e uma equação precisos. O MathML define (tradução nossa, §4.2, Definição 4.6, p. 105):
“Seja \(A\in\mathbb{R}^{n\times n}\) uma matriz quadrada. Então \(\lambda\in\mathbb{R}\) é um autovalor de \(A\) e \(\mathbf{x}\in\mathbb{R}^n\setminus\{\mathbf{0}\}\) é o autovetor correspondente de \(A\) se \[A\mathbf{x} = \lambda\mathbf{x}.\] Chamamos essa equação de equação de autovalor.”
Essa é exatamente a propriedade que o desenho já mostrou: multiplicar o autovetor \(\mathbf{x}\) por \(A\) dá o mesmo resultado que simplesmente esticá-lo por um número \(\lambda\) — nenhuma rotação, só escala (com inversão de sentido se \(\lambda<0\), caso que não aparece no exemplo desta figura, mas vai aparecer mais adiante no curso). Vale notar, desde já, uma propriedade que vai evitar uma confusão comum: o autovetor \(\mathbf{x}\) associado a um autovalor não é único. O MathML observa (tradução nossa, mesma seção): “se \(\mathbf{x}\) é um autovetor de \(A\) associado ao autovalor \(\lambda\), então, para qualquer \(c\in\mathbb{R} \setminus\{0\}\), vale que \(c\mathbf{x}\) também é um autovetor de \(A\) com o mesmo autovalor, já que \(A(c\mathbf{x})=cA\mathbf{x}=c\lambda\mathbf{x} =\lambda(c\mathbf{x})\). Assim, todos os vetores colineares a \(\mathbf{x}\) também são autovetores de \(A\).” Ou seja: o que a figura chama de “direção especial” é literalmente isso — uma reta inteira de autovetores (menos a origem), não um vetor específico; qualquer múltiplo escalar não-nulo de um autovetor serve igualmente bem.
Essa não-unicidade é o motivo para tratar um autovetor, antes de mais nada, como uma direção — não como “o” vetor com um comprimento fixo. Um vetor propriamente dito carrega duas informações, direção e amplitude (o próprio comprimento da seta); num autovetor, a amplitude é arbitrária — qualquer \(c\ne 0\) serve igualmente bem, inclusive \(c<0\), que aponta para o lado oposto da mesma reta — só a direção (a reta que passa pela origem) é a informação que de fato pertence a \(A\).
Dica: releia a equação de autovalor — ela permite \(\lambda\) negativo? “Mesma reta, sentido oposto” ainda conta como “não girar”?
- □ Se \(A\mathbf{v}=-3\mathbf{v}\) para algum \(\mathbf{v}\ne\mathbf{0}\), isso significa que \(\mathbf{v}\) não é autovetor de \(A\), porque a direção do vetor se inverteu.
- □ Se todos os vetores do plano fossem autovetores de uma mesma matriz \(A\) (não só duas direções especiais, mas qualquer direção), isso forçaria \(A\) a ser um múltiplo escalar da identidade, \(A=cI\).
- □ Numa camada linear de uma rede neural (sem ativação não-linear), representada pela matriz de pesos \(W\), se um vetor de entrada \(\mathbf{v}\) satisfaz \(W\mathbf{v}=-3\mathbf{v}\), a mesma leitura vale: \(\mathbf{v}\) é autovetor de \(W\) com autovalor negativo, e sua direção continua preservada por \(W\), só com o sentido invertido.
- □ Como o autovetor associado a um autovalor não é único (qualquer múltiplo escalar serve), isso implica que o autoespaço associado a um autovalor sempre tem dimensão maior que 1.
3 O Polinômio Característico
3.1 Premissas: O Que Precisamos Resolver
O Bloco 2 mostrou a existência das direções especiais só visualmente. Para encontrá-las sem depender de um desenho, precisamos transformar a equação de autovalor \(A\mathbf{x}=\lambda\mathbf{x}\) num problema de álgebra resolvível passo a passo. Deixando as premissas explícitas antes de qualquer manipulação:
- Temos uma matriz quadrada \(A\in\mathbb{R}^{n\times n}\) fixa (no nosso caso, \(n=2\), a matriz do Bloco 2).
- Procuramos pares \((\lambda,\mathbf{x})\), com \(\mathbf{x}\in\mathbb{R}^n\setminus\{\mathbf{0}\}\), satisfazendo \(A\mathbf{x}=\lambda\mathbf{x}\).
- Não sabemos ainda quantos autovalores existem, nem seus valores — só sabemos, do Bloco 2, que pelo menos dois existem nesse exemplo específico (as duas direções desenhadas).
3.2 Passo (i): Reescrevendo a Equação de Autovalor Como um Sistema Homogêneo
A manipulação decisiva é puramente algébrica: subtrair \(\lambda\mathbf{x}\) dos dois lados, \[ A\mathbf{x} = \lambda\mathbf{x} \quad\Longleftrightarrow\quad A\mathbf{x} - \lambda\mathbf{x} = \mathbf{0} \quad\Longleftrightarrow\quad (A-\lambda I)\mathbf{x} = \mathbf{0}, \] usando \(I\) (a identidade) para poder subtrair uma matriz de outra matriz. Essa última forma é um sistema linear homogêneo \(B\mathbf{x}=\mathbf{0}\), com \(B=A-\lambda I\) — a mesma estrutura de sistema linear já estudada nas Aulas 2-3, só que agora a incógnita não é só \(\mathbf{x}\): o próprio \(\lambda\) também é desconhecido, e está embutido dentro de \(B\).
Um sistema homogêneo \(B\mathbf{x}=\mathbf{0}\) sempre tem a solução trivial \(\mathbf{x}=\mathbf{0}\) — mas a Premissa 2 exige \(\mathbf{x}\ne\mathbf{0}\). Isso só é possível quando o sistema tem mais de uma solução (a trivial e outras) — e a Aula 2 já ensinou o critério exato para isso: um sistema quadrado homogêneo tem soluções não-triviais se, e somente se, sua matriz de coeficientes não tem posto completo, ou seja, é singular (não-invertível).
Falta um elo, e ele não é óbvio: por que “singular” equivale a \(\det(B)=0\)? Não é uma definição nem uma consequência imediata do que já vimos — é um teorema, na verdade dois, que o MathML enuncia separadamente (tradução nossa, §4.1): “para qualquer matriz quadrada \(A\in\mathbb{R}^{n\times n}\) vale que \(A\) é invertível se, e somente se, \(\det(A)\ne 0\)” (Teorema 4.1, p. 100), e “uma matriz quadrada \(A\in\mathbb{R}^{n\times n}\) tem \(\det(A)\ne 0\) se, e somente se, \(\text{rk}(A)=n\); em outras palavras, \(A\) é invertível se, e somente se, tem posto completo” (Teorema 4.3, p. 103). Encadeando os dois teoremas com o critério de posto da Aula 2: \[ B\mathbf{x}=\mathbf{0} \text{ tem solução não-trivial} \;\overset{\text{Aula 2}}{\iff}\; B \text{ não tem posto completo} \;\overset{\text{Teo. 4.3}}{\iff}\; B \text{ não é invertível} \;\overset{\text{Teo. 4.1}}{\iff}\; \det(B) = 0. \] Com \(B=A-\lambda I\), isso equivale a \[ \det(A-\lambda I) = 0. \] Essa equação — não \(A\mathbf{x}=\lambda\mathbf{x}\) diretamente — é o alvo do resto deste bloco: ela só tem \(\lambda\) como incógnita (o \(\mathbf{x}\) já foi eliminado), o que a torna resolvível por conta própria.
3.3 O Polinômio Característico
O MathML batiza a expressão \(\det(A-\lambda I)\) vista como função de \(\lambda\) (tradução nossa, §4.1, Definição 4.5, p. 104):
“Para \(\lambda\in\mathbb{R}\) e uma matriz quadrada \(A\in\mathbb{R}^{n\times n}\), \[ p_A(\lambda) := \det(A-\lambda I) = c_0+c_1\lambda+c_2\lambda^2+\cdots +c_{n-1}\lambda^{n-1}+(-1)^n\lambda^n,\quad c_0,\dots,c_{n-1} \in\mathbb{R}, \] é o polinômio característico de \(A\).”
E o MathML conecta essa definição diretamente ao problema que queremos resolver (tradução nossa, §4.2, Teorema 4.8, p. 106): “\(\lambda\in \mathbb{R}\) é um autovalor de \(A\in\mathbb{R}^{n\times n}\) se, e somente se, \(\lambda\) é uma raiz do polinômio característico \(p_A(\lambda)\) de \(A\).” Ou seja: os autovalores de \(A\) são exatamente as raízes reais de um único polinômio, \(p_A(\lambda)\) — encontrar todos os autovalores de uma matriz \(2\times 2\) vira, literalmente, resolver uma equação do segundo grau.
3.4 Passo (ii): Aplicando ao Exemplo do Bloco 2 — o Polinômio
Vamos calcular à mão, do zero, usando a mesma matriz do Bloco 2, \(A=\begin{bmatrix}4&2\\1&3\end{bmatrix}\) (MathML, Exemplo 4.5, p. 107). \[ A-\lambda I = \begin{bmatrix}4-\lambda & 2\\ 1 & 3-\lambda\end{bmatrix}, \qquad p_A(\lambda) = \det(A-\lambda I) = (4-\lambda)(3-\lambda) - 2\cdot 1. \] Expandindo o produto: \((4-\lambda)(3-\lambda) = 12-7\lambda+\lambda^2\), logo \[ p_A(\lambda) = 12-7\lambda+\lambda^2-2 = \lambda^2-7\lambda+10. \] O MathML resolve essa mesma equação por fatoração direta (tradução nossa): “fatorizamos o polinômio característico e obtemos \(p(\lambda)=(4-\lambda)(3-\lambda)-2\cdot 1=10-7\lambda+\lambda^2= (2-\lambda)(5-\lambda)\), dando as raízes \(\lambda_1=2\) e \(\lambda_2=5\).” Confirmando por Bhaskara, para não depender só de “ver” a fatoração: raízes de \(\lambda^2-7\lambda+10=0\) são \[ \lambda=\frac{7\pm\sqrt{49-40}}{2}=\frac{7\pm\sqrt{9}}{2}=\frac{7\pm 3}{2}, \] ou seja \(\lambda\in\{2,5\}\) — exatamente os dois valores que a elipse do Bloco 2 já tinha marcado nos eixos.
3.5 Passo (iii): De Volta à Equação Original — Achando os Autovetores
Achar \(\lambda\) resolveu metade do problema; falta achar, para cada \(\lambda\), o(s) autovetor(es) associado(s), resolvendo \((A-\lambda I)\mathbf{x}=\mathbf{0}\) com o valor de \(\lambda\) já conhecido. Para \(\lambda_2=5\): \[ A - 5I = \begin{bmatrix}-1 & 2\\ 1 & -2\end{bmatrix}, \qquad (A-5I)\mathbf{x}=\mathbf{0} \;\Longrightarrow\; -x_1+2x_2=0 \;\Longrightarrow\; x_1=2x_2. \] A equação \(x_1=2x_2\) tem uma variável livre: qualquer valor de \(x_2\) determina \(x_1\). Parametrizando \(x_2=t\) para \(t\in\mathbb{R}\) arbitrário, obtemos \(x_1=2t\), ou seja \[ (x_1,x_2) = (2t,t) = t\cdot(2,1). \] Esse é, por definição, o conjunto de todos os múltiplos escalares de \((2,1)\) — \(\text{span}((2,1)) := \{t\cdot(2,1) : t\in\mathbb{R}\}\). O autoespaço \(E_5\) é, por definição, o conjunto-solução inteiro de \((A-5I)\mathbf{x}=\mathbf{0}\) (uma reta pela origem, incluindo o caso \(t=0\), que dá a solução trivial); os autovetores propriamente ditos são os elementos não-nulos desse conjunto (\(t\ne 0\), pela Premissa 2). Logo \[ E_5=\text{span}((2,1)) \] (MathML: “obtemos o espaço-solução \(E_5=\text{span}([2,1])\)”). Para \(\lambda_1=2\): \[ A-2I = \begin{bmatrix}2 & 2\\ 1 & 1\end{bmatrix}, \qquad (A-2I)\mathbf{x}=\mathbf{0} \;\Longrightarrow\; x_1+x_2=0 \;\Longrightarrow\; x_1=-x_2, \] mesmo processo: parametrizando \(x_2=t\), \((x_1,x_2)=(-t,t)=t\cdot(-1,1)\), dando \(E_2=\text{span}((-1,1))\). Como \((-1,1)=-1\cdot(1,-1)\), essa é a mesma reta que \(\text{span}((1,-1))\) — trocar o sinal do parâmetro \(t\) não muda o conjunto de múltiplos escalares, só relabeia qual \(t\) gera qual ponto. Escrevemos \(E_2=\text{span}((1,-1))\) por convenção; isso é consistente com o autovetor ser uma direção, não um vetor de sinal fixo (Bloco 2, “A Equação Formal”). Note que \((2,1)\) e \((1,-1)\) são exatamente as duas direções (laranja e vermelha) desenhadas no painel do Bloco 2 — o cálculo algébrico confirma, número por número, o que o desenho já tinha mostrado visualmente.
3.6 Verificação Numérica: numpy.linalg.eig
Fazer essa conta à mão é indispensável para entender de onde vêm os autovalores/autovetores, mas na prática — matrizes maiores que \(2\times 2\), ou o caso \(X^TX\in\mathbb{R}^{4\times 4}\) do Bloco 6 — o polinômio característico vira inviável de resolver manualmente (polinômios de grau \(\ge 5\) nem sempre têm raiz em forma fechada). numpy.linalg.eig resolve o mesmo problema numericamente:
autovalores, autovetores = np.linalg.eig(A_exemplo)
# Autovalores reais (2 e 5); numpy.linalg.eig devolve dtype complexo por
# padrão para matrizes não-simétricas — parte imaginária é zero aqui.
autovalores = autovalores.real
autovetores = autovetores.real
print("Autovalores:", autovalores)
print("Autovetores (colunas, normalizados por numpy):")
print(autovetores)
# Conferindo A x = lambda x diretamente, para cada par
for k in range(2):
lhs = A_exemplo @ autovetores[:, k]
rhs = autovalores[k] * autovetores[:, k]
print(f" lambda={autovalores[k]:.1f}: ||A x - lambda x|| = {np.linalg.norm(lhs - rhs):.2e}")Autovalores: [5. 2.]
Autovetores (colunas, normalizados por numpy):
[[ 0.89442719 -0.70710678]
[ 0.4472136 0.70710678]]
lambda=5.0: ||A x - lambda x|| = 0.00e+00
lambda=2.0: ||A x - lambda x|| = 3.14e-16
Os autovalores batem exatamente com \(\{2,5\}\) calculados à mão, e a igualdade \(A\mathbf{x}=\lambda\mathbf{x}\) é confirmada numericamente até erro de arredondamento. Uma diferença importante de convenção: o numpy sempre devolve os autovetores normalizados (norma \(1\)) — é só mais uma escolha dentro da reta de infinitos múltiplos escalares válidos (a não-unicidade do Bloco 2), não uma contradição com o \((2,1)\)/\((1,-1)\) calculado à mão.
Dica: o Teorema 4.8 conecta autovalor a raiz real do polinômio característico — o que acontece quando algumas raízes não são reais?
- □ Uma matriz \(3\times 3\) cujo polinômio característico (grau 3) tem só uma raiz real teria exatamente um autovalor real — as outras duas raízes, sendo complexas, não correspondem a autovalores reais da matriz.
- □ Se o polinômio característico de uma matriz \(2\times 2\) não tivesse nenhuma raiz real (discriminante negativo em Bhaskara), essa matriz não teria autovalor real algum, mas ainda seria uma transformação linear perfeitamente válida sobre \(\mathbb{R}^2\) (ex.: uma rotação pura por um ângulo diferente de \(0°\)/\(180°\)).
- □ Numa cadeia de Markov usada em aprendizado por reforço para descrever as transições de um agente entre dois estados, com uma matriz de transição \(2\times 2\), encontrar os autovalores dessa matriz por polinômio característico é uma aplicação válida da mesma técnica, mesmo a matriz não vindo de geometria.
- □ Como o autovetor associado a um autovalor não é único, isso implica que, ao resolver \((A-\lambda I)\mathbf{x}=\mathbf{0}\) à mão para achar \(E_\lambda\), sempre existe mais de uma equação linearmente independente restringindo \(\mathbf{x}\).
4 O Teorema Espectral Real para Matrizes Simétricas
4.1 Por Que Isso Importa Para \(X^TX\)
Antes de qualquer prova, a razão de este bloco existir: a Aula 3 usou \(X^TX\) o tempo todo, e uma propriedade dela nunca foi explorada a fundo — \(X^TX\) é sempre simétrica, para qualquer \(X\), mesmo retangular (\((X^TX)^T=X^T(X^T)^T=X^TX\), pela regra \((AB)^T=B^TA^T\) seguida de \((X^T)^T=X\) — uma linha de álgebra). O MathML vai além: (tradução nossa, §4.2, Teorema 4.14, p. 111) “dada uma matriz \(A\in\mathbb{R}^{m\times n}\), sempre podemos obter uma matriz simétrica, semidefinida positiva \(S\in\mathbb{R}^{n\times n}\) definindo \(S:=A^TA\).” O próprio MathML separa a segunda metade num comentário à parte (Observação, p. 111): “se \(\text{rk}(A)=n\), então \(S:=A^TA\) é simétrica, definida positiva.” As duas condições são diferentes, e só uma delas depende do posto: “semidefinida positiva” vale sempre, para qualquer \(A\) — mesmo singular, mesmo retangular, sem nenhuma hipótese extra; é só “definida positiva” (a versão mais forte, que exclui vetores não-nulos no núcleo de \(S\) — definição formal logo a seguir) que exige \(\text{rk}(A)=n\), posto completo. Aplicando a \(X^TX\): \(X^TX\) é sempre semidefinida positiva, tenha \(X\) posto completo ou não; ela só é definida positiva sob posto completo — a mesma condição que a Aula 3 já usou para garantir invertibilidade. Este bloco prova o que a simetria de \(X^TX\) garante sobre seus autovalores e autovetores — a peça que faltava para o Bloco 5 fechar o ciclo da Aula 3.
4.2 Definição: Matrizes Definidas e Semidefinidas Positivas
Antes de provar que \(X^TX\) tem essa propriedade, falta a definição formal — “semidefinida positiva” foi usado acima antes de ser definido, e essa lacuna se fecha agora. O MathML define (tradução nossa, §3.2.3, Definição 3.4, p. 74):
“Uma matriz simétrica \(A\in\mathbb{R}^{n\times n}\) que satisfaz […] \(\mathbf{x}^TA\mathbf{x}>0\) para todo \(\mathbf{x}\in V\setminus \{\mathbf{0}\}\) é chamada simétrica, definida positiva, ou apenas positiva definida. Se vale apenas \(\ge\) […], então \(A\) é chamada simétrica, semidefinida positiva.”
Duas cláusulas, uma definição, uma hipótese comum: \(A\) precisa ser simétrica (\(A=A^T\)) — sem isso a definição nem se aplica, “definida positiva” e “semidefinida positiva” só classificam matrizes simétricas. Dada essa hipótese, o que separa as duas é só o tipo de desigualdade sobre \(\mathbf{x}^TA\mathbf{x}\): estrita (\(>0\)) para “definida”, fraca (\(\ge 0\)) para “semidefinida” — e em ambos os casos a desigualdade precisa valer para todo \(\mathbf{x}\ne\mathbf{0}\), não para um \(\mathbf{x}\) escolhido a dedo. Com a definição em mãos, o teorema a seguir mostra por que \(X^TX\) sempre satisfaz a versão fraca.
4.3 Teorema: \(A^TA\) é Simétrica e Semidefinida Positiva
Isso é exatamente o Teorema 4.14 citado acima — mas citar não é provar, e a prova é curta o bastante para não pular. O MathML só esboça a ideia (tradução nossa, p. 111); reconstruímos os dois passos por extenso.
Prova. Por definição, \(S\) é simétrica se \(S=S^T\). Calculamos \(S^T\) a partir de \(S:=A^TA\), aplicando a regra \((BC)^T=C^TB^T\) com \(B=A^T\) e \(C=A\): \[ S^T = (A^TA)^T = A^T(A^T)^T = A^TA = S, \] usando \((A^T)^T=A\) na penúltima igualdade. Logo \(S=S^T\). \(\blacksquare\)
Prova. Seja \(\mathbf{x}\in\mathbb{R}^n\) arbitrário. Substituindo \(S=A^TA\) e reagrupando por associatividade do produto de matrizes: \[ \mathbf{x}^TS\mathbf{x} = \mathbf{x}^T(A^TA)\mathbf{x} = (\mathbf{x}^TA^T)(A\mathbf{x}). \] Pela mesma regra \((BC)^T=C^TB^T\) (com \(B=A\), \(C=\mathbf{x}\)), \(\mathbf{x}^TA^T=(A\mathbf{x})^T\), logo \[ \mathbf{x}^TS\mathbf{x} = (A\mathbf{x})^T(A\mathbf{x}) = \|A\mathbf{x}\|^2, \] usando que o produto de um vetor pela sua própria transposta é a soma dos quadrados de suas entradas, ou seja, a norma ao quadrado — sempre \(\ge 0\), qualquer que seja o vetor \(A\mathbf{x}\). Como \(\mathbf{x}\) era arbitrário, isso vale para todo \(\mathbf{x}\in\mathbb{R}^n\), que é exatamente a Definição 3.4 de semidefinida positiva. \(\blacksquare\)
Aplicando os dois teoremas com \(A=X\): \(X^TX\) é simétrica e semidefinida positiva, para qualquer \(X\), com ou sem posto completo — a prova não usa hipótese nenhuma sobre o posto de \(A\) em nenhum dos dois passos. É esse fato, agora demonstrado e não só citado, que o resto deste bloco explora: o que a simetria (e a semidefinitude, quando for estritamente definida) garante sobre os autovalores e autovetores de \(X^TX\).
4.4 Premissas e Prova: Autovetores de Autovalores Distintos São Ortogonais
- \(A\in\mathbb{R}^{n\times n}\) é simétrica, ou seja, \(A=A^T\).
- \(\mathbf{x}_1,\mathbf{x}_2\) são autovetores de \(A\) associados a autovalores distintos, \(\lambda_1\ne\lambda_2\): \(A\mathbf{x}_1=\lambda_1\mathbf{x}_1\), \(A\mathbf{x}_2=\lambda_2\mathbf{x}_2\).
Nota de precisão: a prova a seguir é exposição nossa, não uma citação literal de nenhuma das fontes — o MathML e o Boyd enunciam o Teorema Espectral diretamente, sem detalhar este passo intermediário no nível que este curso quer mostrar. A prova em si é padrão (manipulação de \(\mathbf{x}_1^TA\mathbf{x}_2\) dos dois lados), mas construída aqui, não copiada.
Calculamos o escalar \(\mathbf{x}_1^TA\mathbf{x}_2\) de duas formas diferentes. Primeiro, aplicando \(A\) diretamente a \(\mathbf{x}_2\) (Premissa 2): \[ \mathbf{x}_1^TA\mathbf{x}_2 = \mathbf{x}_1^T(\lambda_2\mathbf{x}_2) = \lambda_2\,(\mathbf{x}_1^T\mathbf{x}_2). \] Segundo, usando que \(\mathbf{x}_1^TA\mathbf{x}_2\) é um escalar \(1\times 1\) (logo igual à sua própria transposta) e que \(A\) é simétrica (Premissa 1): \[ \mathbf{x}_1^TA\mathbf{x}_2 = (\mathbf{x}_1^TA\mathbf{x}_2)^T = \mathbf{x}_2^TA^T\mathbf{x}_1 = \mathbf{x}_2^TA\mathbf{x}_1 = \mathbf{x}_2^T(\lambda_1\mathbf{x}_1) = \lambda_1\,(\mathbf{x}_2^T\mathbf{x}_1). \] Como \(\mathbf{x}_1^T\mathbf{x}_2=\mathbf{x}_2^T\mathbf{x}_1\) (produto interno é simétrico), as duas contas dão o mesmo escalar por dois caminhos, logo \[ \lambda_2\,(\mathbf{x}_1^T\mathbf{x}_2) = \lambda_1\,(\mathbf{x}_1^T\mathbf{x}_2) \quad\Longrightarrow\quad (\lambda_2-\lambda_1)\,(\mathbf{x}_1^T\mathbf{x}_2) = 0. \] Pela Premissa 2, \(\lambda_2-\lambda_1\ne 0\); logo o único jeito de o produto ser zero é \(\mathbf{x}_1^T\mathbf{x}_2=0\) — autovetores de autovalores distintos de uma matriz simétrica são automaticamente ortogonais. Note onde a simetria de \(A\) entrou: exatamente na troca \(A^T\to A\) no segundo cálculo — sem ela, os dois caminhos não coincidiriam, e é por isso que o Bloco 2 encontrou autovetores não-ortogonais numa matriz não-simétrica.
4.5 O Teorema Espectral Real
A prova acima garante ortogonalidade entre autovetores de autovalores distintos, mas o Teorema Espectral Real garante mais: que os autovalores de uma matriz simétrica são sempre reais (nunca complexos, ao contrário do que o Bloco 3 mostrou ser possível em geral), e que existe uma base ortonormal inteira feita de autovetores — mesmo quando há autovalores repetidos (caso em que a ortogonalidade entre autovetores do mesmo autoespaço não vem de graça da prova acima, e precisa de um processo à parte, Gram-Schmidt, que o MathML ilustra no Exemplo 4.8, sem aprofundar aqui).
O Boyd enuncia a mesma garantia de forma equivalente, já na forma matricial que vamos usar no resto da aula:
“\(Q\) ortogonal” significa exatamente \(Q^TQ=I\) — as colunas de \(Q\) (os autovetores) formam uma base ortonormal, a mesma garantia do teorema anterior, escrita em forma de fatoração matricial: \(A=Q\Lambda Q^T\) é a decomposição espectral de \(A\). Os dois teoremas acima dizem exatamente a mesma coisa, em duas notações: o MathML fala em “base do espaço vetorial \(V\)”, o Boyd fala em “matriz ortogonal \(Q\)” cujas colunas são essa base — a ponte entre as duas é literalmente \(Q=[\mathbf{x}_1\;\cdots\;\mathbf{x}_n]\), os autovetores empilhados como colunas.
4.6 Contraste Direto: Exemplo Resolvido de uma Matriz Simétrica
Para ver a diferença na prática, refazemos o cálculo à mão do Bloco 3, agora com uma matriz simétrica, \[ A_{\text{sim}} = \frac12\begin{bmatrix}5 & -2\\ -2 & 5\end{bmatrix}, \] o mesmo exemplo do MathML (tradução nossa, §4.2, Exemplo 4.11, p. 117-118): “vamos calcular a decomposição em autovalores de \(A=\frac12\begin{bmatrix}5&-2\\-2&5\end{bmatrix}\). […] os autovalores de \(A\) são \(\lambda_1=7/2\) e \(\lambda_2=3/2\) […] \(\mathbf{p}_1=\frac{1}{\sqrt2}[1,-1]\), \(\mathbf{p}_2=\frac{1}{\sqrt2}[1,1]\).” Repare já na diferença mais imediata: \(A_{\text{sim}}=A_{\text{sim}}^T\), diferente da matriz do Bloco 2/3 (\(A\ne A^T\) ali). Vamos verificar numericamente — os autovalores, e principalmente o ângulo entre os autovetores, comparado lado a lado com o exemplo não-simétrico:
autovalores_sim, autovetores_sim = np.linalg.eigh(A_sim)
print("Autovalores de A_sim:", autovalores_sim)
print("Autovetores de A_sim (colunas):")
print(autovetores_sim)
def angulo_entre(u, v):
cos_ang = np.clip((u @ v) / (np.linalg.norm(u) * np.linalg.norm(v)), -1, 1)
return np.degrees(np.arccos(cos_ang))
ang_sim = angulo_entre(autovetores_sim[:, 0], autovetores_sim[:, 1])
ang_nao_sim = angulo_entre(autovetores_ex[:, 0], autovetores_ex[:, 1])
print(f"\nÂngulo entre autovetores de A_sim (simétrica): {ang_sim:.2f} graus")
print(f"Ângulo entre autovetores de A_exemplo (não-simétrica): {ang_nao_sim:.2f} graus")
print(f"\nA_sim é simétrica? {np.allclose(A_sim, A_sim.T)}")
print(f"A_exemplo é simétrica? {np.allclose(A_exemplo, A_exemplo.T)}")Autovalores de A_sim: [1.5 3.5]
Autovetores de A_sim (colunas):
[[-0.70710678 -0.70710678]
[-0.70710678 0.70710678]]
Ângulo entre autovetores de A_sim (simétrica): 90.00 graus
Ângulo entre autovetores de A_exemplo (não-simétrica): 108.43 graus
A_sim é simétrica? True
A_exemplo é simétrica? False
Os autovalores \(3{,}5\) e \(1{,}5\) conferem exatamente com o MathML, e o ângulo entre os autovetores de \(A_{\text{sim}}\) dá \(90°\) — ortogonais, como a prova deste bloco garantiu. Já o ângulo entre os autovetores de \(A_{\text{exemplo}}\) (o exemplo não-simétrico dos Blocos 2-3) fica visivelmente diferente de \(90°\). A distinção não é sutil nem coincidência de arredondamento: é exatamente a diferença entre “matriz simétrica” e “matriz qualquer” que a prova deste bloco isolou. (Chamamos np.linalg.eigh, não np.linalg.eig, porque eigh é a rotina especializada em matrizes simétricas — mais precisa e mais rápida, e devolve autovalores em ordem crescente por convenção; para uma matriz não-simétrica como \(A_{\text{exemplo}}\), eigh não seria aplicável.)
O painel esquerdo repete as duas direções do Bloco 2/3 — visivelmente não perpendiculares. O painel direito mostra as duas direções de \(A_{\text{sim}}\), em ângulo reto exato — a mesma comparação numérica acima, agora visível.
4.7 Decomposição Espectral: o Caso Geral e o Caso Simétrico
Vale encaixar o Teorema Espectral Real dentro de um resultado mais geral. O MathML define a decomposição em autovalores para qualquer matriz quadrada cujos autovetores formem uma base:
Essa é a forma geral — \(P\) é só invertível, não necessariamente ortogonal, e nem toda matriz quadrada admite essa fatoração (uma matriz cujos autovetores não geram todo o espaço, caso que foge do escopo desta aula, não é diagonalizável dessa forma).
O Teorema Espectral Real mostra que matrizes simétricas são sempre um caso particular, sempre bem-comportado, desse resultado geral:
Trocando a notação \(P\to Q\) (a convenção do Boyd, que usamos daqui em diante) e isolando \(A\): \(D=Q^TAQ \iff A=QDQ^T\) (usando \(Q^{-1}=Q^T\), a própria definição de matriz ortogonal) — a mesma equação \(A=Q\Lambda Q^T\) do Boyd. Ou seja: a decomposição espectral não é um resultado à parte da decomposição em autovalores geral, é o caso especial em que a simetria garante diagonalização sempre, com uma matriz de mudança de base ortogonal, nunca só invertível.
Dica: pense no caso mais extremo de repetição — todos os \(n\) autovalores de \(A\) iguais entre si. Quantos autovetores independentes isso deixa?
- □ Como a prova deste bloco só cobre autovalores distintos, isso significa que autovetores associados ao mesmo autovalor (repetido) de uma matriz simétrica nunca podem ser escolhidos ortogonais entre si.
- □ Se uma matriz simétrica \(A\) tivesse todos os autovalores iguais entre si (ex.: \(A=3I\)), então qualquer vetor não-nulo de \(\mathbb{R}^n\) seria autovetor de \(A\), e qualquer base ortonormal de \(\mathbb{R}^n\) serviria como conjunto de autovetores ortogonais.
- □ Na matriz de covariância dos atributos de um dataset de aprendizado de máquina (ex.: os \(30\) atributos do Breast Cancer Wisconsin), se dois autovalores dessa matriz forem exatamente iguais, os dois eixos principais de PCA correspondentes não são unicamente determinados — qualquer rotação dentro do plano gerado por eles também é uma escolha ortogonal válida.
- □ Se a demonstração deste bloco cobrisse autovalores repetidos diretamente (não só distintos), a conclusão do Teorema 4.21 mudaria: matrizes simétricas com autovalores repetidos deixariam de ser sempre diagonalizáveis ortogonalmente.
5 Definitude Positiva: o Sinal dos Autovalores
5.1 Retomando a Forma Quadrática da Aula 1
A Aula 1 já usou a forma quadrática \(\mathbf{x}^TA\mathbf{x}\) (dentro do produto interno geral) sem nomear a propriedade central deste bloco: o sinal dessa expressão, para todo \(\mathbf{x}\ne\mathbf{0}\), classifica a matriz simétrica \(A\). O MathML define (tradução nossa, §3.2.3, Definição 3.4, p. 74):
“Uma matriz simétrica \(A\in\mathbb{R}^{n\times n}\) que satisfaz […] \(\mathbf{x}^TA\mathbf{x}>0\) para todo \(\mathbf{x}\in V\setminus \{\mathbf{0}\}\) é chamada simétrica, definida positiva, ou apenas positiva definida. Se vale apenas \(\ge\) […], então \(A\) é chamada simétrica, semidefinida positiva.”
E resolve, no próprio texto, dois exemplos que vamos reaproveitar (tradução nossa, mesma seção, Exemplo 3.4): “considere as matrizes \(A_1=\begin{bmatrix}9&6\\6&5\end{bmatrix}\), \(A_2=\begin{bmatrix}9&6\\6&3\end{bmatrix}\). \(A_1\) é definida positiva porque é simétrica e \(\mathbf{x}^TA_1\mathbf{x}=9x_1^2+12x_1x_2+5x_2^2=(3x_1+2x_2)^2+x_2^2>0\) para todo \(\mathbf{x}\in V\setminus\{\mathbf{0}\}\). Em contraste, \(A_2\) é simétrica mas não é definida positiva porque \(\mathbf{x}^TA_2\mathbf{x}=9x_1^2+12x_1x_2+3x_2^2=(3x_1+2x_2)^2-x_2^2\) pode ser menor que \(0\), por exemplo, para \(\mathbf{x}=[2,-3]^T\).”
5.2 A Ponte: Definitude Via o Sinal dos Autovalores
Testar o sinal de \(\mathbf{x}^TA\mathbf{x}\) para todo \(\mathbf{x}\) não parece, à primeira vista, uma tarefa finita — são infinitos vetores para checar. O Teorema Espectral Real do Bloco 4 dá exatamente a saída: como \(A\) simétrica se escreve \(A=Q\Lambda Q^T\), qualquer \(\mathbf{x}\) se decompõe na base ortonormal de \(Q\), e a forma quadrática vira uma soma ponderada pelos autovalores — o sinal de \(\mathbf{x}^TA\mathbf{x}\) para todo \(\mathbf{x}\) passa a depender só do sinal dos \(n\) autovalores, não de infinitos vetores. O Boyd enuncia essa equivalência diretamente (tradução nossa, Apêndice A.5.2, p. 646-647): “vemos que \(A\succ 0\) se, e somente se, todos os seus autovalores são positivos, ou seja, \(\lambda_{\min}(A)>0\).” (A notação \(A\succ 0\) é a forma compacta de “\(A\) é definida positiva”; \(A\succeq 0\), semidefinida positiva.) Verificando nos mesmos \(A_1\), \(A_2\) do MathML:
A1 = np.array([[9.0, 6.0], [6.0, 5.0]])
A2 = np.array([[9.0, 6.0], [6.0, 3.0]])
autoval_A1 = np.linalg.eigh(A1)[0]
autoval_A2 = np.linalg.eigh(A2)[0]
print("Autovalores de A1:", autoval_A1, "-> definida positiva?", np.all(autoval_A1 > 0))
print("Autovalores de A2:", autoval_A2, "-> definida positiva?", np.all(autoval_A2 > 0))Autovalores de A1: [ 0.67544468 13.32455532] -> definida positiva? True
Autovalores de A2: [-0.70820393 12.70820393] -> definida positiva? False
\(A_1\) tem os dois autovalores positivos — definida positiva, confirmando o exemplo resolvido do MathML sem precisar testar infinitos \(\mathbf{x}\). \(A_2\) tem um autovalor negativo — a mesma informação que o contraexemplo \(\mathbf{x}=(2,-3)\) já tinha revelado, mas agora visível de antemão, olhando só para a matriz.
5.3 Intuição Geométrica: o Formato da Tigela
Vale conectar essa ideia a uma imagem: a forma quadrática \(f(\mathbf{x})=\mathbf{x}^TA\mathbf{x}\), vista como uma função de \(\mathbf{x}\in\mathbb{R}^2\), desenha uma superfície. Quando \(A\) é definida positiva, essa superfície tem o formato de uma tigela — um único mínimo na origem, subindo em toda direção. Quando \(A\) é indefinida (nem positiva nem negativa definida, o caso de \(A_2\)), a superfície tem formato de sela: sobe em algumas direções, desce em outras — exatamente consistente com \(\mathbf{x}^TA_2\mathbf{x}\) trocar de sinal.
No painel esquerdo (\(A_1\)), as curvas de nível são elipses concêntricas crescendo em todas as direções a partir da origem — nenhuma curva de nível zero aparece porque o valor mínimo, zero, só é atingido em \(\mathbf{x}=\mathbf{0}\). No painel direito (\(A_2\)), a linha vermelha marca onde \(\mathbf{x}^TA_2\mathbf{x}=0\) — e o mapa de cores muda de azul (positivo) para vermelho (negativo) atravessando essa linha, o retrato visual direto de “indefinida”.
5.4 O Quociente de Rayleigh: Isolando \(\lambda_{\max}\) e \(\lambda_{\min}\)
Falta uma última peça para fechar exatamente o número de condição: uma forma de isolar o maior e o menor autovalor de \(A\) diretamente da forma quadrática, sem calcular todos os autovalores primeiro. O Boyd define essa peça — o quociente de Rayleigh — e prova a desigualdade que o conecta à forma quadrática (tradução nossa, Apêndice A.5.2, p. 646-647):
“O maior e o menor autovalor satisfazem \(\lambda_{\max}(A)=\sup_{\mathbf{x}\ne 0} \frac{\mathbf{x}^TA\mathbf{x}}{\mathbf{x}^T\mathbf{x}}\), \(\lambda_{\min}(A)=\inf_{\mathbf{x}\ne 0} \frac{\mathbf{x}^TA\mathbf{x}}{\mathbf{x}^T\mathbf{x}}\). Em particular, para qualquer \(\mathbf{x}\), temos \(\lambda_{\min}(A)\,\mathbf{x}^T\mathbf{x}\le\mathbf{x}^TA\mathbf{x} \le\lambda_{\max}(A)\,\mathbf{x}^T\mathbf{x}\).”
A prova é uma aplicação direta do Teorema Espectral: decompondo \(\mathbf{x}=\sum_i c_i\mathbf{q}_i\) na base ortonormal de autovetores (\(\mathbf{q}_i\), colunas de \(Q\)), a forma quadrática vira \(\mathbf{x}^TA\mathbf{x}=\sum_i\lambda_ic_i^2\) e a norma \(\mathbf{x}^T\mathbf{x}=\sum_ic_i^2\) — o quociente \(\frac{\sum_i\lambda_ic_i^2}{\sum_ic_i^2}\) é, literalmente, uma média ponderada dos autovalores (pesos \(c_i^2\ge 0\)), e toda média ponderada fica entre o menor e o maior valor pesado. É exatamente essa média ponderada que dá nome ao quociente.
5.5 O Número de Condição, Agora Exato
Essa é a peça que fecha, com precisão, o ciclo aberto na Aula 3. O Boyd define (tradução nossa, Apêndice A.5.2, p. 649): “o número de condição de uma matriz não-singular \(A\in\mathbb{R}^{n\times n}\), denotado \(\text{cond}(A)\) ou \(\kappa(A)\), é definido como \(\text{cond}(A)=\|A\|_2\|A^{-1}\|_2=\sigma_{\max}(A)/\sigma_{\min}(A)\)” — uma definição em termos de valores singulares \(\sigma\), que se aplica a qualquer matriz (mesmo retangular). Para uma matriz simétrica definida positiva (o caso de \(X^TX\) sob posto completo), os valores singulares coincidem exatamente com os autovalores (todos positivos), e a definição colapsa para \[
\text{cond}(A) = \frac{\lambda_{\max}(A)}{\lambda_{\min}(A)}.
\] Essa é a fórmula que faltava desde a Aula 3: o número de condição de \(X^TX\) não precisa ser estimado perturbando os dados — é, literalmente, a razão entre o maior e o menor autovalor de \(X^TX\), calculável de uma só vez via numpy.linalg.eigh. O Bloco 6 aplica exatamente essa fórmula aos mesmos números que a Aula 3 só tinha medido empiricamente.
5.6 Ponte Breve (Sem Aprofundar): Hessiana e Convexidade
Vale uma menção, sem desenvolver agora: a mesma forma quadrática \(\mathbf{x}^TA\mathbf{x}\) que classifica \(A\) aqui é, literalmente, a segunda derivada (Hessiana) de uma função quadrática — e definitude positiva da Hessiana é exatamente a condição que caracteriza convexidade (um único mínimo, sem sela nem máximo espúrio), tema formal da Aula 7 desta disciplina. A Aula 3 já usou isso de relance, sem nomear: a Hessiana \(2X^TX\) da função de mínimos quadrados era sempre semidefinida positiva, o que garantia convexidade e, portanto, que a condição de gradiente-zero das Equações Normais era suficiente para um mínimo global — o mesmo raciocínio deste bloco, aplicado antes de ter o nome.
Dica: releia a fórmula \(\text{cond}(A)=\lambda_{\max}(A)/\lambda_{\min}(A)\) — o que acontece com uma fração quando o denominador tende a zero?
- □ Se \(\lambda_{\min}(A)\) estivesse muito próximo de zero, mas ainda estritamente positivo, o número de condição de \(A\) ficaria muito grande, mesmo com \(A\) continuando definida positiva (todos os autovalores positivos).
- □ Se todos os autovalores de uma matriz simétrica \(A\) fossem iguais entre si (\(A=cI\), \(c>0\)), o número de condição de \(A\) seria necessariamente igual a \(1\), o menor valor possível.
- □ Na Hessiana da função de perda usada para treinar uma regressão logística, um número de condição muito alto sinalizaria o mesmo tipo de sensibilidade numérica discutida aqui (ex.: gradiente descendente convergindo muito devagar em certas direções), mesmo fora do contexto de regressão linear.
- □ Como o quociente de Rayleigh é uma média ponderada dos autovalores, isso implica que o quociente \(\mathbf{x}^TA\mathbf{x}/\mathbf{x}^T \mathbf{x}\) é sempre igual à média aritmética simples dos autovalores, qualquer que seja \(\mathbf{x}\).
6 Aplicação e Verificação no Dado Real
6.1 Recalculando o Número de Condição da Aula 3 — Agora Exato
Chegou a hora de fechar o ciclo prometido no início desta aula. Reaproveitando exatamente \(X^TX\) da Aula 3 — os mesmos 4 atributos completos e os mesmos dois pares na amostra de 20 bairros — vamos calcular os autovalores exatos via numpy.linalg.eigh (a rotina especializada em matrizes simétricas, já usada no Bloco 4) e confirmar que a razão \(\lambda_{\max}/\lambda_{\min}\) reproduz, número por número, os números que a Aula 3 só tinha obtido via np.linalg.cond e perturbação:
X_completo = _housing[COLS].to_numpy()
XtX = X_completo.T @ X_completo
autoval_XtX, autovec_XtX = np.linalg.eigh(XtX)
cond_completo_exato = autoval_XtX.max() / autoval_XtX.min()
print("Autovalores de X^T X (4 atributos, ordem crescente):")
print(autoval_XtX)
print(f"\ncond(X^T X) via autovalores exatos: {cond_completo_exato:,.1f}")
print(f"cond(X^T X) via np.linalg.cond (Aula 3): {np.linalg.cond(XtX):,.1f}")Autovalores de X^T X (4 atributos, ordem crescente):
[7.47253320e+02 5.26660328e+04 2.73990283e+05 1.75309388e+07]
cond(X^T X) via autovalores exatos: 23,460.5
cond(X^T X) via np.linalg.cond (Aula 3): 23,460.5
Os dois números coincidem até a primeira casa decimal — \(\text{cond}(X^TX)\approx 23\,460{,}5\), exatamente o valor que a Aula 3 tinha medido de forma indireta (np.linalg.cond, que por baixo dos panos já usa os valores singulares — para uma matriz simétrica PSD como \(X^TX\), os mesmos autovalores calculados aqui). A diferença é que agora sabemos de onde esse número vem: da razão entre o maior autovalor (\(\approx 1{,}75\times 10^7\)) e o menor (\(\approx 747\)) de \(X^TX\) — uma propriedade da própria matriz, não do resultado de nenhuma perturbação. Repetindo para os dois pares de 20 bairros:
_amostra_20 = _housing.sample(n=20, random_state=7)
X_quase_dep = _amostra_20[["AveRooms", "AveBedrms"]].to_numpy()
X_bem_cond = _amostra_20[["MedInc", "HouseAge"]].to_numpy()
autoval_qd = np.linalg.eigh(X_quase_dep.T @ X_quase_dep)[0]
autoval_bc = np.linalg.eigh(X_bem_cond.T @ X_bem_cond)[0]
cond_qd_exato = autoval_qd.max() / autoval_qd.min()
cond_bc_exato = autoval_bc.max() / autoval_bc.min()
print("Autovalores de X^T X (AveRooms, AveBedrms):", autoval_qd)
print(f"cond exato (quase-colinear): {cond_qd_exato:,.1f}")
print()
print("Autovalores de X^T X (MedInc, HouseAge): ", autoval_bc)
print(f"cond exato (bem-condicionado): {cond_bc_exato:,.1f}")Autovalores de X^T X (AveRooms, AveBedrms): [ 1.76730921 741.96132008]
cond exato (quase-colinear): 419.8
Autovalores de X^T X (MedInc, HouseAge): [ 139.61748016 23613.01422068]
cond exato (bem-condicionado): 169.1
Os três números reproduzem exatamente os valores da Aula 3: \(\text{cond}(X^TX)\approx 419{,}8\) para o par quase-colinear e \(\approx 169{,}1\) para o par bem-condicionado — mais que o dobro de diferença, agora explicado, não só medido. A resposta à pergunta do Bloco 1 (“existe alguma propriedade de \(X^TX\) calculável sem perturbar nada que já anteciparia a fragilidade?”) é, enfim, sim: o menor autovalor de \(X^TX\) para o par quase-colinear (\(\approx 1{,}77\)) é minúsculo perto do maior (\(\approx 742\)) — um sintoma direto de que uma das direções do espaço gerado pelas duas colunas quase não é “vista” pela matriz, exatamente a direção em que AveRooms e AveBedrms praticamente coincidem. Já no par bem-condicionado, os dois autovalores (\(\approx 139{,}6\) e \(\approx 23\,613{,}0\)) ainda diferem bastante em escala bruta — lembrando que MedInc e HouseAge têm variâncias naturais bem diferentes —, mas a razão entre eles é quase \(2{,}5\times\) menor que no par quase-colinear, o suficiente para tornar o sistema consideravelmente mais estável.
6.2 Uma Segunda Matriz Simétrica PSD: a Covariância Empírica
\(X^TX\) não é a única matriz simétrica semidefinida positiva que aparece naturalmente em dados. Outra, de natureza um pouco diferente — não mais colunas brutas, mas colunas centradas na própria média — é a matriz de covariância empírica. Para as duas colunas AveRooms e AveBedrms (o mesmo par quase-colinear de cima), a covariância mede como elas variam juntas em torno das respectivas médias:
X_cov_dados = _housing[["AveRooms", "AveBedrms"]].to_numpy()
cov_empirica = np.cov(X_cov_dados, rowvar=False)
print("Matriz de covariância (AveRooms, AveBedrms):")
print(cov_empirica)
print("\nÉ simétrica?", np.allclose(cov_empirica, cov_empirica.T))
autoval_cov, autovec_cov = np.linalg.eigh(cov_empirica)
print("\nAutovalores:", autoval_cov)
print("Autovetores (colunas):")
print(autovec_cov)
print("\nOrtogonalidade (produto interno entre os dois autovetores):",
autovec_cov[:, 0] @ autovec_cov[:, 1])Matriz de covariância (AveRooms, AveBedrms):
[[7.01551552 1.17219151]
[1.17219151 0.26163945]]
É simétrica? True
Autovalores: [0.06398052 7.21317445]
Autovetores (colunas):
[[ 0.16627604 -0.98607925]
[-0.98607925 -0.16627604]]
Ortogonalidade (produto interno entre os dois autovetores): 0.0
A matriz é simétrica (por construção — covariância entre \(i\) e \(j\) é sempre igual à covariância entre \(j\) e \(i\)) e semidefinida positiva (nenhum autovalor negativo, \(\approx 0{,}064\) e \(\approx 7{,}213\)), e os dois autovetores são ortogonais entre si até erro de arredondamento — exatamente o Teorema Espectral Real do Bloco 4 se aplicando de novo, desta vez a uma matriz de covariância, não a \(X^TX\) bruta. O autovetor principal — o de maior autovalor, \(\approx (-0{,}986;-0{,}166)\) (ou, de forma equivalente, \((0{,}986;0{,}166)\), já que o sinal de um autovetor não importa, Bloco 2) — aponta na direção de maior variância dos dados: geometricamente, é a direção ao longo da qual a nuvem de pontos AveRooms/AveBedrms está mais “esticada”.
6.3 Interpretando o Autovetor Principal sobre os Dados Reais
Vale ver essa direção sobreposta ao espalhamento real das duas variáveis, não só como um vetor abstrato:
O autovetor principal (vermelho) segue quase exatamente ao longo do eixo AveRooms — coerente com AveRooms ter variância bruta bem maior que AveBedrms (\(\approx 7{,}02\) contra \(\approx 0{,}26\), quase \(27\times\)) —, mas ligeiramente inclinado na direção de AveBedrms positiva, refletindo a covariância positiva entre as duas (\(\approx
1{,}17\): bairros com mais cômodos por domicílio tendem a ter também mais quartos por domicílio, o que já era esperado). O autovetor secundário (laranja), ortogonal ao principal, captura a variação residual — a parte de AveBedrms que não é só “proporcional a AveRooms” —, e seu autovalor muito menor (\(\approx 0{,}064\) contra \(\approx 7{,}213\)) mostra que essa direção secundária carrega bem pouca informação adicional sobre a nuvem de pontos.
6.4 Semente Para PCA (Sem Aprofundar) — e um Aviso Honesto sobre Escala
O que acabamos de fazer — encontrar a direção de maior variância de um conjunto de dados via a autodecomposição da matriz de covariância — é, sem exagero nenhum, o primeiro passo da Análise de Componentes Principais (PCA), tema que a disciplina de Aprendizado Não Supervisionado desenvolve por completo; esta aula planta a semente, sem desenvolvê-la. Antes de fechar o bloco, um aviso honesto sobre um detalhe fácil de esconder: essa análise é sensível à escala. Se, em vez de só AveRooms/AveBedrms, calculássemos a covariância dos 4 atributos brutos, o resultado seria dominado por HouseAge — o atributo de maior variância numérica bruta, não necessariamente o mais “importante” para qualquer tarefa:
X_cov4 = _housing[COLS].to_numpy()
cov4 = np.cov(X_cov4, rowvar=False)
print("Variância de cada atributo (diagonal da covariância):")
for nome, var in zip(COLS, np.diag(cov4)):
print(f" {nome:10s}: {var:10.4f}")
autoval_cov4 = np.linalg.eigh(cov4)[0]
print("\nAutovalores da covariância (4 atributos):", autoval_cov4)Variância de cada atributo (diagonal da covariância):
MedInc : 3.4862
HouseAge : 163.7848
AveRooms : 7.0155
AveBedrms : 0.2616
Autovalores da covariância (4 atributos): [3.36605897e-02 2.96906503e+00 7.52330508e+00 1.64022194e+02]
A variância de HouseAge (\(\approx 163{,}8\)) é mais de \(20\times\) maior que a de qualquer outro atributo — e o maior autovalor da covariância completa (\(\approx 164{,}0\)) reflete quase só essa escala, não a estrutura de correlação entre os quatro atributos que de fato interessaria numa análise de PCA. É exatamente por isso que aplicar PCA a sério exige padronizar os atributos antes (subtrair a média e dividir pelo desvio-padrão de cada coluna) — sem isso, a “direção de maior variância” tende a só apontar para o atributo de maior escala numérica bruta, não para a estrutura real dos dados. Não vamos desenvolver a padronização nem o PCA aqui — só deixamos o aviso, e a ponte, explícitos.
7 Fechamento e Ponte para a Aula 5
Retomando as perguntas de abertura
- O que é, geometricamente, um autovalor e um autovetor? Um autovetor é uma direção que uma transformação linear \(A\) não gira — só estica ou encolhe (e inverte, se o autovalor for negativo); o autovalor é exatamente esse fator de escala.
- Como calcular à mão, via o polinômio característico? A equação \(A\mathbf{x}=\lambda\mathbf{x}\) vira o sistema homogêneo \((A-\lambda I)\mathbf{x}=\mathbf{0}\), que só tem solução não-trivial quando \(\det(A-\lambda I)=0\) — os autovalores são as raízes reais desse polinômio, os autovetores resolvem o sistema com \(\lambda\) já conhecido.
- Por que toda matriz simétrica — como \(X^TX\) — tem autovalores reais e autovetores ortogonais? O Teorema Espectral Real garante isso sempre; provamos a ortogonalidade entre autovalores distintos via \(\mathbf{x}_1^TA\mathbf{x}_2\) calculado de duas formas, usando a simetria de \(A\) exatamente no passo decisivo.
- Como sinal e razão dos autovalores definem definitude e o número de condição exato? \(A\succ 0 \iff \lambda_{\min}(A)>0\); e, para \(A\) simétrica definida positiva, \(\text{cond}(A)= \lambda_{\max}(A)/\lambda_{\min}(A)\) — a fórmula que o Bloco 6 usou para reproduzir, exatamente, os números que a Aula 3 só tinha medido por perturbação.
O Que Fica em Aberto
Autovalores e autovetores reais, na forma garantida pelo Teorema Espectral, só existem de forma incondicional para matrizes quadradas simétricas — \(X^TX\) sempre se encaixa aí, mas \(X\) em si, a matriz de design retangular (\(N\ne d\) linhas e colunas), não. A pergunta que fica aberta: o que fazer quando se quer decompor a própria \(X\), não \(X^TX\)? A resposta é a Decomposição em Valores Singulares (SVD), tema da Aula 5 — e o Boyd já deixou uma pista, sem desenvolver: a própria definição de número de condição usada neste bloco (\(\sigma_{\max}/ \sigma_{\min}\)) foi escrita em termos de valores singulares, não de autovalores — a generalização exata que a Aula 5 vai construir.