Bassa precisione di classificazione, cosa fare dopo?


16

Quindi, sono un principiante nel campo ML e provo a fare un po 'di classificazione. Il mio obiettivo è prevedere il risultato di un evento sportivo. Ho raccolto alcuni dati storici e ora provo a formare un classificatore. Ho ottenuto circa 1200 campioni, 0,2 dei quali li ho suddivisi a scopo di test, altri li ho inseriti nella ricerca della griglia (validazione incrociata inclusa) con diversi classificatori. Ho provato SVM con kernel lineari, rbf e polinominali e foreste casuali al momento. Sfortunatamente, non riesco a ottenere una precisione significativamente maggiore di 0,5 (uguale alla scelta casuale della classe). Significa che non riesco proprio a prevedere l'esito di un evento così complesso? O posso ottenere una precisione di almeno 0,7-0,8? Se è fattibile, allora cosa dovrei esaminare dopo?

  • Ricevi più dati? (Posso ingrandire il set di dati fino a 5 volte)
  • Prova diversi classificatori? (Regressione logistica, kNN, ecc.)
  • Rivalutare il mio set di funzionalità? Esistono strumenti ML da analizzare, quali caratteristiche hanno un senso e quali no? Forse dovrei ridurre il mio set di funzionalità (al momento ho 12 funzionalità)?

Qual è la tua precisione di allenamento? E quanti campioni hai in ogni classe?
Leo,

1
Che sport è questo e cosa consideri una classificazione "corretta"? Se stai semplicemente cercando di prevedere un risultato di vittoria / perdita praticamente in qualsiasi sport importante, è quasi inconcepibile che anche il più semplice dei classificatori non predirebbe meglio di 0,5. Se, per esempio, stai cercando di prevedere la vincita / perdita rispetto a uno spread o qualche altro risultato handicappato, allora molto meglio di 0,5 potrebbe essere difficile.
cardinale il

La precisione di addestramento di @Leo è di circa 0,5. Le lezioni sono distribuite uniformemente, io ho le classi 0 e 1.
fspirit,

@ cardinale Sì, provo a prevedere il risultato di vittoria / perdita, nessun handicap. È possibile raggiungere, diciamo, una precisione di 0,8 sul set di test?
fspirit,

1
@fspirit: Dipende dallo sport e dalla disuguaglianza nelle capacità tra i partecipanti, per prima cosa. Il solo fatto di sapere chi partecipa a ciascun concorso può essere spesso un forte predittore. Qui e qui ci sono un paio di post correlati.
cardinale il

Risposte:


17

Prima di tutto, se il tuo classificatore non fa meglio di una scelta casuale, c'è il rischio che semplicemente non ci sia alcuna connessione tra funzionalità e classe. Una buona domanda da porsi in tale posizione, è il tempo che tu o un esperto di dominio potresti dedurre la classe (con una precisione maggiore di un classificatore casuale) in base a determinate caratteristiche. In caso contrario, ottenere più righe di dati o modificare il classificatore non aiuta. Quello che devi fare è ottenere più dati utilizzando diverse funzionalità.

Se d'altra parte pensi che le informazioni necessarie per dedurre la classe siano già nelle etichette, dovresti verificare se il tuo classificatore soffre di un bias elevato o di un problema di varianza elevata.

A tale scopo, rappresentare graficamente l'errore di convalida e l'errore del set di allenamento, in funzione degli esempi di allenamento.

Se le righe sembrano convergere allo stesso valore e sono vicine alla fine, allora il tuo classificatore ha un'inclinazione elevata e l'aggiunta di più dati non sarà di aiuto. Una buona idea in questo caso è quella di cambiare il classificatore per uno che ha una varianza maggiore o semplicemente abbassare il parametro di regolarizzazione di quello attuale.

Se d'altra parte le linee sono abbastanza distanti e si ha un errore del set di addestramento basso ma un errore di convalida elevato, il classificatore presenta una varianza troppo elevata. In questo caso è molto probabile che ottenere più dati aiuti. Se dopo aver ottenuto più dati la varianza sarà ancora troppo elevata, è possibile aumentare il parametro di regolarizzazione.

Queste sono le regole generali che userei di fronte a un problema come il tuo.

Saluti.


Intendevi errore set di validazione ed errore set TEST? Altrimenti, sono confuso. Non conosco nemmeno l'errore del set di treni, poiché utilizzo l'errore del set di validazione per scegliere il modello e verificare il modello selezionato sul set di test.
fspirit,

No, intendo l'errore del set di addestramento in cui è scritto. L'errore di allenamento è il numero di esempi classificati erroneamente nel set di allenamento diviso per le dimensioni del set di allenamento. Allo stesso modo l'errore del set di test è il numero di esempi classificati erroneamente nel set di test diviso per le dimensioni del set di allenamento. Inoltre, potresti voler controllare il Corso di apprendimento automatico di Coursera (( class.coursera.org/ml-2012-002/lecture/index ), in particolare i video per "Consigli per l'applicazione dell'apprendimento automatico". Questi consigli sono abbastanza rilevanti per la tua situazione.
sjm.majewski,

