Criando sua própria regressão linear

Gabriel Pires
5 min readJul 3, 2022

--

@gabs.dados

No último post introduzi a vocês o conceito por trás dos modelos de regressão linear e como ele funciona e implementamos o modelo através da biblioteca scikit-learn. Agora quero propor uma atividade bem interessante: vamos montar o nosso próprio modelo?

Photo by Kelly Sikkema on Unsplash

Mas não será apenas um modelo, vou criar com vocês dois modelos diferentes mas que geram o mesmo resultado. Eai, bora nessa?

1. Álgebra Linear, ela não é um monstro!

Como mencionei no primeiro post, não expliquei como chegamos na fórmula da equação normal, utilizada para determinar o melhor valor de theta, então vamos entender como é possível obtê-la, pois é através deste raciocínio que criaremos nosso Primeiro Modelo de Regressão Linear.

1.1 Entendendo o raciocínio

Vamos seguir com o preceito que queremos encontrar a melhor reta que representa nossos dados e essa reta é a mesma mencionada no último post.

Equação 1: Equação que representa uma reta.

Além disso, iremos representar essa equação na forma de matrizes uma vez que os cálculos a seguir serão feitos utilizando propriedades de matrizes.

Equação 2: Equação representa pela suas respectivas matrizes.

O nosso objetivo é encontra o melhor β para que y Xβ. Infelizmente não é possível encontra um valor β que possa representar 100% os valores reais. Sendo assim, sempre haverá um erro e esse erro pode ser calculado através da diferença entre os valores preditos, e os reais.

Equação 3: Equação para determinar os erros (OLS).

Essa é uma fórmula OLS com o termo de erro isolado.

Como estamos trabalhando com os erros quadráticos (Ordinary least squares) nas propriedades de matrizes quando multiplicamos um vetor pela sua transposta obtemos o resultado de potencias (nesse caso, ao quadrado).

Equação 4: Multiplicação com sua transposta.

Podemos representar o vetor transposta através da notação e’.

Agora podemos substituir a Equação 3 na Equação 4:

Equação 5: Substituindo a Equação 3 na Equação 4.

Resultamos então em uma expressão com muitas matrizes, e agora, o que fazer? Ainda precisamos encontrar o melhor valor de β, para isso precisamos encontrar aquele que minimiza nossos erros. Minimizar essa expressão pode ser o mesmo que sua derivada ser igual a zero. Vamos então derivar essa expressão:

Equação 6: Derivando a Equação 5.

Vamos então iguala-la a zero e obter nossa Equação Normal.

Acabou! Equação normal.

Ufa, que trabalho pra conseguir essa equação, né? Bom, agora só precisamos traduzir isso tudo para o python e xablau, está pronto nosso primeiro modelo.

1.2 Transcrevendo para python

Seguindo nossas premissas devemos então:

  • Adicionar uma coluna somente com um;
  • Realizar as contas demonstradas anteriormente.
Especificando as contas.

Implementando todo código:

O valor de R2 é:  0.75
O valor do MSE é: 1.14

O intercepto é: 3.99.
O coeficiente é: 3.12.
Gráfico para o modelo 01.

2. Coeficiente e intercepto, consigo calcular?

Nosso segundo modelo seguira as premissas da matemática básica, iremos tentar determinar valores para o coeficiente e o intercepto de nossa reta (Equação 1). Para isso, não utilizaremos matrizes, mas sim: variância e covariância.

2.1 Variância

A variância indica o quão distante os valores estão do valor médio, sendo classificado como um medida de dispersão. Quanto menor for o valor para a variância, mais próximos os valores estão da média, entretanto quanto maior ela for, mais distantes os valores estão da média.

Fórmula para o cálculo da variância

2.2 Covariância

A covariância é uma medida que consegue refletir a relação linear entre duas variáveis. Valores de covariância positivos indicam que valores acima da média de uma variável estão associados a valores médios acima da outra variável e abaixo dos valores médios são igualmente associado. Valores de covariância negativos indicam que valores acima da média de uma variável estão associados com valores médios abaixo da outra variável.

Fórmula para o cálculo da covariância.

2.3 Construindo o modelo

Vamos começar a preparar nossa regressão. Primeiro temos que calcular nossa variância e covariância e para isso iremos precisar da média de nossos dados.

Pronto, já definimos as funções responsáveis por este cálculo, como podemos utiliza-las agora? Podemos utiliza-las para calcular o coeficiente da reta e seu intercepto.

Agora que já definimos todas as funções que precisamos, podemos rodar um loop para fitar nossos dados de treino na função dos coeficientes e verificar os resultados obtidos quando usamos nossos dados de teste. Vamos então implementar o código.

O valor de R2 é:  0.71
O valor do MSE é: 0.93

O intercepto é: 3.99.
O coeficiente é: 3.12.
Gráfico para o modelo 02.

Comparem os resultados obtidos no dois modelos, próximos né?

Bom pessoal, tentei explicar duas maneiras de montar seu modelo do zero, assumindo as premissas matemáticas. No dia-a-dia não é necessário seguir essa abordagem, a scikit-learn já trás tudo que precisamos pronto mas é bom saber o que está acontecendo. EU particularmente só comecei a entender realmente os modelos dessa maneira, visualizando o que acontecia por trás do “fit()”.

No próximo post iremos entender o que ó famoso Gradiente Descendente.

--

--