J'ai accès à un très grand ensemble de données. Les données proviennent d' enregistrements MEG de personnes écoutant des extraits musicaux, de l'un des quatre genres. Les données sont les suivantes:
- 6 sujets
- 3 répétitions expérimentales (époques)
- 120 essais par époque
- 8 secondes de données par essai à 500 Hz (= 4000 échantillons) à partir de 275 canaux MEG
Donc, chaque "exemple" est ici une matrice de taille [4000x275], et il y a 2160 de ces exemples, et c'est avant toute extraction de fonctionnalité. L'objectif est de prédire le genre en fonction du signal cérébral (classification 4 classes).
De toute évidence, il y a ici des problèmes difficiles, à savoir:
- L'ensemble de données ne tient pas en mémoire
- Il y aura de fortes corrélations temporelles dans les données, et la variation inter-sujet sera énorme. Par conséquent, il n'est pas évident de diviser les données
- Le rapport signal / bruit est très faible
- Il n'est pas évident de savoir quelles seraient les caractéristiques correctes d'un classificateur
À tour de rôle:
Il y a plusieurs choses que l'on peut faire. Premièrement, nous pouvons sous-échantillonner en toute sécurité de 500 Hz à ~ 200 Hz, car même en tenant compte de la limite de Nyquist, l'activité cérébrale ne se produit pas vraiment à plus de 100 Hz. Nous pourrions également sous-échantillonner à partir de l'ensemble des canaux (par exemple, centrer sur les zones auditives) mais nous préférons ne pas le faire a priori , car il peut y avoir une activité dans d'autres zones (frontales, etc.) qui pourraient être intéressantes. Nous pouvons probablement également supprimer une partie de la fenêtre de temps. Peut-être que seuls les 2 premiers sont importants pour la tâche? Ce n'est pas vraiment connu. Bien sûr, tout le monde crie " Réduction de la dimensionnalité! ", mais ce n'est pas anodin non plus. Premièrement, nous devons être très prudents au sujet de nos divisions train / test (voir 2.) et il n'est pas non plus évident de le faire avant ou après la génération de fonctionnalités. Deuxièmement, autre que cher la validation croisée ou l'inspection visuelle minutieuse, il n'y a aucun moyen évident de sélectionner la méthode appropriée ou le nombre approprié de dimensions. Nous pourrions bien sûr simplement utiliser par exemple PCA, ICA ou des projections aléatoires et espérer le meilleur ...
C'est délicat. Si nous avons des échantillons successifs dans l'ensemble d'entraînement, nous sommes susceptibles de suréquiper l'ensemble d'entraînement, alors que si nous avons des échantillons successifs divisés en train et ensembles d'essai, nous sommes susceptibles de sous-équiper l'ensemble d'entraînement, mais nous pourrions toujours suréquiper l'ensemble d'essai. Il semble y avoir différentes options ici:
- Classification par sujet unique . Prenez chaque sujet individuellement et répartissez-le selon les époques. Cela devrait être la tâche la plus facile, car nous n'essayons pas de prédire à travers les cerveaux. Dans ce cadre, on pourrait utiliser les deux époques restantes pour la validation croisée. Pour être complet, il faut faire tourner toutes les combinaisons. Nous rapporterions simplement la précision moyenne sur tous les sujets. Bien sûr, nous ne nous attendrions pas du tout à ce que ces modèles se généralisent bien.
- Dans la classification des sujets . Prenez tous les sujets ensemble et divisez-les selon les époques. Cela peut en fait être la tâche la plus facile, car nous aurons vu tous les sujets en formation. Cependant, nous ne nous attendrions probablement pas à ce que les modèles se généralisent bien à de nouveaux sujets. Dans ce cadre, on pourrait utiliser les deux époques restantes pour la validation croisée. Pour être complet, il faut faire tourner toutes les combinaisons.
- Classification entre sujets . Également connu sous le nom de «laisser-un-dehors», où un seul sujet est pris comme données de test, et le reste est utilisé pour la formation. Nous tournerions ensuite à travers tous les sujets. Une validation croisée serait alors effectuée sur des sujets. Nous nous attendrions à ce que ce soit une tâche beaucoup plus difficile, car nous essayons de prédire à chaque fois un "nouveau cerveau". Ici, nous nous attendrions à ce que les modèles se généralisent bien à la population plus large, bien qu'il y ait un problème de fiabilité test-retest (c.-à-d. Combien de sur-ajustement est causé par les corrélations temporelles).
Il s'agit d'un problème classique "aiguille dans une botte de foin" - le signal réel relatif à la reconnaissance du genre musical, ou de tout traitement spécifique au genre, est susceptible d'être minuscule par rapport à la "soupe" d'activité dans le cerveau. Il existe également des artefacts notables qui ne peuvent être que partiellement enlevés (principalement liés au mouvement). Toutes les fonctionnalités que nous tirons des données, et toutes les façons dont les données sont traitées, doivent éviter de détruire une partie du signal d'intérêt.
Ici, on pourrait imaginer faire diverses choses. La première consisterait simplement à utiliser les données brutes (concaténées dans un vecteur) comme vecteur d'entité. Je ne sais pas à quel point cela est fructueux - je pense que ces vecteurs seraient probablement essentiellement uniformément aléatoires. C'est alors vraiment une question de traitement du signal, mais il y a quelques directives générales que l'on peut suivre. L'une consiste à effectuer une analyse de Fourier standard sur une fenêtre coulissante, à partir de laquelle les composants peuvent être divisés en bandes de fréquences distinctes (alpha / bêta / gamma, etc.), et des statistiques de celles-ci (moyenne, écart type) peuvent être utilisées comme caractéristiques. Ou on pourrait utiliser des ondelettes, des transformées de Hilbert, ou même essayer de chercher des attracteurs chaotiques. Bien sûr, nous avons alors le choix des noyaux (linéaire, polynomial, RBF, etc.) qui multiplient le nombre de permutations. Peut-être que la meilleure chose à faire ici est de générer autant d'ensembles de fonctionnalités différents que possible, puis d'utiliser MKL ou des méthodes de boost pour les combiner.
Comment aborderiez-vous ce type de jeu de données (sinon celui-ci en particulier)? Y a-t-il quelque chose que j'ai manqué en cours de route? Quelle est la stratégie la plus probable pour réussir, sans dépenser des quantités infinies de temps de chercheur et de ressources informatiques?