Path: blob/master/site/pt-br/r1/tutorials/keras/basic_regression.ipynb
25118 views
Copyright 2019 The TensorFlow Authors.
Regressão: preveja consumo de combustível
Note: A nossa comunidade TensorFlow traduziu estes documentos. Como as traduções da comunidade são o melhor esforço, não há garantias de que sejam uma reflexão exata e atualizada da documentação oficial em Inglês. Se tem alguma sugestão para melhorar esta tradução, por favor envie um pull request para o repositório do GitHub tensorflow/docs. Para se voluntariar para escrever ou rever as traduções da comunidade, contacte a lista [email protected].
Em um problema de regressão, o objetivo é prever as saídas (outputs) de um valor contínuo, como um preço ou probabilidade. Em contraste de problemas de classificação, onde temos o propósito de escolher uma classe em uma lista de classificações (por exemplo, se uma imagem contém uma maçã ou laranja, assim reconhecendo qual fruta é representada na imagem).
Este notebook usa a clássica base de dados Auto MPG e constrói um modelo para prever a economia de combustíveis de automóveis do final dos anos 1970, início dos anos 1980. Para isso, forneceremos um modelo com descrição de vários automóveis desse período. Essa descrição inclui atributos como: cilindros, deslocamento, potência do motor, e peso.
Este exemplo usa a API tf.keras
. Veja este guia para mais detalhes.
Base de dados Auto MPG
A base de dados está disponível em UCI Machine Learning Repository.
Pegando os dados
Primeiro baixe a base de dados dos automóveis.
Utilizando o pandas, impoorte os dados:
Limpe os dados
Esta base contém alguns valores não conhecidos (unknown).
Para manter esse tutorial básico, remova as linhas com esses valores não conhecidos.
A coluna "Origin" é uma coluna categórica e não numérica. Logo converta para one-hot :
Separando dados de treinamento e teste
Agora separe os dados em um conjunto de treinamento e outro teste.
Iremos utilizar o de conjunto de teste no final da análise do model.
Inspecione o dado
Dê uma rápida olhada em como está a distribuição de algumas colunas do conjunto de treinamento.
Repare na visão geral dos estatísticas:
Separe features de labels
Separe o valor alvo (labels), das features. Essa label é o valor no qual o modelo é treinado para prever.
Normalize os dados
Observe novamente o train_stats
acima e note quão diferente são os intervalos de uma feature e outra.
Uma boa prática é normalizar as features que usam diferentes escalas e intervalos. Apesar do modelo poder convergir sem a normalização, isso torna o treinamento mais difícil, e torna o resultado do modelo dependente da escolha das unidades da entrada.
Observação: embora geramos intencionalmente essas estatísticas para os dados de treinamento, essas estatísticas serão usadas também para normalizar o conjunto de teste. Precisamos delinear o conjunto de teste na mesma distribuição que o modelo foi treinado.
Esse dado normalizado é o que usaremos para treinar o modelo.
Atenção: As estatísticas usadas para normalizar as entradas aqui (média e desvio padrão) precisa ser aplicada em qualquer outro dado que alimenta o modelo, junto com o código one-hot que fizemos anteriormente. Isso inclui o conjunto de teste e os dados que o modelo usará em produção.
O Modelo
Construindo o modelo
Vamos construir o modelo. Aqui usaremos o modelo Sequential
com duas camadas densely connected, e a camada de saída que retorna um único valor contínuo. Os passos de construção do modelo são agrupados em uma função, build_model, já que criaremos um segundo modelo mais tarde.
Examine o modelo
Use o método .summary
para exibir uma descrição simples do modelo.
Agora teste o modelo. Pegue um batch de de 10 exemplos do conjunto de treinamento e chame model.predict
nestes.
Parece que está funcionando e ele produz o resultado de forma e tipo esperados.
Treinando o modelo
Treine o modelo com 1000 epochs, e grave a acurácia do treinamento e da validação em um objeto history
.
Visualize o progresso do modelo de treinamento usando o estados armazenados no objeto history
Este grafo mostra as pequenas melhoras, ou mesmo a diminuição do validation error
após 100 epochs. Vamos atualizar o model.fit
para que pare automatixamente o treinamento quando o validation score
não aumentar mais. Usaremos o EarlyStopping callback
que testa a condição do treinamento a cada epoch
. Se um grupo de epochs
decorre sem mostrar melhoras, o treinamento irá parar automaticamente.
Você pode aprender mais sobre este callback aqui
O gráfico mostra que no conjunto de validação, a média de erro é próximo de +/- 2MPG. Isso é bom? Deixaremos essa decisão a você.
Vamos ver quão bem o modelo generaliza usando o conjunto de teste, que não usamos para treinar o modelo. Isso diz quão bem podemos esperar que o modelo se saia quando usarmos na vida real.
Make predictions
Finalmente, prevejamos os valores MPG usando o conjunto de teste.
Parece que o nosso modelo prediz razoavelmente bem. Vamos dar uma olhada na distribuição dos erros.
Não é tão gaussiana, porém podemos esperar que por conta do número de exemplo é bem pequeno.
Conclusão
Este notebook introduz algumas técnicas para trabalhar com problema de regressão.
Mean Sqaured Error(MSE), é uma função comum de loss usada para problemas de regressão (diferentes funçẽso de loss são usadas para problemas de classificação).
Similarmente, as métricas de evolução usadas na regressão são diferentes da classificação. Uma métrica comum de regressão é Mean Absolute Error (MAE).
Quando o dado de entrada de features tem diferentes intervalos, cada feature deve ser escalada para o mesmo intervalo.
Se não possui muitos dados de treinamento, uma técnica é preferir uma pequena rede com poucas camadas para evitar overfitting.
Early stopping é uma boa técnica para evitar overfitting.