Aula 3: Projeções Ortogonais e Subespaços

Álgebra Linear e Otimização para Aprendizado de Máquina

Prof. Marcos Medeiros Raimundo

2026-08-30

Revisão e Introdução

Revisão Rápida: Onde a Aula 2 Parou

Aula 2: matriz de design \(X\in\mathbb{R}^{N\times d}\), duas leituras de \(A\mathbf{x}\) (linha = previsão, coluna = combinação linear), sistemas lineares com 0, 1 ou \(\infty\) soluções via o posto da matriz aumentada.

Também: colunas independentes (sem multicolinearidade) \(\Rightarrow\) posto completo, \(\text{rk}(X)=d\). Vamos reusar isso no Bloco 4 — é a condição que garante solução única hoje.

Peça central: \(X\mathbf{w}=\mathbf{y}\) tem \(N\) equações, \(d\) incógnitas. Em ML real, \(N\gg d\)sobredeterminado, genericamente sem solução exata.

De “Sem Solução” Para “Melhor Aproximação”

“Sem solução exata” não é “sem solução que preste”. O próprio MathML aponta a saída: “a ideia é encontrar o vetor no subespaço gerado pelas colunas de \(A\) que está mais próximo de \(\mathbf{b}\)” (tradução nossa, §3.8.2).

“Mais próximo, mas dentro de onde?” — geométrico antes de algébrico. É o fio desta aula.

Roteiro da Aula

“Mais próximo, mas dentro de onde?” se desdobra em quatro perguntas, uma por bloco:

1. O que significa “a melhor aproximação possível” de \(\mathbf{y}\)?

2. O que é projetar sobre um subespaço, e por que resolve o problema 1?

3. Como isso vira uma fórmula calculável — as Equações Normais?

4. Quando essa fórmula falha, ou fica frágil, e por quê?

Problema Motivador

California Housing: \(N=16\,640\) bairros, 4 atributos. Sistema \(X\mathbf{w}=\mathbf{y}\): \(16\,640\) equações, \(4\) incógnitas — sobredeterminado por uma margem enorme.

Se \(X\mathbf{w}\) nunca alcança \(\mathbf{y}\) exatamente, qual \(X\mathbf{w}\) alcançável está mais perto? “Mais perto” — medido como?

Pergunta

Se \(X\mathbf{w}=\mathbf{y}\) nunca é alcançado exatamente, existe sempre exatamente uma “melhor” aproximação, ou pode haver várias igualmente boas?

Dica: a Aula 2 já classificou o número de soluções exatas de um sistema — 0, 1 ou \(\infty\). Trocar “exata” por “aproximada” muda essa contagem?

  • □ Se o sistema fosse subdeterminado (\(N<d\)), a pergunta “qual é mais próximo?” mudaria de natureza: de erro irredutível para escolha entre infinitas soluções exatas.
  • □ No caso-limite \(N=d\) com \(X\) de posto completo, a melhor aproximação coincide exatamente com \(\mathbf{y}\) (erro zero).
  • □ GPS com mais satélites que coordenadas: mesma lógica de projeção se aplica, outro domínio.
  • □ Sem solução exata, a Regressão Linear Múltipla perde toda utilidade.

Resposta

Se \(X\mathbf{w}=\mathbf{y}\) nunca é alcançado exatamente, existe sempre uma “melhor” aproximação? — Resposta

  • ✔ Subdeterminado: se solúvel, há \(\infty\) soluções exatas — a pergunta vira “qual escolher”, não “qual erro minimizar”.
  • \(N=d\), posto completo: sistema quadrado invertível, erro zero.
  • ✔ GPS: mesma matemática, outro domínio (localização em vez de preço).
  • ✗ Falta de solução exata não implica falta de utilidade — é exatamente o problema que esta aula resolve com projeção.

Voltando à pergunta: no regime sobredeterminado desta aula (posto completo), existe exatamente uma melhor aproximação — é isso que o Bloco 4 vai provar, via projeção ortogonal.

Intuição: A Sombra no Chão

A Ideia Antes da Álgebra

Um ponto \(\mathbf{y}\) flutuando no espaço; um subespaço \(U\) como “o chão”. Luz perpendicular ao chão \(\Rightarrow\) sombra \(\hat{\mathbf{y}}\).

Propriedade 1: \(\hat{\mathbf{y}}\) é o ponto de \(U\) mais próximo de \(\mathbf{y}\) — nenhum outro ponto do chão está mais perto.

Propriedade 2: o segmento \(\mathbf{y}\to\hat{\mathbf{y}}\) é perpendicular a todo \(U\), não só à direção da luz.

O Que os Dois Painéis Mostram

Esquerda: \(U\) = reta na direção \((2,1)\); \(\mathbf{y}=(1{,}0;3{,}2)\) fora dela. Sombra \(\hat{\mathbf{y}}\) = ponto da reta mais próximo; o tracejado encontra a reta em ângulo reto.

Direita: “chão” = plano \(x_3=0\) em \(\mathbb{R}^3\). Projeção só “zera” a componente perpendicular: \((1{,}5;1{,}8;2{,}3)\to(1{,}5;1{,}8;0)\).

Em ambos, o tracejado é perpendicular a todo o subespaço — essa observação generaliza para \(\text{col}(X)\), com \(d=4\) dimensões, não \(1\) ou \(2\). A álgebra muda; a geometria, não.

Pergunta

Se a “luz” da projeção não viesse perpendicular ao chão, o ponto resultante ainda seria o mais próximo de \(\mathbf{y}\)?

Dica: incline a direção da haste que liga \(\mathbf{y}\) à sua sombra — o ponto de chegada continuaria sendo o mais próximo?

  • □ Luz oblíqua (não perpendicular): o ponto resultante ainda seria o ponto do subespaço mais próximo de \(\mathbf{y}\).
  • □ Se \(\mathbf{y}\) já pertencesse a \(U\), a sombra coincidiria com o próprio \(\mathbf{y}\), resíduo de norma zero.
  • □ Compressão de imagem via componentes principais é, geometricamente, a mesma projeção perpendicular discutida aqui, outro tipo de dado.
  • □ A sombra perpendicular, por minimizar distância, também maximiza a norma do ponto do subespaço.

Resposta

A “luz” da projeção — Resposta

  • ✗ Só a luz perpendicular garante o ponto mais próximo; qualquer ângulo oblíquo fixo geralmente erra o mínimo (é a mesma lógica do Teorema de Pitágoras: a hipotenusa de um triângulo oblíquo é maior que o cateto perpendicular).
  • \(\mathbf{y}\in U \Rightarrow \hat{\mathbf{y}}=\mathbf{y}\), resíduo nulo — caso trivial, mas consistente.
  • ✔ Mesma operação geométrica (projeção ortogonal), outro domínio (compressão/PCA, tema da disciplina de Aprendizado Não Supervisionado).
  • ✗ Minimizar distância a \(\mathbf{y}\) não tem relação com a norma do próprio ponto do subespaço — são duas quantidades independentes.

Voltando à pergunta: só a perpendicular funciona — é exatamente a Propriedade 2 que o Bloco 4 vai provar ser equivalente à Propriedade 1 (mais próximo \(\iff\) perpendicular), não só uma coincidência do desenho.

Subespaços e Complemento Ortogonal

Recapitulando: Subespaço e Espaço-Coluna

Subespaço \(U\subseteq V\) (Aula 1): fechado sob combinação linear — para quaisquer \(\mathbf{u},\mathbf{v}\in U\) e escalares \(a,b\in\mathbb{R}\), \(a\mathbf{u}+b\mathbf{v}\in U\) (em particular, \(\mathbf{0}\in U\)).

Espaço-coluna (Aula 2): \(\text{col}(X) = \{X\mathbf{w} : \mathbf{w}\in\mathbb{R}^d\}\subseteq\mathbb{R}^N\) — todas as combinações lineares das colunas de \(X\) (Leitura 2 do produto matriz-vetor). \(\text{col}(X)\) já é, por construção, um subespaço.

\(X\in\mathbb{R}^{16640\times 4}\), posto completo: \(\text{col}(X)\) tem dimensão \(4\) dentro de um ambiente de dimensão \(16\,640\) — um “plano” finíssimo boiando num espaço gigantesco. \(\mathbf{y}\) quase certamente fora dele.

O Complemento Ortogonal

Definição (MathML, §3.6, tradução nossa): dado \(U\subseteq V\) com \(\dim U = M\), \(\dim V = D\), seu complemento ortogonal \(U^\perp\) é um subespaço de dimensão \((D-M)\): todos os vetores de \(V\) ortogonais a todo vetor de \(U\).

\(U\cap U^\perp=\{\mathbf{0}\}\); todo \(\mathbf{x}\in V\) se decompõe de forma única: \[\mathbf{x} = \underbrace{\sum_m \lambda_m\mathbf{b}_m}_{\in\, U} + \underbrace{\sum_j \psi_j\mathbf{b}_j^\perp}_{\in\, U^\perp}\]

Notação compacta: \(V = U\oplus U^\perp\) — uma única parte em \(U\), uma única parte em \(U^\perp\), nada sobra de fora.

O Complemento Ortogonal

\(D=2\), \(U\) = reta (\(M=1\)) \(\Rightarrow\) \(U^\perp\) = reta perpendicular (\(D-M=1\)). \(\mathbf{x}=(1,3)\) decompõe-se de forma única: soma das duas setas recupera \(\mathbf{x}\), sem sobra, sem ambiguidade.

Em \(\mathbb{R}^3\) com \(U\) = plano (\(M=2\)): \(U^\perp\) tem dimensão \(1\) — o vetor normal do MathML, “\(\mathbf{w}\) com \(\|\mathbf{w}\|=1\), ortogonal ao plano \(U\)” (tradução nossa, §3.6).

Na regressão: \(D=16\,640\), \(M=4\). \(U^\perp=\text{col}(X)^\perp\) tem dimensão \(16\,636\) — irrelevante em si; o que importa é que o resíduo \(\mathbf{y}-\hat{\mathbf{y}}\) vive exatamente ali.

Pergunta

Se \(U\) fosse o subespaço trivial \(\{\mathbf{0}\}\), o que seria \(U^\perp\)?

Dica: \(U^\perp\) contém todo vetor ortogonal a todo vetor de \(U\). Com \(U=\{\mathbf{0}\}\), quantos vetores de \(V\) cumprem isso?

  • \(U=\{\mathbf{0}\}\) \(\Rightarrow\) \(U^\perp = V\) (o espaço inteiro).
  • \(U=V\) \(\Rightarrow\) \(U^\perp=\{\mathbf{0}\}\).
  • □ O resíduo ortogonal ao espaço-coluna de \(X\) satisfaz a própria definição formal de pertencer a \(\text{col}(X)^\perp\), não só “ortogonal” informalmente.
  • □ Decomposição única de \(V\) em \(U\oplus U^\perp\) implica \(\dim U = \dim U^\perp\).

Resposta

Subespaço trivial e seu complemento — Resposta

  • ✔ Todo vetor de \(V\) é ortogonal a \(\mathbf{0}\) (produto interno com o vetor nulo é sempre \(0\)); logo \(U^\perp=V\).
  • ✔ Caso simétrico do anterior: só \(\mathbf{0}\) é ortogonal a todo vetor de \(V=U\).
  • ✔ É exatamente a definição de \(U^\perp\) aplicada a \(U=\text{col}(X)\) — antecipa o Bloco 4.
  • \(\dim U=M\), \(\dim U^\perp=D-M\); iguais só se \(D=2M\), não em geral (na regressão, \(M=4 \ne D-M=16\,636\)).

Voltando à pergunta: o complemento ortogonal de \(\{\mathbf{0}\}\) é o espaço todo — caso extremo que confirma a definição, não uma exceção a ela.

O Teorema da Projeção: Premissas e Passo a Passo

Enunciando o Problema com Precisão

Nota

Premissas

  1. Subespaço \(U=\text{col}(X)\subseteq\mathbb{R}^N\) (Aula 2).
  2. \(\mathbf{y}\in\mathbb{R}^N\), em geral fora de \(U\) (sobredeterminado).
  3. \(\hat{\mathbf{y}}\in U\) = ponto de \(U\) mais próximo de \(\mathbf{y}\) (minimiza \(\|\mathbf{y}-\hat{\mathbf{y}}\|\)) — a “sombra” formalizada.

Objetivo: dessas premissas até uma fórmula fechada e calculável para \(\hat{\mathbf{w}}\), com \(\hat{\mathbf{y}}=X\hat{\mathbf{w}}\).

Passo (i): “Mais Próximo” Equivale a “Ortogonal a Cada Coluna de \(X\)” — Via Otimização

Minimizar \(\|\mathbf{y}-\mathbf{v}\|\) sobre \(\mathbf{v}\in U=\text{col}(X)\) \(\equiv\) minimizar \(\|\mathbf{y}-\mathbf{v}\|^2\). Podemos definir \(\mathbf{v}=X\mathbf{w}\) com \(\mathbf{w}\in\mathbb{R}^d\) livre, onde \(\mathbf{w}\) é a variável livre.

\[g(\mathbf{w}) = \|\mathbf{y}-X\mathbf{w}\|^2 = \mathbf{y}^T\mathbf{y} - 2\mathbf{y}^TX\mathbf{w} + \mathbf{w}^TX^TX\mathbf{w}\] Cálculo vetorial: \(\nabla_{\mathbf{w}} g = -2X^T\mathbf{y}+2X^TX\mathbf{w} = -2X^T(\mathbf{y}-X\mathbf{w})\).

Hessiana \(2X^TX\) é sempre semidefinida positiva (\(\mathbf{w}^TX^TX\mathbf{w}=\|X\mathbf{w}\|^2\ge0\)) \(\Rightarrow\) \(g\) convexa — nem precisa de \(X^TX\) invertível ainda. Condição de otimalidade de primeira ordem (irrestrita, necessária e suficiente): \[X^T(\mathbf{y}-X\hat{\mathbf{w}}) = \mathbf{0}\]

Resíduo ortogonal a cada coluna de \(X\) \(\Rightarrow\) (combinação linear) ortogonal a todo \(\text{col}(X)\): \[\mathbf{y}-X\hat{\mathbf{w}} \perp \text{col}(X)\] Mesma equação do MathML (\(B^T(\mathbf{x}-B\lambda)=\mathbf{0}\), tradução nossa, §3.8.2) — ali via base abstrata; aqui, direto com \(X\).

Passo (ii): Isolando \(\hat{\mathbf{w}}\) — as Equações Normais

Distribuindo o Passo (i): \[X^T\mathbf{y} - X^TX\hat{\mathbf{w}} = \mathbf{0} \iff X^TX\hat{\mathbf{w}} = X^T\mathbf{y}\]

Equações Normais (MathML, eq. 3.56, tradução nossa) — um sistema linear em \(\hat{\mathbf{w}}\): \(X^TX\) no papel de “\(A\)”, \(X^T\mathbf{y}\) no papel de “\(\mathbf{b}\)” — mesma estrutura \(A\mathbf{x}=\mathbf{b}\) da Aula 2.

Quando o Sistema Tem Solução Única

MathML (tradução nossa, §3.8.2): colunas de \(X\) linearmente independentes \(\Rightarrow\) \(X^TX\) “regular, pode ser invertida” — exatamente o posto completo (\(\text{rk}(X)=d\)) da Aula 2, Bloco 5.

Sob posto completo: \[\hat{\mathbf{w}} = (X^TX)^{-1}X^T\mathbf{y}\] \((X^TX)^{-1}X^T\) = pseudo-inversa de \(X\) (MathML) — nome que volta quando o curso tratar de SVD.

Sobredeterminado sem solução exata, mas com aproximação sob posto completo — com fórmula fechada.

\usetikzlibrary{arrows.meta, positioning}
\definecolor{icblue}{HTML}{0085CA}
\definecolor{icorange}{HTML}{FF5E00}
\definecolor{icred}{HTML}{E03C31}
\begin{tikzpicture}[scale=1.0]
  % col(X): reta pela origem, direção (5,1) -- ŷ abaixo é a projeção
  % ortogonal exata de y sobre essa reta (calculada, não estética).
  \draw[icblue, thick] (-2.648,-0.530) -- (2.648,0.530) node[right] {\small $\mathrm{col}(X)$};
  \node (yhat) at (1.462,0.292) {};
  \fill[icorange] (1.462,0.292) circle (2.4pt);
  \node[icorange, below right=1pt and 2pt of yhat, font=\small] {$\hat{\mathbf{y}}=X\hat{\mathbf{w}}$};
  \node (y) at (1.1,2.1) {};
  \fill[icred] (1.1,2.1) circle (2.4pt);
  \node[icred, above=2pt of y, font=\small] {$\mathbf{y}$};
  \draw[gray!70, dashed, thick, -{Stealth}] (1.1,2.1) -- (1.462,0.292) node[midway, right, font=\small, black] {resíduo $\perp\, \mathrm{col}(X)$};
  % marcador de ângulo reto no ponto de encontro
  \draw[gray!70, thick] (1.609,0.322) -- (1.579,0.469) -- (1.432,0.440);
  \draw[icblue, -{Stealth}, thick] (1.119,0.224) -- (1.462,0.292);
\end{tikzpicture}

Pergunta

A condição \((\mathbf{y}-X\hat{\mathbf{w}})\perp\text{col}(X)\) garante resíduo zero?

Dica: “mais próximo” e “ortogonal” são a mesma condição (Passo i) — isso é o mesmo que “erro desaparece”?

  • □ Se o critério fosse minimizar \(\|\mathbf{y}-X\mathbf{w}\|_1\) em vez de \(L_2\), a mesma condição de ortogonalidade ainda garantiria a solução.
  • □ Se \(\mathbf{y}\in\text{col}(X)\), as Equações Normais dão \(\hat{\mathbf{w}}\) com \(X\hat{\mathbf{w}}=\mathbf{y}\) exatamente.
  • □ Calibração de sensores (\(N\) leituras, \(d<N\) parâmetros físicos): mesma derivação das Equações Normais, outro domínio.
  • □ Ortogonalidade do resíduo \(\Rightarrow\) resíduo nulo sempre que \(X\) tem posto completo.

Resposta

A condição de ortogonalidade garante resíduo zero? — Resposta

  • ✗ A equivalência “mínimo \(\iff\) ortogonal” (Passo i) é específica da norma \(L_2\)/produto interno; a norma \(L_1\) não tem essa geometria de ângulo reto, e minimizá-la leva a uma condição diferente (subgradiente nulo, não ortogonalidade).
  • \(\mathbf{y}\in\text{col}(X)\): a melhor aproximação é o próprio \(\mathbf{y}\), erro zero — caso trivial consistente com a teoria.
  • ✔ Mesma estrutura matemática (mínimos quadrados via projeção), outro domínio (calibração em vez de preço de imóvel).
  • ✗ Ortogonalidade a \(\text{col}(X)\) não força resíduo nulo — só força que o resíduo esteja em \(\text{col}(X)^\perp\); ele é zero apenas se \(\mathbf{y}\) já estivesse em \(\text{col}(X)\), o que é a exceção, não a regra, no caso sobredeterminado.

Voltando à pergunta: não — ortogonal ao subespaço é bem mais fraco que “igual a zero”; é só a direção do erro que fica fixada (\(U^\perp\)), não o seu tamanho.

Aplicação e Verificação no Dado Real

Calculando \(\hat{\mathbf{w}}\) de Verdade

Aplicando a fórmula fechada ao problema motivador: \(N=16\,640\) bairros, \(X\in\mathbb{R}^{16640\times 4}\), \(\mathbf{y}=\) MedHouseVal. Posto completo (Aula 2) \(\Rightarrow\) \(X^TX\) invertível.

X_completo = _housing[COLS].to_numpy()
y_completo = _housing["MedHouseVal"].to_numpy()

# Equações Normais, resolvidas diretamente pela fórmula fechada
XtX = X_completo.T @ X_completo
Xty = X_completo.T @ y_completo
w_hat = np.linalg.inv(XtX) @ Xty

tabela_w = pd.DataFrame({"atributo": COLS, "ŵ": np.round(w_hat, 5)})
tabela_w
atributo ŵ
0 MedInc 0.48761
1 HouseAge 0.01171
2 AveRooms -0.18809
3 AveBedrms 0.78255

O Que os Pesos Dizem

AveBedrms (\(\approx 0{,}783\)) é o maior peso seguido de aior peso em módulo nãoMedInc (\(\approx 0{,}488\)). AveRooms, \(\approx -0{,}188\) que deveria ter relação está negativo, pista de multicolinearidade, não de importância.

AveRooms/AveBedrms são correlacionados (Bloco 6); pesos estimados na presença um do outro podem se desequilibrar — um grande, outro pequeno ou negativo (AveRooms, \(\approx -0{,}188\)) — sem significado causal isolado.

MedInc (\(\approx 0{,}488\)): sem redundância com os demais, leitura direta. HouseAge (\(\approx 0{,}012\)): menor peso, quase sem efeito marginal.

Conferência Independente

Fórmula fechada não é a única forma de calcular \(\hat{\mathbf{w}}\)numpy.linalg.lstsq resolve o mesmo problema por outro algoritmo (decomposição, sem inverter \(X^TX\) explicitamente). As duas contas devem coincidir:

w_lstsq, *_ = np.linalg.lstsq(X_completo, y_completo, rcond=None)
print("w_hat (lstsq):           ", np.round(w_lstsq, 5))
print("maior diferença absoluta:", np.max(np.abs(w_hat - w_lstsq)))
w_hat (lstsq):            [ 0.48761  0.01171 -0.18809  0.78255]
maior diferença absoluta: 1.3100631690576847e-14

O Que a Comparação Confirma

Diferença máxima entre os dois \(\hat{\mathbf{w}}\): ordem de \(10^{-14}\) — zero, a menos de arredondamento de ponto flutuante.

Dois algoritmos completamente diferentes (inversão explícita \(4\times 4\) vs. decomposição numérica) chegam ao mesmo resultado — a derivação do Bloco 4 funciona com dados reais, não só no quadro.

Verificando a Ortogonalidade do Resíduo

Promessa do Passo (i): resíduo \(\perp\) cada coluna de \(X\) — não vago, uma igualdade numérica exata (a menos de arredondamento). Vamos checar:

residuo = y_completo - X_completo @ w_hat

print("Produto interno do resíduo com cada coluna de X:")
for j, nome in enumerate(COLS):
    prod = residuo @ X_completo[:, j]
    print(f"  {nome:10s}: {prod:.3e}")
Produto interno do resíduo com cada coluna de X:
  MedInc    : -4.522e-10
  HouseAge  : -5.039e-09
  AveRooms  : -8.756e-10
  AveBedrms : -1.987e-10

Zero, em Perspectiva

Cada produto interno: ordem de \(10^{-9}\) ou menor. Em proporção (dividido pelas normas): ordem de \(10^{-14}\) — numericamente zero, exatamente como o Passo (i) exigia.

Não é coincidência: é \(X^T(\mathbf{y}-X\hat{\mathbf{w}})=\mathbf{0}\) (Passo i) verificada numericamente, coluna a coluna.

O Tamanho do Resíduo

Ortogonalidade fixa a direção do erro (\(\in\text{col}(X)^\perp\)), não o tamanho. Vale medir:

norma_residuo = np.linalg.norm(residuo)
norma_y = np.linalg.norm(y_completo)
r2 = 1 - np.sum(residuo**2) / np.sum((y_completo - y_completo.mean())**2)

print(f"||resíduo|| = {norma_residuo:.2f}")
print(f"||y||       = {norma_y:.2f}")
print(f"||resíduo||/||y|| = {norma_residuo/norma_y:.3f}")
print(f"R² = {r2:.3f}")
||resíduo|| = 101.49
||y||       = 298.57
||resíduo||/||y|| = 0.340
R² = 0.518

O Que os Números Dizem

\(\|\text{resíduo}\|\approx 101{,}5\) contra \(\|\mathbf{y}\|\approx 298{,}6\): \(R^2\approx 0{,}518\) — o modelo explica pouco mais da metade da variação do preço com só 4 atributos.

Não é falha da matemática do Bloco 4 — a projeção garante a melhor aproximação dentro de \(\text{col}(X)\), não uma boa aproximação em termos absolutos. Faltam atributos (localização, qualidade, costa); o subespaço disponível é pequeno demais para chegar perto de \(\mathbf{y}\).

Vendo o Ajuste numa Amostra Concreta

Amostra de 6 bairros da Aula 2 (random_state=7), agora com \(\hat{\mathbf{w}}\) de verdade — ajustado nos \(16\,640\) bairros, não mais inventado:

Comparando com a Aula 2

Aula 2 (mesmos 6 bairros, \(\mathbf{w}\) inventado): erros grandes, sem padrão. Agora, com \(\hat{\mathbf{w}}\) ajustado: ainda há erro (esperado, \(R^2\approx 0{,}518\)), mas a tendência geral já aparece.

Diferença entre “um \(\mathbf{w}\) qualquer” e “o \(\hat{\mathbf{w}}\) das Equações Normais”: o segundo não é perfeito, mas é matematicamente o melhor possível dentro do que os 4 atributos permitem.

Pergunta

Eliminação de Gauss em \(X^TX\hat{\mathbf{w}}=X^T\mathbf{y}\) daria o mesmo resultado que lstsq?

Dica: o que muda entre lstsq e eliminação de Gauss é o algoritmo, não a equação resolvida.

  • □ Eliminação de Gauss no mesmo sistema \(X^TX\hat{\mathbf{w}}=X^T\mathbf{y}\) daria, a menos de arredondamento, o mesmo vetor de lstsq.
  • □ Produto interno do resíduo com cada coluna exatamente zero seria coincidência numérica desta amostra, não consequência da teoria.
  • □ Em outro domínio, com outras escalas, a mesma verificação de ortogonalidade continuaria válida como teste de correção.
  • □ Resíduo ortogonal a cada coluna \(\Rightarrow\) \(R^2\) próximo de \(1\).

Resposta

Comparando algoritmos e o que a ortogonalidade garante — Resposta

  • ✔ Mesma equação, algoritmos diferentes (inversão, eliminação, decomposição) — todos resolvem o mesmo sistema linear, mesmo resultado a menos de arredondamento.
  • ✗ É consequência necessária de \(X^T(\mathbf{y}-X\hat{\mathbf{w}})=\mathbf{0}\) (Passo i), não coincidência — vale para qualquer amostra em que \(\hat{\mathbf{w}}\) resolva as Equações Normais.
  • ✔ A verificação é uma identidade algébrica geral (Passo i), independente de domínio ou escala dos atributos.
  • ✗ Vimos \(R^2\approx 0{,}518\) com resíduo ortogonal — ortogonalidade fixa a direção do erro, não seu tamanho; um ajuste ruim pode ter resíduo perfeitamente ortogonal.

Voltando à pergunta: sim — qualquer método correto que resolva \(X^TX\hat{\mathbf{w}}=X^T\mathbf{y}\) chega ao mesmo \(\hat{\mathbf{w}}\); a diferença entre métodos é robustez numérica, não o resultado matemático em si (tema que volta na Aula 4).

Quando a Fórmula Falha, ou Fica Frágil

Reconectando com a Aula 2: Posto Completo

Passo (ii): \(X^TX\) invertível \(\iff\) colunas de \(X\) linearmente independentes \(\iff\) \(\text{rk}(X)=d\) (Aula 2, Bloco 5).

Não é hipótese técnica qualquer: é o que separa “\(\hat{\mathbf{w}}\) tem fórmula fechada” de “\(\hat{\mathbf{w}}\) não é nem único”. Dois jeitos de falhar — um exato, um só frágil — reaproveitando os exemplos da Aula 2.

