Buscar..


Eliminación de características con variación cero o casi cero

Una característica que tiene una variación cercana a cero es un buen candidato para la eliminación.

Puede detectar manualmente la variación numérica por debajo de su propio umbral:

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

O bien, puede utilizar el paquete caret para encontrar una variación cercana a cero. Una ventaja aquí es que define una varianza cercana a cero no en el cálculo numérico de la varianza, sino en función de la rareza:

"nearZeroVar diagnostica predictores que tienen un valor único (es decir, son predictores de varianza cero) o predictores que tienen las dos características siguientes: tienen muy pocos valores únicos en relación con el número de muestras y la proporción de la frecuencia del valor más común a la frecuencia del segundo valor más común es grande ... "

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

Eliminando características con altos números de NA

Si una característica carece en gran medida de datos, es un buen candidato para su eliminación:

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 

En este caso, es posible que queramos eliminar NonD y Dream, ya que cada uno tiene alrededor de un 20% de valores perdidos (su corte puede variar)

Eliminar características estrechamente correlacionadas

Las características estrechamente correlacionadas pueden agregar variación a su modelo, y eliminar uno de un par correlacionado podría ayudar a reducir eso. Hay muchas formas de detectar la correlación. Aquí hay 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 

Querré ver a qué MPG se relaciona tan fuertemente, y decidir qué guardar y qué tirar. Lo mismo para cyl y disp. Alternativamente, podría necesitar combinar algunas características fuertemente correlacionadas.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow