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 - Treinar/Testar


Avalie seu modelo

Em Machine Learning criamos modelos para prever o resultado de determinados eventos, como no capítulo anterior onde previmos a emissão de CO2 de um carro quando sabíamos o peso e o tamanho do motor.

Para medir se o modelo é bom o suficiente, podemos usar um método chamado Train/Test.


O que é Treinar/Teste

Train/Test é um método para medir a precisão do seu modelo.

Ele é chamado de Treinar/Teste porque você divide o conjunto de dados em dois conjuntos: um conjunto de treinamento e um conjunto de teste.

80% para treinamento e 20% para teste.

Você treina o modelo usando o conjunto de treinamento.

Você testa o modelo usando o conjunto de testes.

Treinar o modelo significa criar o modelo.

Testar o modelo significa testar a precisão do modelo.


Comece com um conjunto de dados

Comece com um conjunto de dados que você deseja testar.

Nosso conjunto de dados ilustra 100 clientes em uma loja e seus hábitos de compra.

Exemplo

import numpy
import matplotlib.pyplot as plt
numpy.random.seed(2)

x = numpy.random.normal(3, 1, 100)
y = numpy.random.normal(150, 40, 100) / x

plt.scatter(x, y)
plt.show()

Resultado:

O eixo x representa o número de minutos antes de fazer uma compra.

O eixo y representa a quantidade de dinheiro gasto na compra.



Dividir em Trem/Teste

O conjunto de treinamento deve ser uma seleção aleatória de 80% dos dados originais.

O conjunto de teste deve ser os 20% restantes.

train_x = x[:80]
train_y = y[:80]

test_x = x[80:]
test_y = y[80:]


Exibir o conjunto de treinamento

Exiba o mesmo gráfico de dispersão com o conjunto de treinamento:

Exemplo

plt.scatter(train_x, train_y)
plt.show()

Resultado:

Parece o conjunto de dados original, então parece ser uma seleção justa:


Exibir o conjunto de testes

Para garantir que o conjunto de testes não seja completamente diferente, também daremos uma olhada no conjunto de testes.

Exemplo

plt.scatter(test_x, test_y)
plt.show()

Resultado:

O conjunto de teste também se parece com o conjunto de dados original:


Ajustar o conjunto de dados

Como é o conjunto de dados? Na minha opinião, acho que o melhor ajuste seria uma regressão polinomial , então vamos desenhar uma linha de regressão polinomial.

Para desenhar uma linha através dos pontos de dados, usamos o plot()método do módulo matplotlib:

Exemplo

Desenhe uma linha de regressão polinomial através dos pontos de dados:

import numpy
import matplotlib.pyplot as plt
numpy.random.seed(2)

x = numpy.random.normal(3, 1, 100)
y = numpy.random.normal(150, 40, 100) / x

train_x = x[:80]
train_y = y[:80]

test_x = x[80:]
test_y = y[80:]

mymodel = numpy.poly1d(numpy.polyfit(train_x, train_y, 4))

myline = numpy.linspace(0, 6, 100)

plt.scatter(train_x, train_y)
plt.plot(myline, mymodel(myline))
plt.show()

Resultado:

O resultado pode apoiar minha sugestão de que o conjunto de dados se encaixa em uma regressão polinomial, mesmo que isso nos dê alguns resultados estranhos se tentarmos prever valores fora do conjunto de dados. Exemplo: a linha indica que um cliente que passasse 6 minutos na loja faria uma compra no valor de 200. Isso provavelmente é um sinal de overfitting.

Mas e a pontuação R-quadrado? A pontuação R-quadrado é um bom indicador de quão bem meu conjunto de dados está se ajustando ao modelo.


R2

Lembre-se de R2, também conhecido como R-quadrado?

Ele mede a relação entre o eixo x e o eixo y, e o valor varia de 0 a 1, onde 0 significa nenhum relacionamento e 1 significa totalmente relacionado.

O módulo sklearn possui um método chamado r2_score() que nos ajudará a encontrar essa relação.

Neste caso, gostaríamos de medir a relação entre os minutos que um cliente permanece na loja e quanto dinheiro ele gasta.

Exemplo

Quão bem meus dados de treinamento se encaixam em uma regressão polinomial?

import numpy
from sklearn.metrics import r2_score
numpy.random.seed(2)

x = numpy.random.normal(3, 1, 100)
y = numpy.random.normal(150, 40, 100) / x

train_x = x[:80]
train_y = y[:80]

test_x = x[80:]
test_y = y[80:]

mymodel = numpy.poly1d(numpy.polyfit(train_x, train_y, 4))

r2 = r2_score(train_y, mymodel(train_x))

print(r2)

Nota: O resultado 0,799 mostra que existe uma relação OK.

Traga o conjunto de testes

Agora criamos um modelo que está OK, pelo menos quando se trata de dados de treinamento.

Agora queremos testar o modelo com os dados de teste também, para ver se nos dá o mesmo resultado.

Exemplo

Vamos encontrar a pontuação R2 ao usar dados de teste:

import numpy
from sklearn.metrics import r2_score
numpy.random.seed(2)

x = numpy.random.normal(3, 1, 100)
y = numpy.random.normal(150, 40, 100) / x

train_x = x[:80]
train_y = y[:80]

test_x = x[80:]
test_y = y[80:]

mymodel = numpy.poly1d(numpy.polyfit(train_x, train_y, 4))

r2 = r2_score(test_y, mymodel(test_x))

print(r2)

Nota: O resultado 0,809 mostra que o modelo também se ajusta ao conjunto de testes e estamos confiantes de que podemos usar o modelo para prever valores futuros.


Prever valores

Agora que estabelecemos que nosso modelo está OK, podemos começar a prever novos valores.

Exemplo

Quanto dinheiro um cliente comprador gastará se ficar na loja por 5 minutos?

print(mymodel(5))

O exemplo previu que o cliente gastaria 22,88 dólares, como parece corresponder ao diagrama: