R caret e NAs


26

Preferisco di gran lunga il caret per la sua capacità di regolazione dei parametri e l'interfaccia uniforme, ma ho osservato che richiede sempre set di dati completi (cioè senza NA) anche se il modello "nudo" applicato consente le NA. Ciò è molto fastidioso, in quanto si dovrebbero applicare metodi di imputazione laboriosi, che non sono necessari in primo luogo. Come si può eludere l'imputazione e usare ancora i vantaggi del cursore?


3
Devi sempre fare qualcosa con valori mancanti. Devo dire che non capisco davvero la tua domanda: stai cercando un approccio unico per tutti ...? Se non vuoi imputare i NA, allora cosa vuoi fare con loro? Elimina?
Tim

1
Voglio lasciare lì le NA e lasciarle al modello per far fronte alle NA. Se lo faccio con una funzione C5.0 in C50, ad esempio, potrebbe far fronte ai NA stessi, ma in questo caso non posso usare il punto di inserimento, poiché la funzione del treno del punto di inserimento non consente NA nei set di dati anche quando voglio usare il C5. 0 funzione di C50 sopra menzionata.
Fredrik,

3
Ma ciò che "modello" fa è o ignora (elimina) questi dati lasciandoti con un campione più piccolo; stima (imputa) tali valori; oppure predice la categoria "NA" (ad esempio in alcuni modelli basati su alberi). Cos'altro vorresti che facesse il tuo "modello"? Alcuni software fanno automaticamente queste cose per te, ma immagina che la tua macchina da caffè ti abbia dato il caffè "predefinito" ... Alcuni software rendono il "caffè predefinito" dai NA, ma non è il massimo che puoi ottenere.
Tim

3
Sei sicuro che il cursore non consenta le NA? Ho provato a introdurre NA con l'esempio predefinito nella pagina di aiuto di train e con il metodo C5.0 train ha funzionato bene. Fallito con la foresta casuale.
mpiktas,

Risposte:


32

Alla funzione train in caret, è possibile passare il parametro na.action = na.pass e nessuna preelaborazione (non specificare preProcess, lasciarlo come valore predefinito NULL). Questo passerà i valori NA non modificati direttamente alla funzione di previsione (ciò provocherà il fallimento delle funzioni di previsione che non supportano i valori mancanti, in quanto è necessario specificare preProcess per imputare i valori mancanti prima di chiamare la funzione di previsione). Per esempio:

train(formula,
      dataset,
      method = "C5.0",
      na.action = na.pass)

In questo caso, C5.0 gestirà i valori mancanti da solo.


1
Questa è una discussione interessante Quale sarebbe la trappola dell'aggiunta di NA come altro livello a un predittore categorico? Se le NA non possono essere modellate o imputate, vale a dire che la presenza di un'assenza è in realtà informativa, sembrerebbe che semplicemente rendere NA un livello aggiuntivo abbia senso?
Seanosapien,

Se si utilizza la specifica x, y trainnell'avere l' na.action = na.passopzione impostata causerà il seguente errore:Something is wrong; all the RMSE metric values are missing
user29609

3

Hai provato a ricodificare gli NA? Qualcosa> 3 deviazioni standard al di fuori dei tuoi dati (es. -12345) dovrebbero incoraggiare C5.0 a prevederli separatamente, come accade con le NA.


2

Penso che la tua soluzione sarebbe quella di imputare i valori usando la funzione predict () .

Vedi ?predict.trainper maggiori dettagli.

È possibile utilizzare na.omitper consentire al cursore di imputare i valori. Per esempio:

    ## S3 method for class 'train':
    predict((object, newdata = NULL, type = "raw", na.action = na.omit, ...)

da http://www.inside-r.org/packages/cran/caret/docs/predict.train

Un'altra soluzione sarebbe quella di imputare durante la preelaborazione dei dati:

    ## S3 method for class 'default':
    preProcess(x, 
       method = "knnImpute",   # or *bagImpute* / *medianImpute*
       pcaComp = 10,
       na.remove = TRUE,
       k = 5,
       knnSummary = mean,
       outcome = NULL,
       fudge = .2,
       numUnique = 3,
       verbose = TRUE,
       )

da http://www.inside-r.org/node/86978

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.