Dovremmo sempre fare CV?


9

La mia domanda: dovrei fare CV anche per un set di dati relativamente grande?

Ho un set di dati relativamente grande e applicherò un algoritmo di apprendimento automatico al set di dati.

Dal momento che il mio PC non è veloce, il CV (e la ricerca della griglia) richiede a volte troppo tempo. In particolare un SVM non finisce mai a causa di molti parametri di ottimizzazione. Quindi, se faccio un CV, allora devo scegliere un dato relativamente piccolo.

D'altra parte, anche il set di validazione dovrebbe essere ampio, quindi penso che sia una buona idea usare un set di validazione che abbia le stesse (o maggiori) dimensioni del set di addestramento. (Vale a dire, invece di CV, utilizzo un ampio set di validazione per l'ottimizzazione dei parametri.)

Quindi ora ho almeno due opzioni.

  1. fare CV su un piccolo set di dati.
  2. utilizzare un set di addestramento relativamente grande e un set di validazione senza CV.
  3. altra idea.

Qual è la migliore idea? Le opinioni teoriche o pratiche sono entrambe benvenute.


1
Questa domanda dovrebbe ovviamente essere un CW.
H. Shindoh,

1
Cosa è grande? Quante osservazioni? Quante caratteristiche / variabili / regressori?
Jim,

1
Dipende da un PC. Vale a dire non sto pensando ai "big data", che richiedono diversi computer.
H. Shindoh,

Risposte:


3

In generale, non è necessario utilizzare la convalida incrociata in ogni momento. Il punto del CV è ottenere una stima più stabile della generalizzabilità del tuo classificatore che si otterrebbe usando solo un set di test. Non devi usare il CV se il tuo set di dati è enorme, quindi l'aggiunta di dati al tuo set di allenamento non migliorerà molto il tuo modello, e pochi errori di classificazione nel tuo set di test solo per caso, non cambieranno davvero la tua metrica delle prestazioni .

Avendo un piccolo set di allenamento e un grande set di test, la tua valutazione sarà distorta. Quindi sarà probabilmente peggio di quello che otterresti usando più dati di allenamento e iperparametri ottimali che potresti trovare diversi per set di dati più grandi, semplicemente perché più dati richiederanno meno regolarizzazione.

Tuttavia, ottenere iperparametri ottimali non è comunque la parte importante e non migliorerà notevolmente le prestazioni. Dovresti concentrare le tue energie per capire il problema, creare buone funzionalità e ottenere dati in buona forma.

Ecco alcune cose che puoi considerare per velocizzare le cose:

  1. Allenalo con meno funzioni. Utilizzare la selezione delle funzioni e / o la riduzione della dimensionalità per ridurre le dimensioni del problema
  2. Usa kernel precollegato per SVM
  3. Utilizzare algoritmi che non devono selezionare i parametri iper in una griglia. Soprattutto quelli lineari come la regressione logistica con penalità di ridge / lazo / rete elastica o persino SVM lineare. A seconda dell'implementazione, tali classificatori possono adattare i modelli per tutti gli iperparametri nel percorso selezionato al costo di adattarne solo uno
  4. usa un'implementazione più veloce per il tuo tipo di problema (dovrai cercarlo su Google)

e anche con computer più lenti, puoi:

  1. Usa più core
  2. Usa GPU

2

La convalida incrociata è uno strumento per stimare la varianza della metrica delle prestazioni a causa della casualità nei dati (e forse nell'algoritmo di apprendimento se non deterministico).

Quindi, se usi solo una divisione, ad esempio 80% di allenamento + 20% di test e segnala la tua metrica delle prestazioni di questo singolo esperimento, ci sono buone probabilità che chiunque cerchi di riprodurre l'esperimento utilizzando esattamente gli stessi parametri troverà una performance diversa (a volte molto diverso). A meno che ovviamente non forniate la stessa divisione esatta che non ha senso.

Per tornare alla tua domanda, penso che dovresti assolutamente utilizzare il CV per segnalare le tue prestazioni (ad esempio, fai un CV di 10 volte e segnala la media e la deviazione standard della metrica delle prestazioni). Ora per ottimizzare il tuo algoritmo puoi usare un set di validazione molto più piccolo campionato dal set di training (assicurati che non sia incluso nel set di test).

Se hai paura che non troverai i migliori iperparametri usando un piccolo set, probabilmente stai adattando il tuo algoritmo alle specifiche del set di dati. Se non riesci a trovare una configurazione usando un piccolo campione che fornisca una prestazione ragionevole tra tutte le pieghe, probabilmente l'algoritmo non è molto utile in pratica.

Inoltre, tieni presente che alcuni algoritmi sono semplicemente troppo lenti / non si adattano bene in alcune configurazioni. Anche questo fa parte della selezione pratica del modello.

Dato che menzioni gli SVM, ovviamente la maggior parte delle implementazioni sarà lenta quando proverà a trovare parametri per i kernel non lineari mediante la ricerca della griglia. La ricerca della griglia ha una complessità esponenziale, quindi usala con pochissimi parametri. Inoltre, tieni presente che la maggior parte delle librerie fornisce parametri predefiniti ragionevoli (o almeno imposti un parametro e ci sono euristiche per impostare gli altri).

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.