Detecção de Parkinson com Deep Learning e MLflow

Detecção de Parkinson com Deep Learning e MLflow

Conheça o projeto

Implemente, utilizando PyTorch ou Keras, um sistema de detecção de Parkinson utilizando Redes Neurais Profundas (Deep MLP) em Python. O sistema deve carregar os dados do Dataset Parkinson's (UCI), realizar pré-processamento e, obrigatoriamente, realizar experimentos variando a profundidade da rede (número de camadas ocultas). Todos os resultados e parâmetros dos experimentos devem ser registrados e comparados utilizando o MLflow.

Recursos

Materiais para você usar como base para o desenvolvimento

Instruções

Estrutura, regras e requisitos do projeto

Utilizar um modelo Multilayer Perceptron (MLP) profundo para realizar uma tarefa de classificação binária no Dataset Parkinson's (UCI) e instrumentar o código com MLflow.

Objetivo

Treinar diferentes arquiteturas de MLP (com pelo menos 2 camadas ocultas) para classificar se um paciente tem Parkinson (status = 1) ou é saudável (status = 0). O objetivo secundário, mas igualmente importante, é utilizar o MLflow para logar os hiperparâmetros (número de camadas, neurônios, learning rate) e as métricas de avaliação, permitindo a comparação entre uma rede rasa e redes mais profundas.

O Dataset Parkinson's (UCI)

Dataset clássico de aprendizado de máquina, ideal para introdução a tarefas de classificação e redes neurais.

  • Disponibilidade: O dataset pode ser acessado diretamente pelo link da UCI (link) ou através do arquivo CSV fornecido (parkinsons.data).

Atributos do Dataset

A tabela abaixo descreve as features (entradas) e a variável alvo (saída):

AtributoDescriçãoVariável
nameIdentificador ASCII do paciente (Deve ser removido)(Ignorar)
MDVP:Fo(Hz)Frequência vocal fundamental médiaEntrada
MDVP:Fhi(Hz)Frequência vocal fundamental máximaEntrada
MDVP:Flo(Hz)Frequência vocal fundamental mínimaEntrada
Jitter, RAP, PPQ, DDPVárias medidas de variação na frequênciaEntrada
Shimmer, APQ, DDAVárias medidas de variação na amplitudeEntrada
NHR, HNRMedidas da proporção de ruído para tomEntrada
RPDE, D2Medidas de complexidade dinâmica não linearEntrada
DFAAnálise de flutuação fractalEntrada
spread1, spread2, PPEMedidas de variação da frequência fundamentalEntrada
statusEstado de saúde (1 = Parkinson, 0 = saudável)Alvo (Saída)

Requisitos

  1. Configuração do Ambiente:
    • Instalar e configurar o MLflow.
    • Carregar os dados do arquivo (parkinsons.data ou parkinsons.csv).
  2. Pré-processamento:
    • Remover a coluna name.
    • Separar features (X) e variável alvo (y).
    • Obrigatório: Aplicar Padronização (StandardScaler) ou Normalização (MinMaxScaler) nos dados de entrada.
  3. Experimentação (Deep Learning):
    • Criar um loop de experimentos ou definir múltiplas execuções.
    • Testar arquiteturas com profundidade crescente (ex: iniciar com 2 camadas ocultas e testar com 3 ou 4).
    • Garantir que a rede tenha capacidade de aprender (uso de funções de ativação não-lineares como ReLU).
  4. Rastreamento com MLflow:
    • Para cada experimento, iniciar uma run no MLflow.
    • Registrar parâmetros: num_layers, neurons_per_layer, learning_rate, optimizer.
    • Registrar métricas: accuracy, precision, recall, f1_score e loss.
    • (Opcional) Registrar o artefato do modelo treinado ou a figura da Matriz de Confusão.
  5. Avaliação:
    • Analisar qual arquitetura (profundidade) obteve melhor desempenho no conjunto de teste.

Diretrizes para o Modelo e MLflow

  • Profundidade da Rede: Ao contrário de perceptrons simples, aqui você deve explorar o conceito de Deep Learning. Teste configurações onde o sinal passa por múltiplas transformações (ex: Entrada -> 64 -> 32 -> 16 -> Saída).
  • MLflow Tracking: Não basta apenas imprimir o resultado no console. O código deve conter chamadas como mlflow.log_param() e mlflow.log_metric().
  • Configuração de Ativação:
    • Camadas Ocultas: Sugere-se ReLU ou LeakyReLU.
    • Camada de Saída: Sigmoid (para probabilidade binária) associada a uma perda binária.
  • Função de Perda: BCELoss ou BCEWithLogitsLoss.

Passo a passo recomendado

  1. Setup: Instale o MLflow (pip install mlflow) e importe as bibliotecas.
  2. Dados: Carregue, limpe (remova name) e escalone os dados. Divida em Treino/Teste.
  3. Função de Treino: Crie uma função que aceita hiperparâmetros (como número de camadas) e realiza o treinamento completo.
  4. Experimentos:
    • Abra um contexto with mlflow.start_run():.
    • Defina uma arquitetura com 2 ou mais camadas ocultas.
    • Treine o modelo.
    • Logue os parâmetros e as métricas finais no MLflow.
  5. Comparação: Execute o passo 4 novamente alterando a arquitetura (ex: adicionando mais uma camada ou mudando o número de neurônios) e compare os resultados na interface do MLflow.

Como executar

  1. Abra o notebook no Jupyter/Colab.
  2. Faça upload do dataset.
  3. Execute o comando mlflow ui (se estiver local) para visualizar os resultados ou verifique os logs no próprio notebook se estiver no Colab/Kaggle.
  4. Execute as células de treinamento e verifique se os experimentos foram registrados.

Entrega

Após concluir o desafio, você deve enviar a URL do seu código no GitHub para a plataforma.

Além disso, que tal fazer um post no LinkedIn mostrando um print da interface do MLflow comparando seus modelos e compartilhando seus insights sobre redes profundas?

Feito com 💜 por Rocketseat 👋

Tarefas

Use este checklist para ajudar a organizar a sua entrega

Resolução

Confira os resultados esperados do projeto

Paywall background

Envie o projeto para ver a resolução

Ao enviar seu projeto, você poderá conferir os resultados esperados

Projetos relacionados