Ricerca…


Rimozione di funzionalità con varianza zero o quasi zero

Una funzionalità con una varianza quasi nullo è un buon candidato per la rimozione.

Puoi rilevare manualmente la varianza numerica sotto la tua soglia:

data("GermanCredit")
variances<-apply(GermanCredit, 2, var)
variances[which(variances<=0.0025)]

Oppure, puoi usare il pacchetto di accento circonferenziale per trovare una varianza quasi nullo. Un vantaggio qui è che definisce la variazione prossima allo zero non nel calcolo numerico della varianza, ma piuttosto come una funzione della rarità:

"nearZeroVar diagnostica i predittori che hanno un valore univoco (vale a dire zero predittori di varianza) o predittori che hanno entrambe le seguenti caratteristiche: hanno pochissimi valori univoci relativi al numero di campioni e al rapporto della frequenza del valore più comune alla frequenza del secondo valore più comune è grande ... "

library(caret)
names(GermanCredit)[nearZeroVar(GermanCredit)]

Rimozione di funzionalità con un numero elevato di NA

Se una funzionalità è in gran parte carente di dati, è un buon candidato per la rimozione:

library(VIM)
data(sleep)
colMeans(is.na(sleep))

   BodyWgt   BrainWgt       NonD      Dream      Sleep       Span       Gest 
0.00000000 0.00000000 0.22580645 0.19354839 0.06451613 0.06451613 0.06451613 
      Pred        Exp     Danger 
0.00000000 0.00000000 0.00000000 

In questo caso, potremmo voler rimuovere NonD e Dream, che hanno ciascuno circa il 20% di valori mancanti (il limite può variare)

Rimozione di funzionalità strettamente correlate

Funzionalità strettamente correlate possono aggiungere varianza al modello, e la rimozione di una coppia correlata potrebbe contribuire a ridurlo. Esistono molti modi per rilevare la correlazione. Eccone uno:

library(purrr) # in order to use keep()

# select correlatable vars
toCorrelate<-mtcars %>% keep(is.numeric)

# calculate correlation matrix
correlationMatrix <- cor(toCorrelate)

# pick only one out of each highly correlated pair's mirror image
correlationMatrix[upper.tri(correlationMatrix)]<-0  

# and I don't remove the highly-correlated-with-itself group
diag(correlationMatrix)<-0 

# find features that are highly correlated with another feature at the +- 0.85 level
apply(correlationMatrix,2, function(x) any(abs(x)>=0.85))

  mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb 
 TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 

Voglio vedere in che modo MPG è correlato così fortemente, e decidere cosa tenere e cosa lanciare. Lo stesso per cyl e disp. In alternativa, potrei aver bisogno di combinare alcune caratteristiche fortemente correlate.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow