Je recherche des recommandations sur la meilleure façon de résoudre mon problème actuel d'apprentissage automatique
Le contour du problème et ce que j'ai fait est le suivant:
- J'ai plus de 900 essais de données EEG, où chaque essai dure 1 seconde. La vérité fondamentale est connue pour chacun et classe l'état 0 et l'état 1 (répartition de 40 à 60%)
- Chaque essai passe par un prétraitement où je filtre et extrait la puissance de certaines bandes de fréquences, et celles-ci constituent un ensemble de fonctionnalités (matrice de fonctionnalités: 913x32)
- Ensuite, j'utilise sklearn pour former le modèle. cross_validation est utilisé lorsque j'utilise une taille de test de 0,2. Le classificateur est défini sur SVC avec le noyau rbf, C = 1, gamma = 1 (j'ai essayé un certain nombre de valeurs différentes)
Vous pouvez trouver une version abrégée du code ici: http://pastebin.com/Xu13ciL4
Mes problèmes:
- Lorsque j'utilise le classificateur pour prédire les étiquettes de mon jeu de tests, chaque prédiction est 0
- la précision du train est de 1, tandis que la précision de l'ensemble de test est d'environ 0,56
- mon tracé de courbe d'apprentissage ressemble à ceci:
Maintenant, cela semble être un cas classique de sur-ajustement ici. Cependant, un sur-ajustement ici est peu susceptible d'être causé par un nombre disproportionné de fonctionnalités par rapport aux échantillons (32 fonctionnalités, 900 échantillons). J'ai essayé un certain nombre de choses pour atténuer ce problème:
- J'ai essayé d'utiliser la réduction de dimensionnalité (PCA) au cas où c'est parce que j'ai trop de fonctionnalités pour le nombre d'échantillons, mais les scores de précision et le tracé de la courbe d'apprentissage sont les mêmes que ci-dessus. À moins que je ne fixe le nombre de composants à moins de 10, à quel moment la précision du train commence à chuter, mais n'est-ce pas quelque peu attendu étant donné que vous commencez à perdre des informations?
- J'ai essayé de normaliser et de normaliser les données. La standardisation (SD = 1) ne change rien au train ou aux scores de précision. La normalisation (0-1) réduit ma précision d'entraînement à 0,6.
- J'ai essayé une variété de paramètres C et gamma pour SVC, mais ils ne changent pas non plus le score
- Essayé en utilisant d'autres estimateurs comme GaussianNB, même des méthodes d'ensemble comme adaboost. Pas de changement
- J'ai essayé de définir explicitement une méthode de régularisation à l'aide de linearSVC mais n'a pas amélioré la situation
- J'ai essayé d'exécuter les mêmes fonctionnalités via un réseau de neurones à l'aide de Theano et la précision de mon train est d'environ 0,6, le test est d'environ 0,5
Je suis heureux de continuer à penser au problème, mais à ce stade, je cherche un coup de pouce dans la bonne direction. Où pourrait être mon problème et que pourrais-je faire pour le résoudre?
Il est tout à fait possible que mon ensemble de fonctionnalités ne fasse tout simplement pas de distinction entre les 2 catégories, mais j'aimerais essayer d'autres options avant de sauter à cette conclusion. De plus, si mes fonctionnalités ne font pas de distinction, cela expliquerait les faibles scores de l'ensemble de tests, mais comment obtenir un score parfait de l'ensemble d'entraînement dans ce cas? Est-ce possible?