R Language
Sélection de fonctionnalités dans R - Suppression de fonctionnalités externes
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.