Zoeken…


Functies verwijderen met een variantie van nul of bijna nul

Een functie die bijna nul variantie heeft, is een goede kandidaat voor verwijdering.

U kunt numerieke variantie onder uw eigen drempelwaarde handmatig detecteren:

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

Of u kunt het caret-pakket gebruiken om variaties in de buurt van nul te vinden. Een voordeel hier is dat het bijna nul variantie definieert, niet in de numerieke variantieberekening, maar eerder als een functie van zeldzaamheid:

"nearZeroVar diagnosticeert voorspellers die één unieke waarde hebben (dwz zijn nulvariantie voorspellers) of voorspellers die beide volgende kenmerken hebben: ze hebben zeer weinig unieke waarden ten opzichte van het aantal monsters en de verhouding van de frequentie van de meest voorkomende waarde naar de frequentie van de tweede meest voorkomende waarde is groot ... "

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

Functies verwijderen met een hoog aantal NA

Als een functie grotendeels gegevens mist, is het een goede kandidaat voor verwijdering:

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 dit geval willen we misschien NonD en Dream verwijderen, die elk ongeveer 20% missen (je cutoff kan variëren)

Nauw gecorreleerde functies verwijderen

Nauw gecorreleerde functies kunnen variantie toevoegen aan uw model, en het verwijderen van een van een gecorreleerd paar kan dat helpen verminderen. Er zijn veel manieren om correlatie te detecteren. Hier is er een:

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 

Ik wil kijken naar welke MPG zo sterk is gecorreleerd, en beslissen wat te houden en wat te gooien. Hetzelfde voor cyl en disp. Als alternatief moet ik misschien enkele sterk gecorreleerde functies combineren.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow