Je tente d'identifier 3 états mentaux (classes) basés sur les données de connectome EEG. La forme des données est de 99x1x34x34x50x130 (à l'origine des données de graphe, mais maintenant représentées sous forme de matrice), respectivement représentatives [sujets, canal, hauteur, largeur, fréquence, séries temporelles]. Pour les besoins de cette étude, je ne peux saisir qu'une image 1x34x34 des données de connectome. D'après des études antérieures, il a été constaté que la bande alpha (8-1 Hz) fournissait le plus d'informations, de sorte que l'ensemble de données a été réduit à 99x1x34x34x4x130. La précision de l'ensemble de test sur les techniques d'apprentissage automatique précédentes telles que les SVM a atteint une précision de test d'environ 75 %. Ainsi, mon objectif est d'obtenir une plus grande précision en utilisant les mêmes données (1x34x34). Étant donné que mes données sont très limitées, j'ai utilisé 1-66 pour l'entraînement et 66-99 pour les tests (ratios fixes et une distribution de classes de 1/3), j'ai pensé diviser les données le long de l'axe des séries temporelles (6e axe) puis moyenné les données pour obtenir une forme de 1x34x34 (à partir par ex. de 1x34x34x4x10, 10 est l'échantillon aléatoire de séries temporelles). Cela m'a donné environ 1500 échantillons pour l'entraînement et 33 pour les tests (tests fixes, les distributions de classes étant de 1/3).
Modèle:
SimpleCNN(
(conv1): Conv2d(1, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(conv2): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(pool1): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
(drop1): Dropout(p=0.25, inplace=False)
(fc1): Linear(in_features=9248, out_features=128, bias=True)
(drop2): Dropout(p=0.5, inplace=False)
(fc2): Linear(in_features=128, out_features=3, bias=True)
)
CrossEntropyLoss()
Adam (
Parameter Group 0
amsgrad: False
betas: (0.9, 0.999)
eps: 1e-08
lr: 5e-06
weight_decay: 0.0001
)
Résultats : L'ensemble d'entraînement peut atteindre une précision de 100 % avec suffisamment d'itérations, mais au détriment de la précision de l'ensemble de test. Après environ 20-50 époques de test, le modèle commence à surajuster l'ensemble d'entraînement et la précision de l'ensemble de test commence à diminuer (tout comme la perte).
Ce que j'ai essayé : J'ai essayé de régler les hyperparamètres : lr=0,001 à 0,000001, weight decay=0,0001 à 0,00001. Entraîner sur 1000 époques (inutile car le surajustement se produit en moins de 100 époques). J'ai également essayé d'augmenter/diminuer la complexité du modèle en ajoutant des couches fc supplémentaires et en variant le nombre de canaux dans les couches CNN de 8 à 64. J'ai également tenté d'ajouter plus de couches CNN et le modèle a légèrement moins bien performé avec une précision moyenne d'environ 45 % sur l'ensemble de test. J'ai essayé de planifier manuellement le taux d'apprentissage tous les 10 époques, les résultats étaient les mêmes. Le weight decay n'a pas semblé influencer beaucoup les résultats, je l'ai modifié de 0,1 à 0,000001.
D'après des tests précédents, j'ai un modèle qui atteint une précision de 60 % sur les ensembles de test et d'entraînement. Cependant, lorsque j'essaie de le retrainer, la précision chute immédiatement à environ 40 % sur les deux ensembles (entraînement et test), ce qui n'a pas de sens. J'ai essayé de modifier le taux d'apprentissage de 0,01 à 0,00000001, et j'ai également essayé le weight decay pour cela.
En formant le modèle et en regardant les graphiques, il semble que le modèle ne sait pas ce qu'il fait pour les 5-10 premières époques puis commence à apprendre rapidement pour atteindre une précision d'environ 50 % -60 % sur les deux ensembles. C'est à ce moment que le modèle commence à surajuster, à partir de là la précision du modèle atteint 100 % sur l'ensemble d'entraînement et la précision de l'ensemble de test descend à 33 %, ce qui équivaut à un simple hasard.
Des conseils ?
Édition :
Les sorties du modèle pour l'ensemble de test sont très proches les unes des autres.
0,33960407972335815, 0,311821848154068, 0,34857410192489624
L'écart-type moyen pour l'ensemble de test entre les prédictions pour chaque image est (softmax) :
0,017695341517654846
Cependant, l'écart-type moyen pour l'ensemble d'entraînement est 0,22
donc...
Scores F1 :
Moyenne Micro : 0,6060606060606061
Moyenne Macro : 0,5810185185185186
Moyenne Pondérée : 0,5810185185185186
Scores pour chaque classe : 0,6875 0,5 0,55555556