Aprendizado de Máquina - Treinamento/Teste
- Página Anterior Zoom
- Próxima Página Árvore de Decisão
Avaliar o modelo
Na aprendizado de máquina, criamos modelos para prever resultados de某些 eventos, como no capítulo anterior, quando prevemos a emissão de dióxido de carbono de um carro ao saber o peso e a capacidade do motor.
Para medir se o modelo é suficientemente bom, podemos usar um método chamado treinamento/teste.
O que é treinamento/teste
Treinamento/teste é um método para medir a precisão do modelo.
Chama-se treinamento/teste porque dividimos o conjunto de dados em dois grupos: conjunto de treinamento e conjunto de teste.
80% para treinamento, 20% para teste.
Você pode usar o conjunto de treinamento para treinar o modelo.
Você pode usar o conjunto de teste para testar o modelo.
Treinar o modelo significa criar o modelo.
Testar o modelo significa testar a precisão do modelo.
Comece com o conjunto de dados.
Comece com o conjunto de dados a ser testado.
Nosso conjunto de dados mostra 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()
Resultados:
O eixo x representa o número de minutos antes da compra.
O eixo y representa a quantidade gasta na compra.

Dividir treinamento/teste
O conjunto de treinamento deve ser uma escolha aleatória de 80% dos dados originais.
O conjunto de teste deve ser 20% dos restantes.
train_x = x[:80] train_y = y[:80] test_x = x[80:] test_y = y[80:]
Exibir o conjunto de treinamento
Exibir o gráfico de dispersão igual ao conjunto de treinamento:
Exemplo
plt.scatter(train_x, train_y) plt.show()
Resultados:
Ele parece o conjunto de dados original, então parece ser uma escolha razoável:

Exibir o conjunto de teste
Para garantir que o conjunto de teste não seja completamente diferente, também vamos olhar para o conjunto de teste.
Exemplo
plt.scatter(test_x, test_y) plt.show()
Resultados:
O conjunto de teste também parece o conjunto de dados original:

Ajustar o conjunto de dados
Como é o conjunto de dados? Acho que a melhor adaptação é a 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 módulo matplotlib plott()
Método:
Exemplo
Desenhar a linha de regressão polinomial que passa pelos 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()
Resultados:

Este resultado pode apoiar nossa sugestão de ajuste polinomial ao conjunto de dados, mesmo que tentarmos prever valores fora do conjunto de dados, possamos obter alguns resultados estranhos. Por exemplo: esta linha indica que um cliente passou 6 minutos comprando na loja, completando uma compra de 200. Isso pode ser um sinal de sobreajuste.
Mas o que é o score de R-squared? O R-squared score indica bem o grau de ajuste do meu conjunto de dados ao modelo.
R2
Lembras da R2, também conhecida como R quadrado (R-squared)?
que mede a relação entre o eixo x e o eixo y, com valores entre 0 e 1, onde 0 representa a ausência de relação e 1 representa uma relação completa.
O módulo sklearn tem um nome rs_score()
da seguinte maneira, que nos ajudará a encontrar essa relação.
Aqui, vamos medir a relação entre o tempo que os clientes passam na loja e o quanto eles gastam.
Exemplo
Como é a aderência de nossos dados de treinamento no 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)
Notas:O resultado 0.799 mostra uma boa relação.
Introdução do conjunto de teste
Agora, pelo menos em termos de dados de treinamento, já temos um modelo bastante bom.
Então, usaremos dados de teste para testar o modelo, para verificar se ele gera resultados idênticos.
Exemplo
Vamos determinar a fração R2 ao usar os 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)
Notas:O resultado 0,809 indica que o modelo também é adequado para o conjunto de teste, e estamos confiantes de que podemos usar o modelo para prever valores futuros.
Valor de Previsão
Agora que já confirmamos que nosso modelo é bom, podemos começar a prever novos valores.
Exemplo
Se o cliente que comprou ficou 5 minutos na loja, quanto ele/gente vai gastar?
print(mymodel(5))
Este exemplo prevê que o cliente gastou 22,88 dólares, o que parece correspondente ao gráfico:

- Página Anterior Zoom
- Próxima Página Árvore de Decisão