Regressão linear no aprendizado de máquina Python

Nosso objetivo educacional hoje é expandir nosso conhecimento sobre a regressão linear Python Ml  com exemplos.

O que é regressão?

Quando você procura uma relação entre variáveis, usa o termo regressão.

Essa relação é usada em Machine Learning e em modelagem estatística para prever acontecimentos futuros.



Regressão linear em Python

Um algoritmo de regressão linear é um algoritmo de aprendizado de máquina baseado em aprendizado supervisionado – o programa realiza uma análise de regressão.

Um modelo de regressão prevê um valor alvo com base em variáveis ​​independentes . A previsão é determinada principalmente por como as variáveis ​​se relacionam umas com as outras.

As variáveis ​​dependentes e independentes são consideradas de forma diferente em diferentes modelos de regressão, assim como o número de variáveis ​​independentes.

Muitos nomes podem se referir à variável dependente de uma regressão.

As variáveis ​​podem ser chamadas de variáveis ​​de resultado, variáveis ​​de critério, variáveis ​​endógenas ou regressões.

As variáveis ​​exógenas podem ser regressoras, variáveis ​​preditoras ou variáveis ​​preditoras.

O processo de regressão linear desenha uma linha reta através de todos os pontos de dados com base em sua relação.

Os valores futuros podem ser previstos usando esta linha.

Regressão linear em Python

Um aspecto muito importante do Machine Learning é a capacidade de prever o futuro.


Como funciona a regressão linear?

A linguagem Python permite que os usuários encontrem relacionamentos entre pontos de dados e desenhem linhas de regressão linear . Deixe-nos mostrar como
É mais fácil usar esses métodos do que trabalhar com fórmulas matemáticas.

As empresas são representadas pelo eixo x e o desempenho é representado pelo eixo y no exemplo abaixo.

18 empresas foram cadastradas e tiveram seu desempenho avaliado ao passar por uma cabine de pedágio. Aqui está um teste de regressão linear que podemos fazer com os dados que coletamos:

Exemplo de imagem de regressão linear:

Exemplo de regressão linear

Desenhar um gráfico de dispersão é o primeiro passo:

Example

1
2
3
4
5
6
7
8
9
10
11
12
import sys
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
mrx = [1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35]
ample = [99,97,95,93,91,89,87,85,83,81,79,77,75,73,71,69,67,65]
plt.scatter(mrx, ample)
plt.show()
plt.savefig("myimg.jpg")
sys.stdout.flush()
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Você pode importar o Scipy e desenhar uma linha de regressão linear da seguinte maneira:

Example

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import sys
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
from scipy import stats
varmrx = [1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35]
ample = [99,97,95,93,91,89,87,85,83,81,79,77,75,73,71,69,67,65]
slope, intercept, r, p, std_err = stats.linregress(varmrx, ample)
def pymlfunc(varmrx):
return slope * varmrx + intercept
firms = list(map(pymlfunc, varmrx))
plt.scatter(varmrx, ample)
plt.plot(varmrx, firms)
plt.show()
plt.savefig("myimg.jpg")
sys.stdout.flush()
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Resultado:

Imagem de Exemplo de Regressão Linear 2

Explicação do exemplo

Você será solicitado a importar os módulos necessários.

Os módulos Matplotlib e SciPy são abordados em nossas postagens Matplotlib e SciPy .

import matplotlib.pyplot as plt
from scipy
import stats

 

Os valores dos eixos x e y devem ser representados por matrizes – usamos mrx como x e amplo para o eixo y da seguinte forma:

mrx = [1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35]
ample = [99,97,95,93,91,89,87,85,83,81,79,77,75,73,71,69,67,65]

Execute um método de regressão linear que retorne alguns valores-chave significativos:

slope, intercept, r,
p, std_err = stats.linregress(mrx, ample)

Faça uma função que retorne um novo valor baseado em inclinação e interceptação .

Um novo valor representa a localização do valor x correspondente no eixo y :

def pymlfunc(mrx):
return slope * mrx + intercept

A função deve ser executada para cada valor na matriz mrx. Como resultado, uma nova matriz será criada com novos valores para o eixo y:

firms = list(map(pymlfunc, mrx))

Crie o gráfico de dispersão original desenhando o seguinte:

plt.scatter(mrx, ample)

Usando a equação de regressão linear, desenhe uma linha:

plt.plot(mrx, firms)

Por fim, exiba o diagrama da seguinte maneira:

plt.show()

R – Relacionamento

A regressão linear não pode ser usada para prever nada se não houver relação entre os valores do eixo x e os valores do eixo y .

Coeficientes de correlação, como r , são usados ​​para medir essa relação.

Um valor r de -1 a 1 indica que não há relação, enquanto 1 (ou -1) indica 100% de relação.

Você só precisa fornecer ao Python e ao módulo Scipy o mrx e amplos valores de variáveis ​​para calcular esse valor.

Meu modelo de regressão linear se ajusta bem aos meus dados?

Example

1
2
3
4
5
6
7
from scipy import stats
mrx = [1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35]
ample = [99,97,95,93,91,89,87,85,83,81,79,77,75,73,71,69,67,65]
slope, intercept, r, p, std_err = stats.linregress(mrx, ample)
print(r)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

O resultado -1,0 indica que existe uma relação de 100% e indica que a regressão linear pode ser usada no futuro para fazer previsões.


prever o futuro

Nossos dados coletados agora podem ser examinados para prever valores futuros.

Considere uma empresa de 20 anos e tente prever seu desempenho.

Usando a função pymlfunc() do exemplo anterior, podemos conseguir isso:

def pymlfunc(mrx):
return slope * mrx + intercept

Uma empresa com 20 anos terá o seguinte desempenho:

Example

1
2
3
4
5
6
7
8
9
10
from scipy import stats
mrx = [1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35]
ample = [99,97,95,93,91,89,87,85,83,81,79,77,75,73,71,69,67,65]
slope, intercept, r, p, std_err = stats.linregress(mrx, ample)
def pymlfunc(mrx):
return slope * mrx + intercept
performance = pymlfunc(20)
print(performance)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Como podemos ver no diagrama, o exemplo previu um desempenho de 80:

Imagem de Exemplo de Regressão Linear 3

 

O desempenho de uma empresa com cinco anos é agora previsto:

 

Uma empresa com apenas 5 anos terá o seguinte desempenho:

Example

1
2
3
4
5
6
7
8
9
10
from scipy import stats
mrx = [1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35]
ample = [99,97,95,93,91,89,87,85,83,81,79,77,75,73,71,69,67,65]
slope, intercept, r, p, std_err = stats.linregress(mrx, ample)
def pymlfunc(mrx):
return slope * mrx + intercept
performance = pymlfunc(5)
print(performance)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Este exemplo previu um desempenho de 95%, como pode ser visto no diagrama abaixo:

Imagem de Exemplo de Regressão Linear 4

Com base em nossa previsão , descobrimos que as novas empresas cresceram muito mais rápido do que as antigas.


Ajuste ruim?

Aqui está um exemplo em que a regressão linear pode não ser a melhor forma de previsão quando se trata de prever valores futuros.

A regressão linear deve ser muito mal ajustada com esses valores para os eixos x e y:

Example

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import sys
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
from scipy import stats
mrx = [105,33,36,46,85,10,66,34,38,20,26,29,48,64,6,5,36,66,72,30]
ample = [11,36,3,25,57,85,53,72,58,10,26,34,90,33,38,20,56,2,57,5]
slope, intercept, r, p, std_err = stats.linregress(mrx, ample)
def pymlfunc(mrx):
return slope * mrx + intercept
firms = list(map(pymlfunc, mrx))
plt.scatter(mrx, ample)
plt.plot(mrx, firms)
plt.show()
plt.savefig("myimg.jpg")
sys.stdout.flush()
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Resultado:

Exemplo de má previsão de regressão linear
Que tal o r para relacionamento?

Um valor de r extremamente baixo deve ser obtido.

Example

1
2
3
4
5
6
7
8
import numpy
from scipy import stats
mrx = [105,33,36,46,85,10,66,34,38,20,26,29,48,64,6,5,36,66,72,30]
ample = [11,36,3,25,57,85,53,72,58,10,26,34,90,33,38,20,56,2,57,5]
slope, intercept, r, p, std_err = stats.linregress(mrx, ample)
print(r)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

De acordo com os resultados, 0,0364 representa uma relação muito ruim entre as duas variáveis ​​e nos mostra que o conjunto de dados pode não ser adequado para a regressão linear usando este método.

 

 

Nós valorizamos o seu feedback.
+1
0
+1
0
+1
0
+1
0
+1
0
+1
0
+1
0

Assine a nossa newsletter
Digite seu e-mail para receber um resumo semanal de nossos melhores posts. Saber mais!
ícone