Traiter de très grands ensembles de données chronologiques

10

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:

  1. L'ensemble de données ne tient pas en mémoire
  2. 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
  3. Le rapport signal / bruit est très faible
  4. Il n'est pas évident de savoir quelles seraient les caractéristiques correctes d'un classificateur

À tour de rôle:

  1. 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 ...

  2. 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).
  3. 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.

  4. 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?

tdc
la source

Réponses:

4

@tdc. Toutes les autres questions que vous avez mentionnées ici concernant l'analyse des données en neurosciences, notamment: réduction de la dimensionnalité, classification intra / entre sujets, rapport signal / bruit, etc., etc. sont traitées par la boîte à outils EEGLAB , qui a été spécialement conçue pour gérer ce type de données neuroscientifiques:

EEGLAB est une boîte à outils interactive Matlab pour le traitement des données EEG, MEG et autres électrophysiologiques en continu et liées aux événements incorporant l'analyse de composants indépendants (ICA), l'analyse temps / fréquence, le rejet d'artefacts, les statistiques liées aux événements et plusieurs modes utiles de visualisation de la moyenne et données d'essais uniques.

Ainsi, en ce qui concerne votre question "Quelle est la stratégie la plus probable pour réussir, sans dépenser des quantités infinies de temps de chercheur", je voudrais vous encourager à regarder l' atelier en ligne EEGLAB , et à continuer à partir de là ...

Mise à jour: pour plus de choses ML jetez un oeil sur le (nouveau) modèle BCILAB

Dov
la source
1
J'ai utilisé EEGLAB dans le passé, bien que ce soient principalement des fonctions sous-jacentes plutôt que l'interface graphique complète (qui avait tendance à être un peu lente et instable). Cependant, il est principalement axé sur l'analyse univariée de masse plutôt que sur l'analyse multivariée, bien que j'avoue que je ne l'ai pas examiné depuis un certain temps. En avez-vous l'expérience?
tdc
Je pense qu'ils ont fait de gros progrès au cours des deux dernières années ... et j'utilise à la fois l'interface graphique et la fonction matlab. Cet atelier de 2010 est très utile et de nombreux bugs ont été corrigés, de nombreux modèles ont été ajoutés comme STUDY et autres. Je suis très content que cela m'économise du temps et de l'argent mais veuillez noter que je travaille principalement avec des données EEG et non MEG.
Dov
1
ok intéressant. En principe, je ne vois aucune différence entre l'EEG et le MEG, car ils mesurent essentiellement l'activité électrique du cerveau, à part les types d'artefacts et le nombre de capteurs. Avez-vous combiné EEGLAB avec Machine Learning?
tdc
sûr. tout le temps. tout est dans matlab ... donc une fois que vous chargez vos données dans EEGLAB. vous pouvez utiliser PCA / ICA (c'est ce que je fais) et ensuite former votre classificateur / clustering SVM préféré, pêcheur ou k-mean..just name it.
Dov
1
C'est une excellente réponse pour sa portée, mais il serait intéressant de voir un résumé de la façon dont chacun de ces problèmes est géré indépendamment d'une boîte à outils reposant sur un système propriétaire.
étoile brillante