Recherche…


Suppression de fonctionnalités avec une variance nulle ou proche de zéro

Une fonctionnalité ayant une variance proche de zéro est un bon candidat pour la suppression.

Vous pouvez détecter manuellement la variance numérique en dessous de votre propre seuil:

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

Ou, vous pouvez utiliser le package caret pour trouver une variance proche de zéro. Un avantage ici est qu’il définit la variance proche de zéro non pas dans le calcul numérique de la variance, mais plutôt en fonction de la rareté:

«Les prédicteurs des diagnostics nearZeroVar qui ont une valeur unique (c.-à-d. des prédicteurs de la variance zéro) ou des prédicteurs présentant les deux caractéristiques suivantes: ils ont très peu de valeurs uniques par rapport au nombre d'échantillons et au rapport de la fréquence à la fréquence de la deuxième valeur la plus commune est grande ... "

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

Supprimer des fonctionnalités avec un grand nombre de NA

Si une fonctionnalité manque largement de données, c'est un bon candidat pour la suppression:

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 

Dans ce cas, nous pouvons vouloir supprimer NonD et Dream, qui contiennent chacun environ 20% de valeurs manquantes (votre limite peut varier)

Supprimer des entités étroitement corrélées

Des caractéristiques étroitement corrélées peuvent ajouter de la variance à votre modèle, et la suppression d’une paire corrélée peut aider à réduire ce phénomène. Il existe de nombreuses façons de détecter la corrélation. En voici un:

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 

Je veux regarder avec quelle corrélation MPG est si forte et décider quoi garder et quoi jeter. Même chose pour cyl et disp. Je pourrais aussi avoir besoin de combiner des fonctionnalités fortement corrélées.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow