Saltar para o conteúdo
DataLeaf

Artigos

Mínimos quadrados, de três maneiras

As equações normais, a QR e a SVD resolvem o mesmo problema com exatidões muito diferentes. A diferença é o quadrado de um número de condição.

O problema linear de mínimos quadrados procura os coeficientes β^\hat\beta que minimizam ∥Xβ−y∥2\lVert X\beta - y \rVert_2 para uma matriz alta X∈ℝm×pX \in \mathbb{R}^{m \times p}. Anulando o gradiente obtêm-se as equações normais,

X⊤Xβ^=X⊤y, X^\top X \hat\beta = X^\top y,

e em NumPy ocupam uma linha:

python
beta = np.linalg.solve(X.T @ X, X.T @ y)

Essa linha é curta, rápida e a menos exata dos três métodos habituais. Esta nota mede quanta exatidão se perde, explica porquê e diz quando a perda não importa.

Uma experiência com resposta conhecida

#

O ajuste polinomial é a maneira clássica de tornar difícil um problema de mínimos quadrados. Em m=100m = 100 pontos igualmente espaçados ti∈[0,1]t_i \in [0, 1], as colunas 1,t,t2,…,tp−11, t, t^2, \dots, t^{p-1} da base monomial tornam-se cada vez mais parecidas à medida que pp cresce, e a matriz aproxima-se da deficiência de característica.

Para isolar o método de resolução, escolhi o segundo membro de forma que a solução exata seja conhecida: β=(1,…,1)\beta = (1, \dots, 1) e y=Xβy = X\beta, com resíduo nulo. Qualquer erro em β^\hat\beta vem então da aritmética de vírgula flutuante, e não dos dados.

python
import numpy as np

def errors(p, m=100):
    t = np.linspace(0.0, 1.0, m)
    X = np.vander(t, p, increasing=True)
    beta = np.ones(p)
    y = X @ beta
    rel = lambda b: np.linalg.norm(b - beta) / np.linalg.norm(beta)

    normal = np.linalg.solve(X.T @ X, X.T @ y)
    Q, R = np.linalg.qr(X)
    qr = np.linalg.solve(R, Q.T @ y)
    svd = np.linalg.lstsq(X, y, rcond=None)[0]
    return np.linalg.cond(X), rel(normal), rel(qr), rel(svd)

np.linalg.qr calcula uma fatorização de Householder, e np.linalg.lstsq usa o método do LAPACK baseado na SVD. Os erros relativos nos coeficientes:

Colunas ppNúmero de condição κ(X)\kappa(X)Equações normaisQRSVD
41,2×1021{,}2 \times 10^{2}9,4×10−139{,}4 \times 10^{-13}3,9×10−153{,}9 \times 10^{-15}2,0×10−152{,}0 \times 10^{-15}
63,7×1033{,}7 \times 10^{3}1,1×10−101{,}1 \times 10^{-10}8,8×10−148{,}8 \times 10^{-14}7,3×10−147{,}3 \times 10^{-14}
81,2×1051{,}2 \times 10^{5}7,5×10−87{,}5 \times 10^{-8}4,1×10−124{,}1 \times 10^{-12}3,7×10−123{,}7 \times 10^{-12}
103,7×1063{,}7 \times 10^{6}3,0×10−53{,}0 \times 10^{-5}1,8×10−101{,}8 \times 10^{-10}6,3×10−116{,}3 \times 10^{-11}
121,2×1081{,}2 \times 10^{8}1,9×10−11{,}9 \times 10^{-1}6,9×10−106{,}9 \times 10^{-10}5,3×10−95{,}3 \times 10^{-9}

Com doze colunas, as equações normais devolvem coeficientes errados no primeiro algarismo, enquanto a QR e a SVD ainda concordam com a solução exata em oito ou nove algarismos. Representando todos os pp de 2 a 14 em função do número de condição, surgem duas retas com declives diferentes.

Erro relativo dos três métodos em função do número de condição de X, em eixos logarítmicos. As equações normais seguem o quadrado do número de condição; a QR e a SVD seguem o próprio número de condição.
Figura 1. Erro relativo nos coeficientes em função do número de condição κ(X). As guias tracejadas mostram κu e κ²u, com u = 2⁻⁵³.

Porque é que as equações normais perdem o dobro dos algarismos

#

O número de condição κ2(A)=σmax⁡(A)/σmin⁡(A)\kappa_2(A) = \sigma_{\max}(A) / \sigma_{\min}(A) mede quanto uma matriz pode ampliar perturbações relativas. Formar X⊤XX^\top X eleva-o ao quadrado.

Teorema — Condicionamento das equações normais
Se XX tem característica completa por colunas e valores singulares σ1≥⋯≥σp>0\sigma_1 \ge \dots \ge \sigma_p > 0, então κ2(X⊤X)=κ2(X)2\kappa_2(X^\top X) = \kappa_2(X)^2.
Demonstração.
Escreva-se a decomposição em valores singulares reduzida X=UΣV⊤X = U \Sigma V^\top, em que UU tem colunas ortonormadas. Então X⊤X=VΣ2V⊤X^\top X = V \Sigma^2 V^\top, uma matriz simétrica definida positiva cujos valores próprios, e portanto os valores singulares, são σ12,…,σp2\sigma_1^2, \dots, \sigma_p^2. Logo κ2(X⊤X)=σ12/σp2=κ2(X)2\kappa_2(X^\top X) = \sigma_1^2 / \sigma_p^2 = \kappa_2(X)^2.
Fim da demonstração

Um método regressivamente estável para um sistema quadrado com matriz AA devolve uma solução com erro relativo da ordem de κ(A) u\kappa(A)\,u, em que u=2−53≈1,1×10−16u = 2^{-53} \approx 1{,}1 \times 10^{-16} é a unidade de arredondamento da precisão dupla. Resolver as equações normais é uma resolução desse tipo com A=X⊤XA = X^\top X. A QR de Householder e a SVD nunca formam esse produto: trabalham diretamente com XX e, num problema de resíduo pequeno, o seu erro é da ordem de κ(X) u\kappa(X)\,u.1

∥β^−β∥∥β∥≈{κ(X)2 uequac¸o˜es normais,κ(X) uQR e SVD, resıˊduo pequeno. \frac{\lVert \hat\beta - \beta \rVert}{\lVert \beta \rVert} \approx \begin{cases} \kappa(X)^2\, u & \text{equações normais,} \\ \kappa(X)\, u & \text{QR e SVD, resíduo pequeno.} \end{cases}

As estimativas são majorantes a menos de constantes modestas, e os erros medidos ficam sobre as guias tracejadas da figura ou abaixo delas. Cada fator de dez em κ(X)\kappa(X) custa à QR cerca de um algarismo decimal e às equações normais cerca de dois.

Quando o resíduo é grande, até o melhor algoritmo herda um termo proporcional a κ(X)2\kappa(X)^2 vezes o tamanho relativo do resíduo. Esse termo pertence ao problema, e não ao método, pelo que nenhuma escolha de algoritmo o elimina.2

Quando as equações normais servem

#

Nada disto torna as equações normais erradas. São a ferramenta certa mais vezes do que a tabela sugere.

  • A matriz está bem condicionada. Com κ(X)=100\kappa(X) = 100, as equações normais perdem cerca de quatro algarismos e ainda entregam doze. Preditores padronizados e pouco colineares estão muitas vezes nesta situação.
  • Os dados não cabem em memória. X⊤XX^\top X e X⊤yX^\top y acumulam-se numa só passagem pelas linhas, em espaço p×pp \times p, e resolvem-se no fim.
  • A velocidade importa mais do que os últimos algarismos. Para m≫pm \gg p, formar X⊤XX^\top X custa cerca de mp2m p^2 operações; a QR de Householder custa cerca de 2mp22 m p^2.

Mudar a base antes de mudar o método

#

A correção mais barata está muitas vezes no modelo e não no algoritmo. Os monómios tkt^k em [0,1][0, 1] são uma base notoriamente má. Levar os mesmos pontos para [−1,1][-1, 1] faz descer o número de condição da matriz de doze colunas de 1,2×1081{,}2 \times 10^{8} para 6,9×1036{,}9 \times 10^{3}, e uma base de Chebyshev em [−1,1][-1, 1] leva-o a 2,92{,}9. Nesse ponto, os três métodos concordam até ao último algarismo, e as equações normais são tão boas como qualquer outro.

A lição geral é que a exatidão se decide duas vezes: uma quando o problema é formulado, pelo número de condição, e outra quando é resolvido, consoante o algoritmo o eleve ou não ao quadrado.


  1. Lloyd N. Trefethen e David Bau III, Numerical Linear Algebra (SIAM, 1997), lições 18 e 19, analisam o condicionamento dos problemas de mínimos quadrados e a estabilidade destes três algoritmos. ↩︎

  2. Nicholas J. Higham, Accuracy and Stability of Numerical Algorithms, 2.ª edição (SIAM, 2002), capítulo 20, apresenta a teoria das perturbações, incluindo o termo do resíduo. ↩︎