Caso 1: Multicolinearidade Exata

Aula 2: quinta coluna \(2\times\)AveRooms — posto não sobe de 4 para 5. Repetindo, olhando para \(X^TX\):

X_com_duplicata = np.column_stack([X_completo, 2.0 * X_completo[:, 2]])
print("posto de X:              ", np.linalg.matrix_rank(X_completo))
print("posto de X com duplicata:", np.linalg.matrix_rank(X_com_duplicata))

XtX_dup = X_com_duplicata.T @ X_com_duplicata
print("det(X^T X com duplicata):", np.linalg.det(XtX_dup))
try:
    np.linalg.inv(XtX_dup)
except np.linalg.LinAlgError as erro:
    print("np.linalg.inv falha:", erro)
posto de X:               4
posto de X com duplicata: 4
det(X^T X com duplicata): 0.0
np.linalg.inv falha: Singular matrix

Distinção Crucial

\(\det(X^TX)=0\): np.linalg.inv recusa (“Singular matrix”) — sem fórmula fechada para \(\hat{\mathbf{w}}\).

Mas: a projeção \(\hat{\mathbf{y}}\) continua bem definida — \(\text{col}(X)\) não mudou (coluna redundante não traz direção nova). O que se perde é como distribuir o crédito entre AveRooms e sua cópia: infinitos \(\hat{\mathbf{w}}\) dão o mesmo \(\hat{\mathbf{y}}\).

A sombra é única; a “receita” para chegar nela, não.

Caso 2: Quase-Multicolinearidade

Multicolinearidade exata é rara em dados reais. Mais comum (Aula 2): AveRooms/AveBedrms, correlação \(0{,}865\) — posto completo, fórmula existe, mas numericamente frágil.

Reaproveitando a amostra de 20 bairros e a perturbação de 1% da Aula 2, agora olhando o número de condição de \(X^TX\):

_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()

cond_quase_dep = np.linalg.cond(X_quase_dep.T @ X_quase_dep)
cond_bem_cond = np.linalg.cond(X_bem_cond.T @ X_bem_cond)

print(f"número de condição de X^TX (AveRooms, AveBedrms):  {cond_quase_dep:,.1f}")
print(f"número de condição de X^TX (MedInc, HouseAge):     {cond_bem_cond:,.1f}")
print(f"\nnúmero de condição de X^TX completo (4 atributos): {np.linalg.cond(XtX):,.1f}")
número de condição de X^TX (AveRooms, AveBedrms):  419.8
número de condição de X^TX (MedInc, HouseAge):     169.1

número de condição de X^TX completo (4 atributos): 23,460.5

Do Número de Condição à Instabilidade

Número de condição alto é uma promessa de instabilidade. Para ver a instabilidade em si, repita o experimento de perturbação da Aula 2:

y_amostra_20 = _amostra_20["MedHouseVal"].to_numpy()

w_orig_qd, *_ = np.linalg.lstsq(X_quase_dep, y_amostra_20, rcond=None)
rng_ruido = np.random.default_rng(1)
y_perturbado = y_amostra_20 + rng_ruido.normal(scale=0.01 * y_amostra_20.std(), size=y_amostra_20.shape)
w_pert_qd, *_ = np.linalg.lstsq(X_quase_dep, y_perturbado, rcond=None)

w_orig_bc, *_ = np.linalg.lstsq(X_bem_cond, y_amostra_20, rcond=None)
w_pert_bc, *_ = np.linalg.lstsq(X_bem_cond, y_perturbado, rcond=None)

print("Par quase-dependente (AveRooms, AveBedrms):")
print(f"  variação relativa em w[AveRooms]  = {abs(w_pert_qd[0]-w_orig_qd[0])/abs(w_orig_qd[0]):.1%}")
print(f"  variação relativa em w[AveBedrms] = {abs(w_pert_qd[1]-w_orig_qd[1])/abs(w_orig_qd[1]):.1%}")
print("\nPar bem-condicionado (MedInc, HouseAge):")
print(f"  variação relativa em w[MedInc]    = {abs(w_pert_bc[0]-w_orig_bc[0])/abs(w_orig_bc[0]):.1%}")
print(f"  variação relativa em w[HouseAge]  = {abs(w_pert_bc[1]-w_orig_bc[1])/abs(w_orig_bc[1]):.1%}")
Par quase-dependente (AveRooms, AveBedrms):
  variação relativa em w[AveRooms]  = 0.5%
  variação relativa em w[AveBedrms] = 29.5%

Par bem-condicionado (MedInc, HouseAge):
  variação relativa em w[MedInc]    = 0.1%
  variação relativa em w[HouseAge]  = 0.1%

