Criando sua própria regressão linear
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?
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.
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.
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.
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).
Podemos representar o vetor transposta através da notação e’.
Agora podemos substituir 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:
Vamos então iguala-la a zero e obter nossa 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.
Implementando todo código:
O valor de R2 é: 0.75
O valor do MSE é: 1.14
O intercepto é: 3.99.
O coeficiente é: 3.12.
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.
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.
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.
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.