Este repositório faz parte da entrega do trabalho da disciplina SCC0270 - Redes Neurais e Aprendizado Profundo (2025) e foi desenvolvido pelos alunos:
Francisco Luiz Maian do Nascimento - 14570890
Gabriel da Costa Merlin - 12544420
João Pedro Soares de Azevedo Calixto - 13732011
Théo Bruno Frey Riffel - 12547812
Vítor Amorim Fróis - 12543440
git clone https://github.com/TheoRiffel/Parkinson-Diagnosis-Deeplearning.git
cd Parkinson-Diagnosis-DeeplearningEnviamos um link no eDisciplinas que vai para o Google Drive que contém arquivos .zip com os dados. Basta baixá-los, colocá-los na pasta data/ e extraí-los.
-
Criar o ambiente 'parkinson'
make all- Selecionar o ambiente
parkinsondentro doskernels do jupyter
Com a configuração concluída, você pode executar os notebooks no diretório 'notebooks'.
- Depois de utilizar, executar o comando abaixo para excluir o que foi instalado
make cleanEste repositório contém um projeto para o diagnóstico multiclasse da doença de Parkinson (DP) a partir de dados de ressonância magnética funcional em repouso (rs-fMRI), baseado em três abordagens principais:
-
Séries Temporais
-
Extraímos as séries temporais BOLD (Blood-Oxygen-Level-Dependent) de cada Região de Interesse (ROI) para cada paciente.
-
Comparamos duas estratégias de classificação:
- Fully Convolutional Network (FCN): modelos convolucionais 1D treinados diretamente sobre as séries temporais.
- Catch22: conjunto de 22 métricas extraídas das séries, usadas como características em classificadores simples.
-
Realizamos experimentos de classificação:
- Binária (Controles vs. Parkinson avançado)
- Multiclasse (Controles, Prodomal, Parkinson)
- Classificação em duas etapas (Controle vs. Doente; Prodomal vs. Parkinson)
-
-
Matriz de Conectividade
-
Construímos a Matriz de Conectividade funcional correlacionando as séries BOLD das ROIs usando métricas de similaridade:
- Pearson, Spearman, Sliding Window, Dynamic Time Warping (DTW) e Imaginary Coherence (iCOH).
-
-
Comparamos duas estratégias de classificação:
-
Aplicamos redes Multilayer Perceptron (MLP) diretamente sobre a metade superior da matriz (vetorizada), tratando o desbalanceamento com
RandomOverSamplerou SMOTE. -
Além de utilizar apenas a matriz de conectividade das séries BOLD das ROIs, também extraímos características das séries BOLD usando o método Catch22. Com essas características, construímos uma nova matriz de conectividade, cuja metade superior, vetorizada, foi usada como entrada para uma MLP simples.
-
-
Aqui, também realizamos experimentos de classificação:
- Binária (Controles vs. Parkinson avançado)
- Multiclasse (Controles, Prodomal, Parkinson)
- Classificação em duas etapas (Controle vs. Doente; Prodomal vs. Parkinson)
-
Rede Cerebral (Grafos)
-
A partir da matriz de conectividade, geramos grafos representando o cérebro de cada paciente:
- OMST (Orthogonal Minimum Spanning Tree): gera uma árvore de custo mínimo.
- Thresholding: conecta regiões cujos coeficientes de correlação excedem um limiar.
-
Extraímos características dos grafos (autovalores da Matriz Laplaciana) e classificamos com Graph Neural Networks (GNN), usando
WeightedRandomSamplernoDataLoaderpara balanceamento.
-
-
Multimodalidade
Para atender à demanda por multimodalidade no trabalho, optamos por realizar um stacking dos melhores modelos obtidos. A partir dos experimentos realizados, observamos que os melhores resultados para o problema de classificação em três classes foram alcançados utilizando, em conjunto, as matrizes de correlação e as séries temporais brutas em uma única etapa de treinamento (notebooks 1.1_3classes e 2.1_3classes).
Assim, combinamos as previsões desses dois modelos por meio de um modelo simples de aprendizado de máquina, escolhemos a regressão logística pela sua simplicidade e bom desempenho.
Os resultados indicam que o modelo multimodal não apresentou ganhos significativos em relação ao modelo baseado apenas nas matrizes de correlação (notebook 1.1_3classes). Em várias execuções, o desempenho do stacking foi frequentemente inferior ou, quando semelhante, replicava essencialmente a saída do modelo de correlação. Em poucas exceções, houve uma pequena melhora entre 1% e 3%, considerada irrelevante para o problema.
Esses resultados sugerem que a forma como as regiões cerebrais se conectam, capturada pela matriz de correlação, é o aspecto mais importante para distinguir as classes.
-
1.0_correlation_matrix.ipynb Classifica utilizando somente 2 classes (Controles e Parkinson).
-
1.1_3classes.ipynb Classificação multiclasse (Controles, Prodomal, Parkinson).
-
1.2_2etapas.ipynb Adota a estratégia de classificação em duas etapas: primeiro Controles vs. Doentes (Prodomal + Parkinson), depois Prodomal vs. Parkinson, usando o mesmo vetor de conectividade.
-
1.3_catch22.ipynb Extraia características das séries BOLD com o Catch22 e depois extrai a matriz de conectividade dessas características que são vetorizadas e passadas a uma MLP.
-
1.4_optuna.ipynb Realiza otimização de hiperparâmetros do MLP usando Optuna.
-
2.0_time_series.ipynb Treina uma FCN 1D nas séries completas para classificação binária em 2 classes (Controle e Parkinson).
-
2.1_3classes.ipynb Ajusta o FCN para realizar classificação multiclasse (Controles, Prodomal, Parkinson).
-
2.2_2etapas.ipynb Executa o fluxo em duas etapas com FCN: Controle vs. Doente (Prodomal + Parkinson) e, depois, Prodomal vs. Parkinson.
-
2.3_catch22.ipynb Passa como entrada da FCN as características de cada uma das séries e não elas cruas a fim de verificar ganhos de desempenho.
- 3.0_gnn.ipynb Gera grafos (via OMST e thresholding) e treina Graph Neural Networks para classificação.
- 4.0_multimodal.ipynb Realiza o empilhamento (stacking) das previsões dos modelos baseados em séries temporais e matrizes de correlação para avaliar ganhos de performance com uma abordagem multimodal.
Todos os resultados, métricas e gráficos podem ser encontradas nos notebook de cada método. Destacamos os resultados mais relevantes abaixo, sendo que para cada métrica (coluna) deixamos em negrito o melhor modelo, além disso ordenamos as linhas pela ordem decrescente em acurácia.
| Modelo | Acurácia | F1-Score (Ponderado) | Precisão (Ponderada) | Recall (Ponderado) |
|---|---|---|---|---|
| Multimodalidade | 0.682927 | 0.657274 | 0.727573 | 0.682927 |
| Matriz de Conectividade | 0.646341 | 0.639605 | 0.637495 | 0.646341 |
| Séries Temporais | 0.475610 | 0.467637 | 0.462998 | 0.475610 |
| Baseline | 0.461916 | 0.291900 | 0.213367 | 0.461916 |
| GNN | 0.414600 | 0.402400 | 0.420000 | 0.410000 |