data_train.shape
(800, 14)
Na parte prática da avaliação, você vai trabalhar com um projeto de uma aplicação com redes neurais para a área de saúde. O objetivo é obter um modelo de predição de uma doença cardíaca baseado em dados com características extraídas de exames clínicos laboratoriais.
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, utiliza a biblioteca Pandas para carregar os DataFrames
data_train
e data_test
, como mostrado a seguir:
import pandas as pd
data_train = pd.read_csv("data_train.csv").drop(columns=["Unnamed: 0"])
data_test = pd.read_csv("data_test.csv").drop(columns=["Unnamed: 0"])
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 52.0 | 1.0 | 0.0 | 125.0 | 212.0 | 0.0 | 1.0 | 168.0 | 0.0 | 1.0 | 2.0 | 2.0 | 3.0 | 0.0 |
1 | 53.0 | 1.0 | 0.0 | 140.0 | 203.0 | 1.0 | 0.0 | 155.0 | 1.0 | 3.1 | 0.0 | 0.0 | 3.0 | 0.0 |
2 | 70.0 | 1.0 | 0.0 | 145.0 | 174.0 | 0.0 | 1.0 | 125.0 | 1.0 | 2.6 | 0.0 | 0.0 | 3.0 | 0.0 |
3 | 61.0 | 1.0 | 0.0 | 148.0 | 203.0 | 0.0 | 1.0 | 161.0 | 0.0 | 0.0 | 2.0 | 1.0 | 3.0 | 0.0 |
4 | 62.0 | 0.0 | 0.0 | 138.0 | 294.0 | 1.0 | 1.0 | 106.0 | 0.0 | 1.9 | 1.0 | 3.0 | 2.0 | 0.0 |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 67.0 | 1.0 | 0.0 | 120.0 | 229.0 | 0.0 | 0.0 | 129.0 | 1.0 | 2.6 | 1.0 | 2.0 | 3.0 | 0.0 |
1 | 63.0 | 1.0 | 3.0 | 145.0 | 233.0 | 1.0 | 0.0 | 150.0 | 0.0 | 2.3 | 0.0 | 0.0 | 1.0 | 1.0 |
2 | 63.0 | 0.0 | 0.0 | 124.0 | 197.0 | 0.0 | 1.0 | 136.0 | 1.0 | 0.0 | 1.0 | 0.0 | 2.0 | 0.0 |
3 | 52.0 | 1.0 | 0.0 | 112.0 | 230.0 | 0.0 | 1.0 | 160.0 | 0.0 | 0.0 | 2.0 | 1.0 | 2.0 | 0.0 |
4 | 58.0 | 0.0 | 0.0 | 130.0 | 197.0 | 0.0 | 1.0 | 131.0 | 0.0 | 0.6 | 1.0 | 0.0 | 2.0 | 1.0 |
Como mostrado, os dados consistem de 800 exemplos de treinamento e 225 para teste, cada um contendo 13 características de entrada, representadas pelas colunas de 0 a 12 e a saída desejada binária, indicando se o paciente é portador ou não da doença, representada pela coluna 13.
Em um projeto na área de ciência de dados, é essencial a exploração e tratamento dos dados para filtrar dados inadequados, preencher dados faltantes, aplicar esquemas de normalização ou selecionar colunas mais adequadas com base em análise quantitativa ou alguma informação prévia relativa à interpretação dos dados no contexto em questão. No entanto, neste projeto, o foco será a exploração do modelo, dado o conjunto de dados já processado. Por isso, não são fornecidos detalhes sobre o significado de cada uma das colunas da entrada. Se desejar, você pode trabalhar na exploração dos dados para melhorar o desempenho do modelo mas essa atividade não será levada em conta na avaliação.
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 a classificação binária indicando se o paciente é portador ou não da doença.
Para fins de avaliação do desempenho do seu modelo, você deve compará-lo com o resultado obtido com o modelo de regressão logística, que pode ser interpretado como um modelo constituído por único neurônio, alimentado por todas as entradas, com a função de ativação sigmoidal, o que faz com que sua saída esteja no intervalo de 0 a 1.
Projete o modelo, considerando as arquiteturas e as técnicas que foram vistas no curso e realize o treinamento utilizando os dados de data_train
. Em seguida, teste o modelo fazendo inferência para os dados de data_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.
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:
Caso utilize o PyTorch, seguem algumas observações e dicas:
BCEWithLogitsLoss
em vez da BCELoss
pois ela é numericamente mais estável e provavelmente vai proporcionar resultados melhores. Note que a BCEWithLogitsLoss
espera receber logits, que não são normalizados e podem valer de \(-\infty\) a \(\infty\). Ou seja, ao usar a BCEWithLogitsLoss
, a função de ativação do neurônio de saída deve ser linear;model
no arquivo model01.pt
, pode-se usar 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: