Álgebra Linear e Otimização para Aprendizado de Máquina
2026-08-30
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.
“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.
“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ê?
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?
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 \(X\mathbf{w}=\mathbf{y}\) nunca é alcançado exatamente, existe sempre uma “melhor” aproximação? — Resposta
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.
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.
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.
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?
A “luz” da projeção — Resposta
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ç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.
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.
\(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.
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?
Subespaço trivial e seu complemento — Resposta
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.
Nota
Premissas
Objetivo: dessas premissas até uma fórmula fechada e calculável para \(\hat{\mathbf{w}}\), com \(\hat{\mathbf{y}}=X\hat{\mathbf{w}}\).
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\).
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.
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}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”?
A condição de ortogonalidade garante resíduo zero? — Resposta
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.
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 |
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.
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_hat (lstsq): [ 0.48761 0.01171 -0.18809 0.78255]
maior diferença absoluta: 1.3100631690576847e-14
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.
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:
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
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.
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
\(\|\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}\).
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:
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.
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.
lstsq.Comparando algoritmos e o que a ortogonalidade garante — Resposta
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).
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.
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
\(\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.
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
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%
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 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.
\(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?
Mal-condicionamento e o que permanece estável — Resposta
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.
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).
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\).
UNICAMP — Instituto de Computação