R / caret: set di treni e test vs. convalida incrociata?


9

Questa potrebbe essere forse una domanda sciocca, ma quando si genera un modello con cursore e si usa qualcosa di simile LOOCVo (ancora di più al punto) LGOCV, qual è il vantaggio di dividere i dati in set di treni e test se questo è essenzialmente ciò che la fase di convalida incrociata fa comunque?

Ho letto alcune delle domande correlate e mi hanno suggerito che alcuni dei metodi di convalida incrociata (ad es. Ciò che è descritto qui nel sito di inserimento ) sono finalizzati alla selezione delle funzionalità . Ma nel mio caso, sto usando randomForest( method = "rf") e kernlab( method = svmRadial), che non sono elencati nel gruppo che tenta di eliminare i predittori.

Quindi, la mia domanda è se uso qualcosa del genere cross_val <- trainControl(method = "LGOCV", p = 0.8), non è lo stesso della formazione sull'80% dei miei dati, testare il modello risultante sul restante 20% e farlo più e più volte per avere un'idea di quanto bene il il modello funziona?

In tal caso, è necessario suddividere i miei dati in set di treni / test?

PS chiedo in parte mentre sto conducendo modelli su prototipi DOE generati empiricamente (pensiamo ai beni duri in cui modifichiamo input e quindi usiamo metodi di prova per misurare vari attributi sul prototipo).

Come tale, non ho un enorme set di dati con molti livelli di predittore sovrapposti da cui modellare - spesso eseguiamo una prova in ogni punto di interesse DOE poiché la generazione dei dati è costosa in questo caso. Quindi, mi piacerebbe usare tutti i dati che posso per un modello accurato, ma volevo controllare qui che non mi manca qualcosa di ovvio e fare un modello scadente non suddividendo le cose.


Modifica: in risposta alla domanda di @ topepo, sto modellando gli attributi misurati fisicamente di un composto in base alla regolazione degli input chimici della formula. Non posso discutere della mia effettiva applicazione, ma tratterò un esempio basato sulla formulazione di vernice per interni in lattice. Sto conducendo esperimenti progettati in cui mescoliamo 4-5 sostanze chimiche, magari giochiamo con% di solidi e una quantità di tempo per riscaldare la soluzione polimerica per regolare il grado di polimerizzazione.

Potremmo quindi misurare reologia, peso molecolare, durezza del rivestimento, resistenza all'acqua, ecc.

Abbiamo repliche decenti di diverse variabili, ma poche repliche vere nel senso che ogni livello DOE era esattamente lo stesso. Il set di dati totali è di ~ 80 osservazioni e forse 4-5 sono ripetizioni esatte. Abbiamo condotto 15 diversi test e forse 5-6 di questi sono stati fatti per ogni singola osservazione. Alcune delle risposte sono presenti per il 25-50% dei dati.

Da qui, vorremmo modellare gli effetti dei nostri 7 predittori sulle proprietà di output e quindi ottimizzare per indirizzare nuovi spazi di progettazione che hanno maggiori probabilità di fornire le proprietà desiderate.

(Da qui la mia domanda QUI . Una volta che ho un modello addestrato, sarebbe bello fare il "contrario" e inserire le risposte desiderate per ottenere la migliore ipotesi ai possibili livelli di input da provare in seguito).


Il set di convalida e il set di test sono due cose diverse! Vedi stats.stackexchange.com/questions/19048/… e en.wikipedia.org/wiki/Test_set
sashkello il

@sashkello Grazie per quello. Questo può probabilmente essere chiuso come duplicato, e in qualche modo ho perso completamente quella domanda. Un bit mancante potrebbe essere: se mi alleno con data_set1, cosa considero il passaggio eseguito dalla LGOCVvalidazione incrociata? Dalla mia lettura suppongo che 1) caretesegua l'iterazione dei parametri di ottimizzazione data_set1e quindi 2) mantenga tali parametri fissi e 3) crei un "modello secondario" utilizzando i parametri dal numero 1 per ciascun p = 0.8campione di data_set1e verifichi le previsioni sui restanti 0,2 per misurare l'accuratezza . È un riassunto ragionevole?
Hendy,

Un altro bit mancante: tralasciare un set per i test aiuta l'accuratezza del modello? Sembra che fornisca solo un set imparziale per i test futuri. Se i dati sono limitati e non ci sono molti punti di progettazione sovrapposti, non è meglio allenarsi con l'intero set e fare affidamento sulla convalida incrociata per una stima dell'accuratezza?
Hendy,

Con una migliore strategia di ricerca, questo è un altro utile: stats.stackexchange.com/questions/9357/… . In particolare questo "Penso che un fattore limitante qui sia la quantità di dati che hai. Il più delle volte, non vogliamo nemmeno dividere i dati in partizioni fisse, quindi CV." Penso che questo arrivi alla mia domanda (che è probabilmente specifica per la natura limitata dei miei dati (solo 80 osservazioni). Sembra un voto per non dividere in questi casi?
Hendy,

Risposte:


7

I miei pensieri generali:

Quindi, quando stai valutando modelli diversi, potresti volerli mettere a punto, provare diversi tipi di pre-elaborazione ecc. Finché non trovi quello che pensi sia un buon modello. Il ricampionamento può aiutarti a orientarti nella giusta direzione durante tale processo.

Tuttavia, c'è ancora la possibilità di un adattamento eccessivo e le probabilità che ciò accada sono fortemente influenzate da quanti dati (e predittori) hai. Se hai un po 'di dati, ci sono alcuni modi per pensarci:

  • Utilizzare tutti i dati per l'addestramento poiché ogni punto di dati aumenta in modo significativo il rendimento del modello.
  • Mettere da parte un piccolo set di test come controllo finale per errori grossolani dovuti a un montaggio eccessivo. Le possibilità di un eccesso di adattamento con una piccola dimensione dei campioni non sono piccole e aumentano con il numero di campioni.

Cado nel secondo campo ma il primo non è affatto sbagliato.

Se hai un sacco di dati, allora non importa molto (a meno che tu non abbia un piccolo tasso di eventi).

Per te:

Hai un DOE. Il tipo di design aiuterebbe a rispondere alla domanda. Stai cercando di interpolare tra punti di progettazione o prevedere punti di progettazione che non sono stati testati finora?

Hai una replica. Sono caduto come una foresta a caso sta colpendo un chiodo con una mazza e potrebbe provocare un adattamento eccessivo. Vorrei provare qualcosa di più fluido come una rete neurale SVM o (gasp).

Max


Ho aggiunto un aggiornamento per te sopra. Ho avuto curve piuttosto carine (immagino che sia soggettivo) con method = "svmRadial". Spero di valutare alcuni altri, incluso method = neuralnet, anche se in passato ho trovato la rete neurale molto sensibile a `set.seed (). In breve, stiamo provando a 1) comprendere meglio la relazione tra input / risposte multiple e 2) fare ipotesi migliori nello spazio di progettazione più probabile per produrre le proprietà desiderate in modo da poter eseguire DOE nuovi, più mirati rispetto a un più tipico approccio espansivo / fucile a pompa in termini di livelli minimo / massimo di input da provare.
Hendy,
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.