A regressão linear é um método de predição com mais de 200 anos de idade. A regressão linear simples é um ótimo primeiro algoritmo de aprendizado de máquina para implementar, pois requer que você avalie as propriedades do seu conjunto de dados de treinamento, mas é simples o suficiente para que os iniciantes entendam.
Neste tutorial, você descobrirá como implementar o algoritmo de regressão linear simples a partir do zero em Python.
Depois de completar este tutorial, você saberá:
Neste tutorial, usaremos o Dataset Swedish Auto Insurance. Este conjunto de dados envolve a previsão de pagamentos de reclamações totais. Faça o download do conjunto de dados e guarde-o no seu diretório de trabalho atual com o nome do arquivo insurance.csv.
Nota: talvez seja necessário converter a vírgula européia (,) para o ponto decimal (.). Você também precisará alterar o arquivo de variáveis separadas em espaço branco para formato CSV.
A regressão linear assume uma relação linear ou linha reta entre as variáveis de entrada (X) e a variável de saída única (y). Mais especificamente, essa saída (y) pode ser calculada a partir de uma combinação linear das variáveis de entrada (X). Quando existe uma única variável de entrada, o método é referido como uma regressão linear simples.
Em regressão linear simples, podemos usar estatísticas sobre os dados de treinamento para estimar os coeficientes exigidos pelo modelo para fazer previsões em novos dados. A linha reta para um modelo de regressão linear simples pode ser escrita como:
Onde b0 e b1 são os coeficientes que devemos estimar a partir dos dados de treinamento. Uma vez que os coeficientes são conhecidos, podemos usar esta equação para estimar os valores de saída para y dado novos exemplos de entrada de x. Exige que você calcule propriedades estatísticas dos dados, como média, variância e covariância.
Toda a álgebra foi dada e ficamos apenas com alguma aritmética para implementar a estimativa dos coeficientes de regressão linear simples. Resumidamente, podemos estimar os coeficientes da seguinte forma:
Onde o i se refere ao valor do i-ésimo valor da entrada x ou saída y. Não se preocupe se isso não estiver claro agora, estas são as funções que implementaremos no tutorial.
Este tutorial é dividido em cinco partes:
Essas etapas lhe darão a base que você precisa para implementar e treinar modelos simples de regressão linear para seus próprios problemas de previsão.
O primeiro passo é estimar a média e a variância das variáveis de entrada e saída dos dados de treinamento. A média de uma lista de números pode ser calculada como:
Abaixo está uma função chamada mean () que implementa esse comportamento para uma lista de números.
In [2]:
# Calculate the mean value of a list of numbers
def mean(values):
return sum(values) / float(len(values))
The variance is the sum squared difference for each value from the mean value. Variance for a list of numbers can be calculated as:
Abaixo está uma função chamada variance () que calcula a variância de uma lista de números. Isto exige que a média da lista seja fornecida como um argumento, apenas não precisamos calcular mais de uma vez.
In [3]:
# Calculate the variance of a list of numbers
def variance(values, mean):
return sum([(x-mean)**2 for x in values])
In [6]:
## COLOQUE SEU CODIGO AQUI
x=[1,2,4,3,5]
y=[1,3,3,2,5]
print('Média de valores de x = {} | Variancia dos valores de x = {}'.format(mean(x),variance(x,mean(x))))
print('----------------------')
print('Média de valores de y = {} | Variancia dos valores de y = {}'.format(mean(y),variance(y,mean(y))))
In [49]:
## FAÇA O PLOT DOS DADOS AQUI
%matplotlib inline
import matplotlib.pyplot as plt
A covariância de dois grupos de números descreve como esses números mudam juntos. A co-variância é uma generalização da correlação. A correlação descreve a relação entre dois grupos de números, enquanto a covariância pode descrever a relação entre dois ou mais grupos de números. Além disso, a covariância pode ser normalizada para produzir um valor de correlação. No entanto, podemos calcular a covariância entre duas variáveis da seguinte forma:
Abaixo está uma função chamada covariance() que implementa esta estatística. Esta função baseia-se no passo anterior e leva as listas de valores x e y, bem como a média desses valores como argumentos.
In [7]:
# Calculate covariance between x and y
def covariance(x, mean_x, y, mean_y):
covar = 0.0
for i in range(len(x)):
covar += (x[i] - mean_x) * (y[i] - mean_y)
return covar
In [8]:
## COLOQUE SEU CODIGO AQUI
print(covariance(x,mean(x),y,mean(y)))
Agora, devemos estimar os valores dos dois coeficientes em regressão linear simples. O primeiro é B1 que pode ser estimado como:
Podemos simplificar esta fórmula usando as funcões covariance e variance apresentadas acima, conforme a fórmula abaixo.
Em seguida, precisamos estimar um valor para B0, também chamado de interceptação, pois controla o ponto inicial da linha onde ele intersecta o eixo y.
Mais uma vez, sabemos como estimar B1 e temos uma função para estimar a média (). Podemos juntar tudo isso em uma função denominada coefficients () que leva o conjunto de dados como um argumento e retorna os coeficientes.
In [5]:
# Calculate coefficients
def coefficients(dataset):
x = [row[0] for row in dataset]
y = [row[1] for row in dataset]
x_mean, y_mean = mean(x), mean(y)
b1 = covariance(x, x_mean, y, y_mean) / variance(x, x_mean)
b0 = y_mean - b1 * x_mean
return [b0, b1]
In [6]:
## COLOQUE SEU CODIGO AQUI
O modelo de regressão linear simples é uma linha definida pelos coeficientes estimados a partir dos dados de treinamento. Uma vez que os coeficientes são estimados, podemos usá-los para fazer previsões. A equação para fazer previsões com um modelo de regressão linear simples é a seguinte:
Abaixo é apresentada a função chamada simple_linear_regression () que implementa a equação de predição para fazer previsões em um conjunto de dados de teste. Também une a estimativa dos coeficientes nos dados de treinamento das etapas acima. Os coeficientes preparados a partir dos dados de treinamento são usados para fazer previsões nos dados do teste, que são retornados.
In [7]:
def simple_linear_regression(train, test):
predictions = list()
b0, b1 = coefficients(train)
for row in test:
ypred = b0 + b1 * row[0]
predictions.append(ypred)
return predictions
Para avaliar o modelo adicionaremos uma função para gerenciar a avaliação das previsões denominadas evaluate_algorithm () e outra função para estimar o erro quadrático médio da raiz das previsões denominadas métrica rmse_metric (). Veja as funções abaixo:
In [8]:
from math import sqrt
# Calculate root mean squared error
def rmse_metric(actual, predicted):
sum_error = 0.0
for i in range(len(actual)):
prediction_error = predicted[i] - actual[i]
sum_error += (prediction_error ** 2)
mean_error = sum_error / float(len(actual))
return sqrt(mean_error)
# Evaluate regression algorithm on training dataset
def evaluate_algorithm(dataset, algorithm):
test_set = list()
for row in dataset:
row_copy = list(row)
row_copy[-1] = None
test_set.append(row_copy)
predicted = algorithm(dataset, test_set)
print(predicted)
actual = [row[-1] for row in dataset]
rmse = rmse_metric(actual, predicted)
return rmse
In [9]:
## COLOQUE SEU CODIGO AQUI
In [10]:
## COLOQUE SEU CODIGO AQUI