3.3.1 Aproximação de Funções — Regressões — Regressão Linear
1. Introdução
Quando um erro substancial estiver associado aos dados, a interpolação polinomial é inapropriada e pode produzir resultados insatisfatórios. Isso ocorre porque pontos obtidos por um experimento geralmente exibem variações significativas entre as amostragens. A estratégia mais precisa para aproximar um conjunto de pontos consiste em determinar uma função de aproximação que
ajuste a forma geral dos dados, sem necessariamente passar por todos pontos individualmente. As figuras abaixo mostram esta diferença.
Pelos gráficos, notamos que uma reta é a função que melhor caracteriza a sequência de dados e não passa nenhum ponto. A técnica para tal ajuste consiste na utilização de regressão linear. Embora este exemplo seja uma distribuição simples, métodos de regressão são geralmente ótimos para aproximações de valores à um modelo funcional. Neste e nos demais posts, apresentamos casos e técnicas de regressão, derivadas da regressão por mínimos quadrados.
2. Regressão Linear
A forma mais simples de aproximação por mínimos quadrados é o ajuste de uma reta na forma
$$y = \alpha_0 + \alpha_1 x + \epsilon $$
a um conjunto de pontos amostrados . Onde é o coeficiente linear, é o coeficiente angular da reta e é o resíduo (erro de aproximação) entre o modelo e a amostra, que pode ser isolado da equação acima, tendo representação
$$\epsilon = y – \alpha_0 – \alpha_1 x $$
Assim, o erro de aproximação deve ser minimizado, a fim de que possamos ajustar os parâmetros e de forma que o modelo corresponda mais fielmente ao fenômeno observado.
3. Critério de Ajuste
Para ajustarmos a reta que melhor aproximasse a todos os pontos, poderíamos utilizar como critério de erro a diferença absoluta entre o modelo e o valor amostrado. A estratégia de solução do ajuste consistiria em minimizar a soma dos erros residuais individuais, isto é
$$ \sum_{i=1}^{n} | \epsilon_i | = \sum_{i=1}^{n} \left| y_i – \alpha_0 – \alpha_1 x_i \right| $$
onde é o número total de pontos. Contudo, este critério é inadequado.
Como podemos ver, este problema consiste na minimização do erro . Portanto, uma estratégia consistiria em utilizar o critério minimax. A ideia aqui é escolher a reta que minimize a distancia máxima que um ponto individual tenha da reta. Contudo, essa técnica possui um problema quando o conjunto de pontos amostrados possui um valor muito discrepante dos demais, ou seja, quando há uma grande variância no erro dos pontos. Geralmente, critério minimax é utilizado para reduzir uma função adequada à uma simples.
A abordagem que contorna todas as deficiências acima consiste na minimização da soma dos quadrados dos resíduos entre o medido e o calculado a partir do modelo linear. Ou Seja,
$$S_r = \sum_{i=1}^{n} \epsilon_i^2 = \sum_{i=1}^{n} \left( y_{i,amostrado} – y_{i,modelo} \right)^2 = \sum_{i=1}^{n} \left( y_i – \alpha_0 -\alpha_1 x_i \right)^2 $$
A utilização desse critério possui a vantagem fornecer uma única reta para um dado conjunto de dados.
4. Ajuste dos Parâmetros por Mínimos Quadrados
Para determinar os valores de e , derivamos a última equação acima por cada coeficiente. Isto é
$$\frac{\partial S_r}{\partial \alpha_0} = -2 \sum_{i=1}^{n} (y_i – \alpha_0 – \alpha_1 x_i) $$
e
$$\frac{\partial S_r}{\partial \alpha_1} = -2 \sum_{i=1}^{n} (y_i – \alpha_0 – \alpha_1 x_i) x_i $$
</p>
Como queremos minimizar ao máximo o erro, tomamos como a soma da derivada de como sendo zero. Isto é
$$\frac{\partial S_r}{\partial \alpha_0} = \sum_{i=1}^{n} \frac{\partial e_i^2}{\partial \alpha_0} = 0 $$
Portanto, igualando as derivadas a zero, obtemos mínimo. Assim, as equações podem ser expressas como
$$0 = \sum_{i=1}^{n} y_i – \sum_{i=1}^{n} \alpha_0 – \sum_{i=1}^{n} \alpha_1 x_i $$
e
$$0 = \sum_{i=1}^{n} y_i x_i – \sum_{i=1}^{n} \alpha_0 x_i – \sum_{i=1}^{n} \alpha_1 x_i^2 $$
Agora, tomando
$$\sum_{i=1}^{n} \alpha_0 = n \alpha_0 $$
podemos expressar essas equações como um conjunto de duas equações lineares simultâneas em termos das variáveis e : </p>
$$n \alpha_0 + \left( \sum_{i=1}^{n} x_i \right) \alpha_1 = \sum_{i=1}^{n} y_i $$
e
$$\left( \sum_{i=1}^{n} x_i \right) \alpha_0 + \left( x_i^2 \right) \alpha_1 = \sum_{i=1}^{n} x_i y_i $$
Dessas equações, podemos isolar e :
$$\alpha_1 = \dfrac{n \sum_{i=1}^{n} x_i y_i – \sum_{i=1}^{n} x_i \sum_{i=1}^{n} y_i}{n \sum_{i=1}^{n} x_i^2 – (\sum_{i=1}^{n} x_i)^2} $$
e
$$\alpha_0 = \dfrac{\sum_{i=1}^{n} y_i}{n} – \alpha_1 \dfrac{\sum_{i=1}^{n} x_i}{n} $$
</p>
5. Implementação
def linear_regression(points):
"""
Return a LINEAR FUNCTION with parameters adjusted by linear regression
f = linear_regression(points)
INPUT:
* points: list of tuples of sampled points (x_i, y_i)
return: a linear function f(x) = a_0 + a_1 * x
Author: Pedro Garcia [sawp@sawp.com.br]
see: http://www.sawp.com.br
License: Creative Commons
http://creativecommons.org/licenses/by-nc-nd/2.5/br/
Jul 2011
"""
n = len(points)
(sx, sy, sxy, sxx) = (0, 0, 0, 0)
for (xi, yi) in points:
sx += xi
sy += yi
sxy += xi * yi
sxx += xi * xi
(xm, ym) = (sx / n, sy / n)
a1 = (n * sxy - sx * sy) / (n * sxx - sx * sx)
a0 = ym - a1 * xm
fun = lambda t: a0 + a1 * t
return fun
Esta função está disponível em http://www.sawp.com.br/code/regression/linear_regression.py assim como um exemplo de como utilizá-la.
6. Copyright
Este documento é disponível sob a licença Creative Commons. As regras dos direitos de cópia deste conteúdo estão acessíveis em http://creativecommons.org/licenses/by-nc-nd/2.5/br/.