Neuer Code

8 views
Skip to first unread message

Thorsten Zander

unread,
Feb 4, 2013, 4:45:55 PM2/4/13
to bci2...@googlegroups.com
Hallo zusammen!

Ich habe in den letzten drei Tagen an der Verfeinerung eures BCI2-Paradigmas gearbeitet.

Es nutzt nun BCILAB-Routinen zum Filtern (flt_spectrum) und ist nun bedeuend schneller. Ich habe neben der Projektion ueber die Patterns noch eine ueber einen Filter eingebaut -- die Filter sind die mit dem Inversen der geschaetzten Kovatrianz gewichteten Patterns -- es gibt also nun 8 Features, und nicht mehr 4. Ausserdem hat das Paradigma nun eine Visualisierung (Patterns und Filter) und einen freien Parameter ExtrWnd, der das Extraction Window fuer die Bandpower-Schaetzung festlegt, also den Bereich der Vibrationszeit, den wir zum Klassifizieren nehmen. Es gab noch ein Problem (Denkfehler!) mit dem Baseline-Window -- man kann dies online nicht fuer jeden Trial bestimmen. Deswegen wird nun eins zu Beginn gemittelt, welches dann bei der Klassifikation von dem gerade betrachtetem Trial abgexzogen wird.

Das ganze funktioniert bei dem ersten Datensatz recht gut (~80% Guete), aber auch nur, wenn man das Zeitfenster richtig waehlt ([3 6]). Bei den darauf folgenden scheint es nicht ganz so einfach zu sein. Es ist nun jedoch zu spaet, um das ganze noch weiter zu testen.

Morgen werde ich mal schauen, ob es noch eine Moeglichkeit gibt, die Auswahl des Zeitfensters irgendwie visuell zu unterstuezten. Ausserdem, sollte der neue Code nochmal mit der urspruenglichen Nicht-BCILAB-Version abgeglichen werden -- es kann sein, dass sich in der Zwischenzeit ein Fehler eingeschlichen hat. Wuerdet ihr das morgen uebernehmen?

Morgen wird das Basketparadigma fertig sein. Ich habe heute schon mal einen kleinen Pseudo-Online Test gemacht, der gut aussah und sehr einfach zu starten war. Das nur zur Motivation -- Details spaeter.

Die Nicht-Stationaritaeten sind leide rimmer noch da. Das heisst, der Klassifikator des ersten Datensatzes laesst sich nicht auf spaetere anwenden. Das Problem laesst sich ein wneig durch nicht-lineare Klassifikatoren beheben (40% Fehler auf dem vollstaendigen Datensatz, anstatt 50% mit LDA). Da muessen wir aber noch dran arbeiten.

Das Testen der verschiedenen Zeitfenster macht ihr besser ueber die Command-Line als ueber die GUI. Dazu macht ihr es EINMAL ueber die GUI und veraendert es danach ueber den folgenden Code:

EEG = exp_eval_optimized(io_loadset('Z:\bcilab_data\VP005\2to4.set','channels',1:64));
[DATENSATZ LADEN]

lastapproach.parameters{1}.pred.fex.extrwnd = [4 7]
[ZEITFENSTER BEISPIELSWEISE AUF [4 7] SETZEN]

[trainloss,lastmodel,laststats] = bci_train('Data',EEG,'Approach',lastapproach,'TargetMarkers',{'101','102'});
[KLASSIFIZIEREN]

Das neue Paradigma habe ich hochgeladen.

Viele Gruesse -- und viel Erfolg!!
Thorsten




Thorsten Zander

unread,
Feb 4, 2013, 6:17:18 PM2/4/13
to bci2...@googlegroups.com
ich glaube wir sollten bei den neuen Aufnahmen etwas aendern. Vermutlich ist eine Verkuerzung gut -- eine Baseline von 3 Sekunden und eine Stimulation von 2 Sekunden, vielleicht 3 Sekunden. Ein Block sollte 80 Trials haben, wir sollten 2 Bloecke aufnehmen. Vielleicht koennen wir das beim ersten Onlineversuch so angehen. Ist ein Risiko, aber ich denke, so sollte es besser sein.

T.

Thorsten Zander

unread,
Feb 5, 2013, 6:29:35 AM2/5/13
to bci2...@googlegroups.com
Im Aufruf der Klassifikation von der Kommandozeile, den ich gestern rumgeschickt habe, fehlt leider die Spezifikation der Kreuzvalidierung.

Nehmt bitte lieber diese:
[trainloss(w),lastmodel,laststats] = bci_train('Data',EEG,'Approach',lastapproach,'EvaluationScheme', 'loo','TargetMarkers',{'101','102'});

da wir nur so wenige Trials haben.

Standardmaessig schmeisst er die 5 umliegenden Trials raus, um die IID'ness (Unabhaengigkleit der Daten bis auf den zu untersuchenden Faktor) der Daten zu erreichen (ist ne Voraussetzung der Kreuzvalidierung, die leider oft nicht beruecksichtigt wird).
Reply all
Reply to author
Forward
0 new messages