Tutorial Python

Python HOME Introdução ao Python Introdução ao Python Sintaxe do Python Comentários do Python Variáveis ​​Python Tipos de dados Python Números Python Conversão de Python Strings Python Booleanos Python Operadores Python Listas Python Tuplas Python Conjuntos Python Dicionários Python Python Se... Senão Python While Loops Python para loops Funções do Python Python Lambda Matrizes Python Classes/objetos Python Herança Python Iteradores Python Escopo do Python Módulos Python Datas em Python Matemática Python Python JSON Python RegEx Python PIP Python Tente...Exceto Entrada do usuário Python Formatação de String Python

Manipulação de arquivos

Manipulação de arquivos Python Arquivos de leitura do Python Python Gravar/Criar Arquivos Arquivos de exclusão do Python

Módulos Python

Tutorial NumPy Passo a passo do Panda Tutorial Scipy

Python Matplotlib

Introdução ao Matplotlib Introdução ao Matplotlib Matplotlib Pyplot Plotagem Matplotlib Marcadores Matplotlib Linha Matplotlib Etiquetas Matplotlib Grade Matplotlib Subtramas do Matplotlib Dispersão Matplotlib Barras Matplotlib Histogramas Matplotlib Gráficos de pizza Matplotlib

Aprendizado de máquina

Começando Modo Mediano Médio Desvio padrão Percentil Distribuição de dados Distribuição normal de dados Gráfico de dispersão Regressão linear Regressão Polinomial Regressão múltipla Régua Treinar/Teste Árvore de decisão

Python MySQL

Introdução ao MySQL MySQL Criar banco de dados MySQL Criar Tabela Inserir MySQL Seleção do MySQL MySQL Onde MySQL Ordenar por Excluir MySQL Tabela de descarte do MySQL Atualização do MySQL Limite do MySQL Associação do MySQL

Python MongoDB

Introdução ao MongoDB Banco de dados de criação do MongoDB Criar coleção do MongoDB Inserir MongoDB MongoDB Find Consulta do MongoDB Classificação do MongoDB Excluir MongoDB Coleção de Drops do MongoDB Atualização do MongoDB Limite do MongoDB

Referência Python

Visão geral do Python Funções incorporadas do Python Métodos de string do Python Métodos de lista do Python Métodos de dicionário Python Métodos de Tupla Python Métodos de conjunto do Python Métodos de arquivo Python Palavras-chave Python Exceções do Python Glossário Python

Referência do Módulo

Módulo Aleatório Módulo de solicitações Módulo de Estatísticas Módulo de matemática cMódulo de matemática

Python Como fazer

Remover duplicatas de lista Inverter uma string Adicionar dois números

Exemplos de Python

Exemplos de Python Compilador Python Exercícios de Python Teste do Python Certificado Python

Aprendizado de Máquina - Regressão Polinomial


Regressão Polinomial

Se seus pontos de dados claramente não se encaixam em uma regressão linear (uma linha reta passando por todos os pontos de dados), pode ser ideal para uma regressão polinomial.

A regressão polinomial, como a regressão linear, usa a relação entre as variáveis ​​x e y para encontrar a melhor maneira de traçar uma linha através dos pontos de dados.


Como funciona?

Python tem métodos para encontrar uma relação entre pontos de dados e desenhar uma linha de regressão polinomial. Mostraremos como usar esses métodos em vez de passar pela fórmula matemática.

No exemplo abaixo, registramos 18 carros que passavam por um determinado pedágio.

Registramos a velocidade do carro e a hora do dia (hora) em que ocorreu a ultrapassagem.

O eixo x representa as horas do dia e o eixo y representa a velocidade:

Exemplo

Comece desenhando um 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()

Resultado:

Exemplo

Importe numpye matplotlibdesenhe 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()

Resultado:

Exemplo explicado

Importe os módulos que você precisa.

Você pode aprender sobre o módulo NumPy em nosso Tutorial NumPy .

Você pode aprender sobre o módulo SciPy em nosso Tutorial SciPy .

import numpy
import matplotlib.pyplot as plt

Crie as matrizes que representam os valores dos eixos 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]

NumPy tem um método que nos permite fazer um modelo polinomial:

mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))

Em seguida, especifique como a linha será exibida, começamos na posição 1 e terminamos na posição 22:

myline = numpy.linspace(1, 22, 100)

Desenhe o gráfico de dispersão original:

plt.scatter(x, y)

Desenhe a linha de regressão polinomial:

plt.plot(myline, mymodel(myline))

Exiba o diagrama:

plt.show()



R-Quadrado

É importante saber quão bem é a relação entre os valores dos eixos x e y, se não houver relação, a regressão polinomial não pode ser usada para prever nada.

A relação é medida com um valor chamado r-quadrado.

O valor de r-quadrado varia de 0 a 1, onde 0 significa nenhum relacionamento e 1 significa 100% relacionado.

Python e o módulo Sklearn calcularão esse valor para você, tudo o que você precisa fazer é alimentá-lo com os arrays x e y:

Exemplo

Quão bem meus dados se encaixam em uma 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)))

Nota: O resultado 0,94 mostra que existe uma relação muito boa, e podemos usar regressão polinomial em previsões futuras.


Prever valores futuros

Agora podemos usar as informações que reunimos para prever valores futuros.

Exemplo: Vamos tentar prever a velocidade de um carro que passa no pedágio por volta das 17h:

Para isso, precisamos do mesmo mymodelarray do exemplo acima:

mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))

Exemplo

Preveja a velocidade de um carro 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)

O exemplo previu uma velocidade de 88,87, que também podemos ler no diagrama:


Ajuste ruim?

Vamos criar um exemplo onde a regressão polinomial não seria o melhor método para prever valores futuros.

Exemplo

Esses valores para os eixos x e y devem resultar em um ajuste muito ruim para a 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()

Resultado:

E o valor de r ao quadrado?

Exemplo

Você deve obter um valor de r-quadrado muito baixo.

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)))

O resultado: 0,00995 indica um relacionamento muito ruim e nos diz que esse conjunto de dados não é adequado para regressão polinomial.