R Language
Selezione delle caratteristiche in R - Rimozione di funzionalità estranee
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.