Sto cercando consigli sul modo migliore per affrontare il mio attuale problema di apprendimento automatico
Lo schema del problema e quello che ho fatto è il seguente:
- Ho oltre 900 prove di dati EEG, in cui ogni prova dura 1 secondo. La verità fondamentale è nota per ciascuno e classifica lo stato 0 e lo stato 1 (divisione 40-60%)
- Ogni processo passa attraverso la preelaborazione in cui filtrare ed estrarre la potenza di determinate bande di frequenza, e queste costituiscono un insieme di funzionalità (matrice di caratteristiche: 913x32)
- Quindi uso sklearn per addestrare il modello. cross_validation viene utilizzato dove utilizzo una dimensione di prova di 0,2. Il classificatore è impostato su SVC con kernel rbf, C = 1, gamma = 1 (ho provato un numero di valori diversi)
Puoi trovare una versione abbreviata del codice qui: http://pastebin.com/Xu13ciL4
I miei problemi:
- Quando uso il classificatore per prevedere le etichette per il mio set di test, ogni previsione è 0
- la precisione del treno è 1, mentre la precisione del set di prova è di circa 0,56
- il mio diagramma della curva di apprendimento è simile al seguente:
Ora, questo sembra un classico caso di overfitting qui. Tuttavia, è improbabile che il sovradimensionamento sia causato da un numero sproporzionato di funzioni per i campioni (32 caratteristiche, 900 campioni). Ho provato una serie di cose per alleviare questo problema:
- Ho provato a usare la riduzione della dimensionalità (PCA) nel caso in cui ho troppe funzioni per il numero di campioni, ma i punteggi di precisione e il diagramma della curva di apprendimento sembrano gli stessi di cui sopra. A meno che non imposti il numero di componenti su un valore inferiore a 10, a quel punto la precisione del treno inizia a diminuire, ma questo non è in qualche modo previsto dato che stai iniziando a perdere informazioni?
- Ho provato a normalizzare e standardizzare i dati. La standardizzazione (SD = 1) non fa nulla per cambiare i punteggi di treno o precisione. La normalizzazione (0-1) riduce la precisione del mio allenamento a 0,6.
- Ho provato una varietà di impostazioni C e gamma per SVC, ma non cambiano nessuno dei due punteggi
- Ho provato ad usare altri stimatori come GaussianNB, persino metodi ensemble come adaboost. Nessun cambiamento
- Ho provato a impostare in modo esplicito un metodo di regolarizzazione usando linearSVC ma non ha migliorato la situazione
- Ho provato a utilizzare le stesse funzionalità attraverso una rete neurale usando theano e la precisione del mio treno è di circa 0,6, il test è di circa 0,5
Sono felice di continuare a pensare al problema, ma a questo punto sto cercando una spinta nella giusta direzione. Dove potrebbe essere il mio problema e cosa posso fare per risolverlo?
È del tutto possibile che il mio set di funzionalità non distingua tra le 2 categorie, ma vorrei provare alcune altre opzioni prima di saltare a questa conclusione. Inoltre, se le mie caratteristiche non si distinguono, ciò spiegherebbe i punteggi bassi del set di test, ma come ottenere un punteggio del set di allenamento perfetto in quel caso? È possibile?