Ho corso il corso, quando è stato eseguito per la prima volta. Per quanto riguarda l'errore del set di allenamento, ora lo
eseguo anche

5

Suggerirei di fare un passo indietro e fare alcune analisi dei dati esplorativi prima di tentare la classificazione. Vale la pena esaminare le tue funzionalità su base individuale per vedere se c'è qualche relazione con il risultato di interesse - è possibile che le funzionalità che hai non abbiano alcuna associazione con le etichette della classe. Come fai a sapere se le funzionalità che hai saranno utili?

Potresti iniziare facendo test di ipotesi o analisi di correlazione per testare le relazioni. La generazione di istogrammi specifici per classe per le caratteristiche (ovvero la rappresentazione di istogrammi dei dati per ciascuna classe, per una determinata funzione sullo stesso asse) può anche essere un buon modo per mostrare se una caratteristica discrimina bene tra le due classi.

È importante ricordare però di non lasciare che i risultati della tua analisi esplorativa influenzino le tue scelte di classificazione. La scelta di funzionalità per la classificazione sulla base di un'analisi esplorativa precedente sugli stessi dati, può portare a stime di sovralimentazione eccessive e distorte (vedere la discussione qui ), ma un'analisi esplorativa ti darà almeno un'idea se il compito che stai cercando di fare è pari possibile.


Proverò a disegnare gli istogrammi e vedrò come saranno.
fspirit,

@BGreene - il tuo terzo paragrafo è difficile per me. Se l'analisi esplorativa mostra che il predittore x1 è altamente correlato con il risultato, non vanificherebbe lo scopo di verificare tale correlazione se non si utilizzasse x1 come almeno un predittore candidato in un modello multivariato?
rolando2,

@ rolando2 - Non sto suggerendo di non includere la funzionalità come candidato come parte di una routine di selezione delle funzionalità, ma non dovresti scegliere funzionalità basate su un'analisi esplorativa in quanto ciò si adatterà. Tuttavia, ai fini della valutazione delle prestazioni generalizzate di un modello di classificatore, la selezione delle caratteristiche dovrebbe essere effettuata all'interno della routine di selezione del modello (ovvero all'interno di ciascuna piega della convalida incrociata). Quello che sto suggerendo è che l'analisi esplorativa e la classificazione dovrebbero essere trattate come attività separate - ognuna ti dice cose diverse sui tuoi dati
BGreene,

3

È positivo che tu abbia separato i tuoi dati in dati di allenamento e dati di test.

Il tuo errore di allenamento è diminuito quando ti sei allenato? In caso contrario, potresti avere un bug nel tuo algoritmo di allenamento. Ti aspetti che l'errore nel tuo set di test sia maggiore dell'errore nel tuo set di allenamento, quindi se hai un errore inaccettabilmente alto nel tuo set di allenamento c'è poca speranza di successo.

Sbarazzarsi delle funzionalità può evitare alcuni tipi di overfitting. Tuttavia, non dovrebbe migliorare l'errore sul set di allenamento. Un errore basso sul set di allenamento e un errore elevato sul set di test potrebbero indicare che ci si allena utilizzando un set di funzioni eccessivamente flessibile. Tuttavia, è più sicuro verificarlo tramite la convalida incrociata rispetto al set di test. Una volta selezionato il set di funzionalità in base al set di test, non è più valido come set di test.


Uso treno separato, validazione e set di test. Seleziono hyper-params in base all'errore del set di convalida e quindi applico il modello selezionato al set di test. Dubito che ci sia un bug nell'algoritmo di training, perché uso lib libere.
fspirit,

50%

Nella possibilità "le funzionalità sono terribili", includo il caso in cui non esiste una soluzione possibile. Tuttavia, ne dubito molto. Non c'è sport che conosco dove non ci sono modi per vedere che un concorrente è il favorito rispetto a un altro. È persino possibile con le forbici da roccia.
Douglas Zare,

1

Perché non seguire il principio "guarda prima i grafici dei dati". Una cosa che puoi fare è un diagramma a dispersione 2 D delle densità condizionali di due classi per due covariate. Se li guardi e non vedi praticamente alcuna separazione che potrebbe indicare mancanza di prevedibilità e puoi farlo con tutte le covariate. Questo ti dà alcune idee sulla capacità di usare queste covariate per prevedere. Se vedi qualche speranza che queste variabili possano separarsi un po ', allora inizia a pensare a discriminanti lineari, discriminanti quadratici, discriminazione del kernel, regolarizzazione, classificazione dell'albero, SVM ecc.


Siamo spiacenti, um è la caratteristica covariate ==?
fspirit,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.