Aprendizado de Máquina - Regressão Polinomial
- Página Anterior Regressão Linear
- Próxima Página Regressão Multivariada
Regressão Polinomial
Se os seus pontos de dados não se adequam claramente ao ajuste linear (reta que passa pelos pontos de dados), a regressão polinomial pode ser a escolha ideal.
Como a regressão linear, a regressão polinomial usa a relação entre as variáveis x e y para encontrar o melhor método para desenhar a linha dos pontos de dados.

Princípio de funcionamento
O Python tem algumas maneiras de encontrar a relação entre os pontos de dados e desenhar a linha de regressão polinomial. Vamos mostrar como usar esses métodos em vez de fórmulas matemáticas.
No exemplo a seguir, registramos 18 carros passando por um posto de pedágio específico.
Já registramos a velocidade do carro e o tempo de passagem (horas).
O eixo x representa as horas do dia, e o eixo y representa a velocidade:
Exemplo
Primeiro, desenhar o gráfico de dispersão:
import matplotlib.pyplot as plt x = [1, 2, 3, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 18, 19, 21, 22] y = [100, 90, 80, 60, 60, 55, 60, 65, 70, 70, 75, 76, 78, 79, 90, 99, 99, 100] plt.scatter(x, y) plt.show()
Resultados:

Exemplo
importar numpy
e matplotlib
Depois de isso, desenhar a linha de regressão polinomial:
import numpy import matplotlib.pyplot as plt x = [1, 2, 3, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 18, 19, 21, 22] y = [100, 90, 80, 60, 60, 55, 60, 65, 70, 70, 75, 76, 78, 79, 90, 99, 99, 100] mymodel = numpy.poly1d(numpy.polyfit(x, y, 3)) myline = numpy.linspace(1, 22, 100) plt.scatter(x, y) plt.plot(myline, mymodel(myline)) plt.show()
Resultados:

Explicação do exemplo
Importar módulos necessários:
import numpy import matplotlib.pyplot as plt
Criar arrays que representam os valores do eixo x e y:
x = [1, 2, 3, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 18, 19, 21, 22] y = [100, 90, 80, 60, 60, 55, 60, 65, 70, 70, 75, 76, 78, 79, 90, 99, 99, 100]
O NumPy tem um método que nos permite construir um modelo polinomial:
mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))
Então, especifique o modo de exibição das linhas, começando no ponto 1 e terminando no ponto 22:
myline = numpy.linspace(1, 22, 100)
Desenhar o gráfico de dispersão original:
plt.scatter(x, y)
Desenhar a linha de regressão polinomial:
plt.plot(myline, mymodel(myline))
Exibir gráfico:
plt.show()
R-Squared
É importante saber quão bem os valores do eixo x e y estão relacionados, pois se não houver relação, a regressão polinomial não pode ser usada para prever nada.
A relação é medida por um valor chamado coeficiente de determinação (R²).
O valor do coeficiente de determinação (R²) varia de 0 a 1, onde 0 representa não correlação e 1 representa 100% de correlação.
O módulo Sklearn e Python calcularão esse valor para você, o que você precisa fazer é inserir os arrays x e y:
Exemplo
Como minha dados se ajustam na regressão polinomial?
import numpy from sklearn.metrics import r2_score x = [1, 2, 3, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 18, 19, 21, 22] y = [100, 90, 80, 60, 60, 55, 60, 65, 70, 70, 75, 76, 78, 79, 90, 99, 99, 100] mymodel = numpy.poly1d(numpy.polyfit(x, y, 3)) print(r2_score(y, mymodel(x)))
Notas:O resultado 0,94 indica uma boa relação, que podemos usar na regressão polinomial para previsões futuras.
Prever valores futuros
Agora, podemos usar as informações coletadas para prever valores futuros.
Por exemplo: vamos tentar prever a velocidade do carro passando pelo posto de pedágio ao redor das 17h:
Para isso, precisamos do mesmo exemplo acima mymodel Array:
mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))
Exemplo
Prever a velocidade do veículo passando às 17h:
import numpy from sklearn.metrics import r2_score x = [1, 2, 3, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 18, 19, 21, 22] y = [100, 90, 80, 60, 60, 55, 60, 65, 70, 70, 75, 76, 78, 79, 90, 99, 99, 100] mymodel = numpy.poly1d(numpy.polyfit(x, y, 3)) speed = mymodel(17) print(speed)
A velocidade de previsão do exemplo é 88,87, e também podemos vê-lo na figura:

Fitting ruim?
Vamos criar um exemplo no qual a regressão polinomial não é o melhor método para prever valores futuros.
Exemplo
Esses valores no eixo x e y causarão uma adaptação muito ruim da regressão polinomial:
import numpy import matplotlib.pyplot as plt x = [89,43,36,36,95,10,66,34,38,20,26,29,48,64,6,5,36,66,72,40] y = [21,46,3,35,67,95,53,72,58,10,26,34,90,33,38,20,56,2,47,15] mymodel = numpy.poly1d(numpy.polyfit(x, y, 3)) myline = numpy.linspace(2, 95, 100) plt.scatter(x, y) plt.plot(myline, mymodel(myline)) plt.show()
Resultados:

O que é o valor de r-squared?
Exemplo
Você deve obter um valor muito baixo de r-squared.
import numpy from sklearn.metrics import r2_score x = [89,43,36,36,95,10,66,34,38,20,26,29,48,64,6,5,36,66,72,40] y = [21,46,3,35,67,95,53,72,58,10,26,34,90,33,38,20,56,2,47,15] mymodel = numpy.poly1d(numpy.polyfit(x, y, 3)) print(r2_score(y, mymodel(x)))
Resultados: 0,00995 indica uma relação muito fraca e nos diz que o conjunto de dados não é adequado para regressão polinomial.
- Página Anterior Regressão Linear
- Próxima Página Regressão Multivariada