O Que os Números Confirmam

Número de condição: \(\approx 420\) (quase-dependente) vs. \(\approx 169\) (bem-condicionado) — mais que o dobro. Sinal numérico de fragilidade.

Repetindo a perturbação de 1% em MedHouseVal (código acima): peso de AveBedrms muda \(\approx 29{,}5\%\) no par quase-dependente, contra \(\approx 0{,}1\%\) no bem-condicionado — quase 300× mais sensível, mesmo resultado da Aula 2, agora como consequência visível do número de condição alto.

\(X^TX\) completo (4 atributos): número de condição \(\approx 23\,460\) — ainda maior, combinando a redundância AveRooms/AveBedrms com a escala de todos os atributos.

A Mesma Distinção do Caso 1, Mais Sutil

A projeção \(\hat{\mathbf{y}}\) (previsão) muda pouco com a perturbação — é a decomposição de \(\hat{\mathbf{w}}\) entre colunas quase-redundantes que oscila.

Medir essa sensibilidade com precisão — o número de condição, via autovalores de \(X^TX\) — é o que abre a Aula 4.

Mesma causa raiz (colunas redundantes), gravidade diferente. Em ambos: a projeção \(\hat{\mathbf{y}}\) nunca é o problema — o problema mora em como \(\hat{\mathbf{w}}\) tenta descrevê-la.

Pergunta

\(X^TX\) mal-condicionada torna \(\hat{\mathbf{y}}\) proporcionalmente instável também?

Dica: os números do Caso 2 mostraram a instabilidade em \(\hat{\mathbf{w}}\) vs. em \(\hat{\mathbf{y}}\) — mesmo tamanho?

  • □ Coluna duplicada como combinação de duas colunas originais (não um múltiplo de uma só): posto de \(X\) ainda cairia igual.
  • □ Correlação AveRooms/AveBedrms exatamente \(1\): \(X^TX\) deixaria de ser invertível, fórmula fechada indefinida.
  • □ Crédito com “renda mensal”/“renda anual÷12” (quase redundantes por arredondamento): mesmo sintoma de instabilidade, sem duplicata exata.
  • \(X^TX\) mal-condicionada \(\Rightarrow\) \(\hat{\mathbf{y}}\) também proporcionalmente instável.

Resposta

Mal-condicionamento e o que permanece estável — Resposta

  • ✔ Qualquer coluna que seja combinação linear exata das demais não acrescenta direção nova ao espaço gerado — o posto cai da mesma forma, com múltiplo único ou combinação.
  • ✔ Correlação \(1\) = dependência linear exata \(\Rightarrow\) \(X^TX\) singular, mesma consequência do Caso 1.
  • ✔ Mesma mecânica de quase-dependência, outro domínio (crédito em vez de imóveis).
  • ✗ É o oposto do que os números mostraram: a projeção \(\hat{\mathbf{y}}\) (o ponto mais próximo de \(\mathbf{y}\) em \(\text{col}(X)\)) é geometricamente determinada e muda pouco; é a decomposição em \(\hat{\mathbf{w}}\) entre colunas quase-redundantes que oscila descontroladamente.

Voltando à pergunta: não — é exatamente o padrão “sombra estável, receita instável” do Caso 1, só que aqui sem quebra total de posto, apenas fragilidade numérica.

Fechamento e Ponte para a Aula 4

Retomando as Perguntas de Abertura

1. “Melhor aproximação” = \(\hat{\mathbf{y}}\in\text{col}(X)\) que minimiza \(\|\mathbf{y}-\hat{\mathbf{y}}\|\) — equivalente a resíduo ortogonal ao subespaço.

2. Projetar = encontrar esse \(\hat{\mathbf{y}}\) — a sombra perpendicular, formalizada no Teorema da Projeção.

3. Fórmula: Equações Normais \(X^TX\hat{\mathbf{w}}=X^T\mathbf{y}\); sob posto completo, \(\hat{\mathbf{w}}=(X^TX)^{-1}X^T\mathbf{y}\) — verificado com dados reais.

4. Falha: multicolinearidade exata quebra invertibilidade (\(\hat{\mathbf{w}}\) não-único); quase-exata deixa \(X^TX\) mal-condicionada (\(\hat{\mathbf{w}}\) instável).

Ponte para a Aula 4

Fórmula fechada = mais simples de descrever, não mais estável de calcular quando \(X^TX\) é mal-condicionada.

Aqui, número de condição foi medido empiricamente (perturbar e ver o efeito). Aula 4: ferramenta exata via autovalores/autovetores de \(X^TX\) — sem precisar perturbar nada.

Motiva, mais adiante, métodos mais estáveis que inverter \(X^TX\) diretamente: decomposição \(QR\) e \(SVD\).