O método dos mínimos quadrados e a pseudo-inversa de uma matriz.

Introdução

O método dos mínimos quadrados é uma técnica matemática usada para ajustar um modelo a um conjunto de dados. O ajuste dos parâmetros é realizado através da minimização do quadrado dos resíduos. Os resíduos de um modelo de regressão são as diferenças entre os valores observados e os valores obtidos do modelo.

Este método é amplamente utilizado em regressão linear, alguns tipos de regressões não-lineares e até mesmo para realizar classificações. O modelo básico utilizado no método é linear e utilizado principalmente para realizar regressões. Entretanto, há formas simples de modificar os dados de entrada para realizar regressões não lineares(alguns tipos) e classificações.

Modelo básico

Abaixo segue o modelo básico de um sistema linear utilizado no método dos mínimos quadrados:

\[ [Y]_{m \times 1} = [ X ]_{m \times n} [ \theta ]_{n \times 1} \qquad Eq.1 \]

As matrizes $[Y]$ ,$[X]$ e $[\theta]$ são, respectivamente, os dados de saída do modelo, os dados de entrada no modelo e os parâmetros do modelo. O índice $m$ indica o número de amostras utilizadas e o índice $n$ indica o número de parâmetros do modelo.

O método dos mínimos quadrados consiste, basicamente, em realizar a minimização da soma dos erros ao quadrado. O erro do modelo é a diferença entre a saída do modelo e a saída desejada/medida/observada dos dados de treinamento. A equação do somatório dos erros ao quadrado nós chamamos de função de custo, normalmente representada pela letra L. A expressão matricial para essa função fica sendo:

\[ L(\theta) = ([Y]-[X][\theta])^T ([Y]-[X][\theta]) \qquad Eq.2 \]

A equação 2 pode ser desenvolvida normalmente como em uma equação algébrica em $\mathbb{R}$. Entretanto, é preciso tomar o cuidado de não inverter os termos multiplicados, pois a multiplicação de matrizes não é comutativa. O desenvolvimento pode ser feito da seguinte forma:

\[ L(\theta) = ([Y]^T-([X][\theta])^T) ([Y]-[X][\theta]) \qquad Eq.3 \]
\[ L(\theta) = [Y]^T [Y] – [Y]^T [X][\theta] -([X][\theta])^T [Y]+ ([X][\theta])^T [X][\theta] \qquad Eq.4 \]
\[ L(\theta) = [Y]^T [Y] – [Y]^T [X][\theta] -([X][\theta])^T [Y] + [\theta]^T [X]^T [X][\theta] \qquad Eq.5 \]

O segundo e terceiro termo são o produto interno entre os vetores $[Y]$ e $[X][\theta]$. Neste caso, independentemente da ordem da transposição resultam em um mesmo número. Ou seja, os resultados das expressões $[Y]^T [X][\theta]$ e $([X][\theta])^T [Y]$ é o mesmo. E por esse motivo podemos escolher qualquer uma das duas expressões, multiplicar por 2 e substituir na equação 5. Fazendo isso teremos:

\[ L(\theta) = [Y]^T [Y] – 2 [Y]^T [X][\theta] + [\theta]^T [X]^T [X][\theta] \qquad Eq.6 \]

A equação 6 é uma equação quadrática em $\mathbb{R}^n$ e só tem um único minimo. Assim, para minimizarmos a função $L(\theta)$ basta fazermos a diferenciação em relação a $\theta$ e igualarmos a expressão a zero. Não é uma diferenciação “standard”, porque $\theta$ é um vetor. Contudo, o procedimento utilizando calculo vetorial é bem semelhante ao que faríamos em uma função em $\mathbb{R}$. O desenvolvimento segue abaixo:

\[ \dfrac{ \partial L(\theta)}{\partial \theta} = 0 \qquad Eq.7 \]
\[ \dfrac{ \partial L(\theta)}{\partial \theta} = \dfrac{ \partial [Y]^T [Y]}{\partial \theta} – 2 \dfrac{ \partial [Y]^T [X][\theta] }{\partial \theta} + \dfrac{ \partial [\theta]^T [X]^T [X][\theta] }{\partial \theta} = 0 \qquad Eq.8 \]

Analisando a equação 8, é possível perceber que o primeiro termo não depende de $\theta$. Ou seja, sua derivada deve ser zero. O segundo termo é uma derivada vetorial padrão do tipo $\dfrac { \partial y x }{\partial x}= y^T$. E o último termo é a derivada de uma função quadrática $\dfrac { \partial x^T \Sigma x }{\partial x}= 2 \Sigma x $ . Realizando todas as devidas substituições na equação 8, o resultado é o seguinte:

\[ – 2 [X]^T [Y] + 2 [X]^T [X][\theta] = 0 \]
\[ [X]^T [X][\theta] = [X]^T [Y] \]
\[ [\theta] = ([X]^T [X])^{-1}[X]^T [Y] \qquad Eq.9 \]
\[ [\theta] = [W] [Y] \iff [W] = ([X]^T [X])^{-1}[X]^T \qquad Eq.10 \]

Note que através da equação 9, das entradas ($[X]$) e saídas ($[Y]$) de um determinado sistema é possível determinar os melhores parâmetros($[\theta]$) para um modelo linear.

A matriz $[W]$ é denominada pseudo-inversa da matriz $[X]$. Isso porque $[W]$ existe mesmo nos casos onde $[X]$ não fosse quadrada ou tivesse linhas linearmente dependentes. $[W]$ só não existe se $[X]$ tiver colunas iguais. Entretanto, isso não chega a ser um problema. $[X]$ ter colunas iguais significaria haver parâmetros repetidos no modelo linear e isso não faz nenhum sentido.

A equação 9 é a solução para os parâmetros do sistema linear da equação 1. É importante notar que se o sistema modelado tem um “offset” ou “bias” ele deixa de ser linear. Entretanto, é possível fazer uma transformação da entrada para que um sistema deste tipo “volte” a ser linear. Por exemplo:

\[ y_i=a x_i + b \qquad Eq. 11\]

A equação 11, é uma função afim, mas não é linear se $b \neq 0$ . Funções lineares necessariamente precisam passar pela origem do sistema de coordenadas quando a entrada $x_i$ for nula ou zero. A forma de “contornar” esse problema é aumentar a dimensão do sistema. No caso sair de $\mathbb{R}$ para $\mathbb{R}^2$ . A mesma equação 11 poderia ser reescrita em um sistema em $\mathbb{R}^2$ da seguinte forma:

\[ [y_i] = \begin{bmatrix} 1 & x_i \end{bmatrix} \begin{bmatrix} b \\ a \end{bmatrix} \qquad Eq.12\]

No caso da equação 12, a entrada do modelo seria $[X]_i=\begin{bmatrix} 1 & x_i \end{bmatrix}$ e os parâmetros $[\theta] = \begin{bmatrix} b \\ a \end{bmatrix}$. Ou seja, com as modificações realizadas, o sistema fica com a “forma” de um sistema linear, como o da equação 1. Frequentemente sistemas que não são lineares em uma determinada dimensão podem se tornar “lineares” quando reescritos em espaços de dimensão mais alta.

Codificação

Ok, teoria apresentada. Como fica na prática o método dos mínimos quadrados? Abaixo segue um pequeno exemplo de um fit linear utilizando esse método e escrito em Scilab script.

Scilab
// drgomes.pro
//Exemplo método dos minimos quadrados
//modelo -> função afim
// y=a*x+b
//ou
//Reescrita na forma de um sistema linear
//[y]=[1 x][b
//          a]

//Saída da função afim
Y=[3.2044185;3.2585637;4.2562085;5.7410359;
   7.3501626;9.0478272;7.6781993]

//Entrada da função afim
x=[1;2;3;4;5;6;7]

//Reescrita da entrada para compatibilizar com um sistema linear
X=[ones(7,1),x]

//Encontra os parâmetros do sistema
theta=inv(X'*X)*X'*Y

//Entrada para o modelo ajustado
xx=[0:0.1:8]'

//Número de amostras da entrada
m=size(xx,'r')

//Reescrita da entrada para compatibilizar com um sistema linear
XX=[ones(m,1),xx]

//Calculo da saída do modelo com os parâmetros theta
yy=XX*theta

//Plota os dados de treinamento
plot(x',y','o')

//Plota a saída do modelo para a entrada xx
plot(xx',yy','r-')
xlabel("Entrada")
ylabel("Saída")

Resultados

O resultado da execução deste código é o seguinte gráfico:

As “bolinhas” azuis são os dados observados de entrada(x) e saída(y) de um determinado sistema. A linha vermelha é a saída (yy) do modelo ajustado para uma entrada (xx) no intervalo de 0 a 8 com passos de 0.1.

Em breve vou postar mais exemplos de como utilizar o método dos mínimos quadrados para resolver outros problemas mais complexos.


Comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *