X_train.shape
(19628, 11)
Na parte prática da avaliação, você vai trabalhar com um projeto de uma aplicação com redes neurais para a área de veículos autônomos. O objetivo é obter um modelo para a estimação da direção e da velocidade adequadas à partir de dados de sensores do veículo.
Os dados para treinamento e teste do modelo estão disponíveis no formato CSV, em um arquivo zip disponível neste link.
Após extrair os arquivos, utilize a biblioteca Pandas para carregar os DataFrames
X_train
, y_train
, X_test
e y_test
, como mostrado a seguir:
import pandas as pd
X_train = pd.read_csv('X_train.csv')
y_train = pd.read_csv('y_train.csv')
X_test = pd.read_csv('X_test.csv')
y_test = pd.read_csv('y_test.csv')
Considere que os DataFrames
X_train
e y_train
se referem aos dados de entrada e saída para treinamento e X_test
e y_test
se referem aos dados para validação.
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | -0.990604 | 0.029382 | 0.016550 | 0.132531 | 0.040647 | 0.053851 | 9.4 | 1.7 | 10.565004 | 2.466 | 742.599976 |
1 | -0.993563 | 0.024949 | 0.060397 | 0.092524 | 0.125051 | 0.038410 | 9.8 | 2.1 | 10.545004 | 2.416 | 742.599976 |
2 | -0.942432 | -0.064063 | 0.026580 | 0.327124 | 0.008266 | -0.138583 | 13.6 | 1.5 | 13.300000 | 1.916 | 744.600000 |
3 | -0.945413 | -0.047786 | 0.015528 | 0.321976 | -0.001418 | -0.100524 | 2.6 | 1.0 | 15.500000 | 2.233 | 753.800000 |
4 | 0.536310 | 0.101252 | -0.015450 | 0.837782 | 0.187972 | -0.082812 | 45.0 | 1.5 | 5.850351 | 2.743 | 745.200012 |
0 | 1 | |
---|---|---|
0 | 6.495223 | 161.987152 |
1 | 7.063543 | 172.884491 |
2 | 4.123023 | 137.942886 |
3 | 13.437319 | 144.001404 |
4 | 4.264773 | 243.034912 |
Como mostrado, os dados consistem de 19628 exemplos para treinamento e 4907 para validação, cada um contendo 11 características de entrada, representadas pelas colunas de 0 a 10 dos DataFrames
X_train
e X_test
e duas saídas representadas pelas colunas 0 e 1 dos DataFrames
y_train
e y_test
.
Os dados de entrada são provenientes de diversos sensores que medem informações relativas à posição e ao movimento do veículo, mas não estão identificados em detalhes. Já os dados de saída correspondem aos valores crus fornecidos por sensores de direção e velocidade do veículo, que devem ser estimados pelo modelo.
O objetivo do projeto é obter um modelo baseado em uma rede neural, que receba o vetor com o conjunto de características da entrada e forneça uma estimativa para a direção e velocidade do veículo.
Para fins de avaliação do desempenho do seu modelo, você pode utilizar a métrica \(R^2\), que fornece uma indicação da qualidade ou ajuste de um conjunto de valores de saída previstos aos valores desejados. Essa métrica é calculada como
\[\begin{equation*} \fbox{$\displaystyle R^2=1-\displaystyle\frac{\displaystyle\sum_{n=1}^{N_{\text{teste}}}(d_n-y_n)^2}{\displaystyle\sum_{n=1}^{N_{\text{teste}}}(\overline{d}-d_n)^2}, $} \end{equation*}\]
em que
\[ \overline{d}=\frac{1}{N_{\text{teste}}}\sum_{n=1}^{N_{\text{teste}}}d_n \]
é a média dos valores desejados do conjunto de teste. Note que o denominador da fração que aparece na definição de \(R^2\) é proporcional à variância dos dados de teste. No melhor caso, os valores preditos são exatamente iguais aos valores desejados, o que leva a \(R^2=1\). Caso o modelo leve a \(y_n=\overline{d}\), \(n=1, 2, \cdots, N_{\text{teste}}\), que é conhecido como modelo base, teremos \(R^2=0\). Modelos cujas predições são piores que as do modelo base podem levar a \(R^2\) negativo. Uma implementação dessa medida pode ser encontrada na biblioteca scikit-learn.
Projete o modelo, considerando as arquiteturas e as técnicas que foram vistas no curso e realize o treinamento utilizando os dados de X_train
e y_train
. Em seguida, teste o modelo fazendo inferência para os dados de X_test
e y_test
.
Leve em conta que o treinamento pode sofrer overfitting e use os mecanismos vistos no curso para evitá-lo. Para monitorar o overfitting, utilize os dados de teste para fazer validação e observe as curvas de aprendizagem para os dados de treinamento e validação. Procure salvar o modelo treinado ao final de cada época, de forma que seja possível carregar o melhor modelo com base na escolha da melhor condição de acordo com as curvas de aprendizagem de treinamento e validação.
Outra forma de se obter melhorias nos resultados do modelo é por meio da exploração do conjunto de dados de treinamento. Busque selecionar as variáveis de entrada mais relevantes e fazer transformações que possam levar a resultados melhores como, por exemplo, a normalização dos dados. É importante lembrar que qualquer transformação feita do banco de dados de treinamento deve ser repetida, de forma idêntica, no banco de dados de teste. Outra transformação comum é o uso da análise de componentes principais (PCA - principal component analysis), para redução de dimensionalidade da entrada. Também é possível desconsiderar algum dado de treinamento que possa estar levando o modelo para uma condição ruim. No entanto, vale notar que a avaliação com os dados de teste deve levar em conta todos os elementos do banco, sem exceção.
Para implementação do modelo e treinamento da rede neural, a sugestão é que seja utilizado um framework de redes neurais, como o PyTorch, conforme exemplo mostrado no material de apoio. No entanto, isso não é obrigatório, podendo ser utilizada outra solução ou mesmo outra linguagem de programação, caso desejado.
No final do exercício, você deve apresentar:
No PyTorch, para salvar os pesos de um modelo representado pelo objeto model
no arquivo model01.pt
, pode-se usar a linha:
E, depois, para carregar os pesos do modelo, pode ser usada a linha:
O exercício deve ser feito individualmente;
A entrega deve incluir:
Sobre o vídeo:
Sobre os códigos-fonte:
Sobre o envio no Moodle: