Implementando em Python
Temos uma função do tipo y = a.x + b
e como vimos no artigo acima, podemos calcular os coeficientes a e b utilizando um pouco de matemática.
Eu utilizei a função mean
do módulo numpy
pois me poupou umas 3 linhas a cada vez que precisei calcular a média. Você pode importá-la da seguinte forma:
from numpy import mean
Conforme os dados fictícios do artigo acima.
x = [1, 2, 3, 4, 5]
y = [3, 7, 5, 11, 14]
Podemos em um primeiro momento nos preocupar com o cálculo do coeficiente a. A função descrita abaixo tem esse papel; calculando o somatório da diferença entre o xi e a média através de um laço for
.
def calculate_a(x, y):
x_mean = mean(x)
y_mean = mean(y)
numerador = denominador = 0
for xi, yi in zip(x, y):
numerador += (xi - x_mean) * (yi - y_mean)
for xi in x:
denominador += (xi - x_mean)**2
a = numerador / denominador
return a
De maneira similar, podemos calcular o b implementando a fórmula descrita no artigo acima.
def calculate_b(x, y):
x_mean = mean(x)
y_mean = mean(y)
a = calculate_a(x, y)
b = y_mean - a * x_mean
return b
A seguir, o código completo, com um input para um X qualquer e um print que escreve na tela a previsão conforme o ajuste linear.
# y = ax + b
from numpy import mean
def calculate_a(x, y):
x_mean = mean(x)
y_mean = mean(y)
numerador = denominador = 0
for xi, yi in zip(x, y):
numerador += (xi - x_mean) * (yi - y_mean)
for xi in x:
denominador += (xi - x_mean)**2
a = numerador / denominador
return a
def calculate_b(x, y):
x_mean = mean(x)
y_mean = mean(y)
a = calculate_a(x, y)
b = y_mean - a * x_mean
return b
x = [1, 2, 3, 4, 5]
y = [3, 7, 5, 11, 14]
a = calculate_a(x, y)
b = calculate_b(x, y)
X = float(input("Quantidade de veneno: "))
result = a * X + b
print(f'Essa quantidade matou {round(result)} bactérias.')
Considerações finais
Muito obrigado pelo conteúdo, Leodeymison. Mal posso esperar pelo próximo artigo sobre regressão linear múltipla.
Peço que você, leitor, implemente em uma liguagem diferente para que possamos ver como fica.