Regressão Linear com matrizes
Obtendo os mesmos resultados de um regressor de Machine Learning
A Regressão Linear é considerada como um dos algoritmos mais simples de Machine Learning (ML). Entretanto, não confunda simplicidade com ineficiência. Em problemas de regressão, busca-se prever valores numéricos e considerando aprendizagem supervisionada, onde tenho dados de entrada (X) e dados de saída (Y), algoritmos regressores aprendem qual os melhores pares de parâmetros/coeficientes que define uma reta de regressão. Com esta reta de regressão, dado um novo valor de entrada, conseguimos saber qual seu correspondente, logo a reta de regressão é o nosso modelo modelo preditivo.
Para alcançar seu objetivo, os motores de cálculo dos regressores em ML normalmente usam como função de custo a (i.) soma dos erros ao quadrado ou (ii.) a soma da difereção absoluta, logo encontram a melhor equação que minimiza os erros, a mínima diferença dos valores previsto com o que realmente foi observado. Exemplificando, Y = b0 +b1*X, onde Y é o resultado da relação de X com os parâmetros b0 e b1. Regressores de ML recebem os valores de X e Y, iterando sobre esses dados “aprendem” a relação matemática e identifica os melhores valores para “b0” e “b1”. Com a equação completa temos o modelo preditivo que é a nossa reta de regressão.
No entanto, quero mostrar uma outra forma em que podemos encontrar esses coeficientes (b0 e b1), usando apenas operações com matrizes. Já adianto, querido leitor, que usando apenas matrizes não chegamos na mesmas performances e otimização que os regressores de ML, apenas é uma outra forma de compreender o poder das relações entre matrizes.
Operações matriciais são muito usadas em Deep Learning, redes neurais artificiais profundas, em que o produto entre as matrizes de (i.) peso, (ii.) dados de entrada e (iii.) bias-linearidade, alimenta uma função de ativação que calcula uma probabilidade de sucesso em cada camada de “neurônio artificial”. Mas… o objetivo aqui não é deep learning, mas sim como operações com matrizes são poderosas.
No notebook disponível no meu repositório, temos o passo-a-passo de como se dão as operações matemáticas e as transformações necessárias, para encontrar os coeficientes que satisfazem a equação Y= b0 + b1*X, tanto de (i.) forma matricial, quanto o (ii.) uso da biblioteca Stats Models.
Na forma matricial, temos que converter nos dados de entrada X e os dados de saída Y em matrizes….até porque se queremos a multiplicação entre as matrizes… temos que ter as matrizes 😁😁🤣😁!! Dos vetores de dados que tínhamos, colocamos em uma matriz aumentada os valores de X e seu bias e em uma outra matriz, os valores de saída de Y.
Agora que temos a matriz de entrada X e a matriz de saída Y, atendendo as regras básicas e propriedades da multiplicação entre matrizes, encontramos as matrizes escalonadas.
E usando o cálculo de determinante matricial, dado pelo produto da matriz inversa e as matrizes escalondas, encontramos os coeficientes.
Usando o StatsModels, entregando a ele os dados no formato em que ele espera receber, treinamos o modelo com uma linha de comando:
regressor = smf.ols(formula = ‘Y ~ X’, data= df).fit()
print(regressor.summary())
Usando matrizes ou algoritmo de regressão linear, encontramos so mesmos coeficientes.
print('A função linear com matrizes é: Y^= {} +{}*X'.format(round(b0[0],2),round(b1[0],2)))
print('A função linear com algoritmo regressor é: Y^= {} + {}*X'.format(round(modelo.params['Intercept'],2), round(modelo.params['X'],2)))A função linear com matrizes é: Y^= -0.09 + 1.07*X
A função linear com algoritmo regressor é: Y^= -0.09 + 1.07*X
A diferença é a performance e otimização no cálculo. Com uso de matrizes os coeficientes são encontrados em 27 microssegundos, ao passo que com o algoritmo regressor 11 microssegundo.
E performance faz toda a diferença quando temos muitos registros e variáveis, não acha???
Caso queiram entrar em contato: https://linktr.ee/angelobuso