Precisione del test superiore all'allenamento. Come interpretare?


23

Ho un set di dati contenente al massimo 150 esempi (suddivisi in training e test), con molte funzionalità (superiore a 1000). Devo confrontare i classificatori e i metodi di selezione delle caratteristiche che funzionano bene sui dati. Quindi, sto usando tre metodi di classificazione (J48, NB, SVM) e 2 metodi di selezione delle caratteristiche (CFS, WrapperSubset) con diversi metodi di ricerca (Greedy, BestFirst).

Durante il confronto, sto esaminando l'accuratezza dell'allenamento (piegatura incrociata 5 volte) e l'accuratezza del test.

Ecco uno dei risultati di J48 e CFS-BestFirst:

{"accurateTraining": 95.83, "accurateTest": 98.21}

Molti risultati sono così, e su SVM ci sono molti risultati che indicano che l'accuratezza del test è molto più alta dell'allenamento (allenamento: 60%, test: 98%)

Come posso interpretare in modo significativo questo tipo di risultati? Se fosse inferiore, direi che è troppo adatto. C'è qualcosa da dire sulla distorsione e la varianza in questo caso guardando tutti i risultati? Cosa posso fare per rendere significativa questa classificazione, come ri-selezionare i set di addestramento e test o semplicemente usare la validazione incrociata su tutti i dati?

Ho 73 corsi di formazione e 58 di prova. Alcune risposte non avevano queste informazioni quando sono state pubblicate.

Risposte:


20

Penso che un primo passo sia verificare se l'addestramento segnalato e le prestazioni dei test siano effettivamente corretti.

  • La suddivisione durante la convalida incrociata 5 volte viene eseguita in modo da produrre set / test di cv treno statisticamente indipendenti? Ad esempio, se ci sono misure ripetute nei dati, finiscono sempre nello stesso set?
  • L'accuratezza del 95,83% in un cv 5 volte di 150 campioni è in linea con 5 campioni errati su 130 di addestramento per i modelli surrogati 5 o 25 casi errati per campioni di addestramento 5 * 130.
  • La precisione del test del 98,21% è più difficile da spiegare: durante una corsa del CV, ogni caso dovrebbe essere testato una volta. Quindi i numeri eventualmente riportati dovrebbero essere in passi del 100% / 150. Il 98,21% corrisponde a 2,68 casi errati (2 e 3 errati su 150 casi di test forniscono rispettivamente una precisione del 98,67 e del 98,00%).

  • Se riesci a estrarre il tuo modello, calcola le precisioni riportate esternamente.

  • Quali sono le precisioni riportate per l'input casuale?
  • Esegui una convalida incrociata esterna: dividi i tuoi dati e consegna al programma solo la parte di addestramento. Prevedere i dati di test "esterni" e calcolare la precisione. È in linea con l'output del programma?
  • Assicurati che la "precisione del test" riportata provenga da dati indipendenti (convalida incrociata doppia / nidificata): se il tuo programma esegue l'ottimizzazione basata sui dati (ad es. Scegliendo le funzionalità "migliori" confrontando molti modelli), è più simile all'errore di addestramento (bontà di adattamento) che come un errore di generalizzazione.

Concordo con @mbq che l'errore di addestramento non è quasi mai utile nell'apprendimento automatico. Ma potresti trovarti in una delle poche situazioni in cui è effettivamente utile: se il programma seleziona un modello "migliore" confrontando le accuratezze, ma ha solo errori di allenamento tra cui scegliere, è necessario verificare se l'errore di allenamento in realtà consente un ragionevole scelta.
@mbq ha delineato lo scenario migliore per i modelli indistinguibili. Tuttavia, si verificano anche scenari peggiori: proprio come l'accuratezza del test, anche l'accuratezza dell'allenamento è soggetta a varianza ma presenta un orientamento ottimistico rispetto all'accuratezza della generalizzazione che di solito è interessante. Ciò può portare a una situazione in cui i modelli non possono essere distinti sebbene abbiano prestazioni diverse. Ma la precisione del loro addestramento (o cv interno) è troppo vicina per distinguerli a causa del loro orientamento ottimistico. Ad esempio, i metodi di selezione delle caratteristiche iterative possono essere soggetti a tali problemi che possono persino persistere per le accuratezze interne di convalida incrociata (a seconda di come viene implementata tale convalida incrociata).

Quindi, se dovesse sorgere un problema del genere, penso che sia una buona idea verificare se una scelta sensata possa eventualmente derivare dalle accuratezze utilizzate dal programma per la decisione. Ciò significherebbe verificare che l'accuratezza del cv interno (che si presume sia utilizzata per la selezione del modello migliore) non è o non è troppo ottimisticamente distorta rispetto a un cv fatto esternamente con una divisione statisticamente indipendente. Ancora una volta, i dati sintetici e / o casuali possono aiutare a scoprire cosa fa effettivamente il programma.

Un secondo passo è quello di verificare se le differenze osservate per le divisioni statisticamente indipendenti sono significative, come già sottolineato da @mbq.

Ti suggerisco di calcolare quale differenza di accuratezza devi osservare con la tua data dimensione del campione per avere una differenza statisticamente significativa. Se la variazione osservata è inferiore, non è possibile decidere quale algoritmo è migliore con il proprio set di dati: un'ulteriore ottimizzazione non ha senso.


ci sono ottime informazioni qui da digerire. in primo luogo, mi dispiace molto di non aver fornito i numeri esatti in quanto non mi aspettavo che tu entrassi in numeri così dettagliati e volevo anche concentrarmi su un solo argomento. comunque, ho 73 dati di allenamento e 58 di prova. questi non sono statisticamente separati, sono stati presi da me solo in tempi diversi. I campioni di addestramento vengono prima presi nell'algoritmo di selezione delle caratteristiche (il metodo wrapper fs ha anche 5 volte il cv interno) e poi 5 volte e viene presa la massima precisione e il modello viene salvato. e quindi quel modello viene utilizzato per calcolare l'accuratezza del test.
ercu,

16

La precisione su un set di allenamento non ha senso nell'apprendimento automatico. Ignoralo.


Grazie! ho molti risultati con la stessa migliore accuratezza del test, quindi non posso confrontare i risultati ora (guarderei anche l'accuratezza dell'allenamento per confrontare se non lo hai detto :). quindi, invece di dividere per testare e addestrare, la corsa multipla di convalida incrociata su tutti i set di dati è più appropriata per il mio caso per confrontare i risultati? o ho bisogno di altre metriche?
ercu,

1
CV è sicuramente una buona idea; in ogni caso, nota che potrebbero esserci diversi algoritmi o set di parametri "migliori" (nel senso che danno la stessa accuratezza statisticamente indistinguibile dal caso migliore) - anche questo non è un problema. Ancora meglio, significa che stai ottenendo risultati stabili: un ottimo livello ottimale potrebbe suggerire che hai sovralimentato il modello con parametri di selezione delle ciliegie.

8
È utile conoscere l'accuratezza sul set di training al fine di stimare la quantità di overfitting eseguita dall'algoritmo predittivo (calcolando la differenza di precisione tra training e set di test).
Frank Harrell,

Potresti spiegare perché?
inf

1
Dalla definizione, i metodi ML riguardano le prestazioni su dati invisibili, quindi non forniscono garanzie su questo risultato (non si prevede che il modello reimplementi il ​​meccanismo alla base dei dati come nella modellistica statistica). In pratica, molti metodi forniscono previsioni eccessivamente accurate, quindi è solo ingannevole.

6

Ci sono alcuni seri problemi con il modo in cui hai fatto questo. Innanzitutto, la suddivisione dei dati non è affidabile a meno che la dimensione totale del campione non sia enorme. Otterresti risultati diversi se ti dividi di nuovo. Tra le altre cose, non stai prendendo in considerazione gli intervalli di confidenza nelle stime di accuratezza. In secondo luogo, la convalida incrociata 5 volte non è sufficientemente precisa. Potrebbe essere necessario ripeterlo 100 volte per ottenere un'adeguata precisione. In terzo luogo, hai scelto come punteggio di precisione una regola di punteggio impropria discontinua (proporzione classificata correttamente). Una regola di punteggio così impropria porterà alla selezione del modello sbagliato.


3

Supponendo che non vi siano anomalie nell'implementazione degli algoritmi, esaminiamo il problema.

Immagina di prendere un piccolo sottoinsieme dai dati di allenamento e di eseguire l'algoritmo di apprendimento su di esso. Ovviamente andrà molto bene. È sempre possibile estrarre un sottoinsieme che raggiunge una precisione prossima al 98%.

Ora i tuoi dati di test sono molto simili a questo sottoinsieme? Se sì, allora devi andare a raccogliere più dati, si spera un po 'più vari. Da un punto di vista della bias-varianza, direi che la tua varianza è alta.


1

Hai troppe funzionalità (1000) per il numero di campioni che hai (150). È necessario aumentare i campioni o ridurre il numero di funzioni.

Dicono di solito numero di funzionalità ^ 2 = numero di campioni necessari. Quindi hai bisogno di almeno milioni di campioni.


0

Ciò può accadere utilizzando qualsiasi algoritmo ML e persino classificatori personalizzati. Prova diversi schemi di convalida incrociata k-fold, ovvero anche 2 o 10 volte. Con k superiore, si prevede che l'errore del test sia ridotto.

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.