Rimuovere i predittori con varianza quasi zero
Come hai visto nel video, per il prossimo set di esercizi userai il dataset blood-brain. Si tratta di un insieme di dati biochimici in cui il compito è prevedere il seguente valore per un insieme di composti biochimici:
log((concentration of compound in brain) /
(concentration of compound in blood))
Questo fornisce una metrica quantitativa della capacità del composto di attraversare la barriera emato-encefalica ed è utile per comprendere le proprietà biologiche di tale barriera.
Un aspetto interessante di questo dataset è che contiene molte variabili e molte di queste hanno varianze estremamente basse. Ciò significa che in queste variabili c'è pochissima informazione perché sono costituite per lo più da un unico valore (ad es. zero).
Per fortuna, caret contiene una funzione di utilità chiamata nearZeroVar() per rimuovere tali variabili e risparmiare tempo durante la modellazione.
nearZeroVar() prende in input dei dati x, quindi considera il rapporto tra il valore più comune e il secondo più comune, freqCut, e la percentuale di valori distinti rispetto al numero totale di campioni, uniqueCut. Per impostazione predefinita, caret usa freqCut = 19 e uniqueCut = 10, che è piuttosto conservativo. A me piace essere un po' più aggressivo e usare freqCut = 2 e uniqueCut = 20 quando chiamo nearZeroVar().
Questo esercizio fa parte del corso
Machine Learning con caret in R
Istruzioni dell'esercizio
bloodbrain_x e bloodbrain_y sono caricati nel tuo workspace.
- Identifica i predittori con varianza quasi zero eseguendo
nearZeroVar()sul dataset blood-brain. Salva il risultato in un oggetto chiamatoremove_cols. UsafreqCut = 2euniqueCut = 20nella chiamata anearZeroVar(). - Usa
names()per creare un vettore contenente tutti i nomi delle colonne dibloodbrain_x. Chiamaloall_cols. - Crea un nuovo data frame chiamato
bloodbrain_x_smallcon le variabili a varianza quasi zero rimosse. Usasetdiff()per isolare i nomi delle colonne che vuoi mantenere (cioè che non vuoi rimuovere).
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
# Identify near zero variance predictors: remove_cols
remove_cols <- nearZeroVar(___, names = TRUE,
freqCut = ___, uniqueCut = ___)
# Get all column names from bloodbrain_x: all_cols
# Remove from data: bloodbrain_x_small
bloodbrain_x_small <- bloodbrain_x[ , setdiff(___, ___)]