Sök…


Ta bort funktioner med noll eller nästan noll-varians

En funktion som har nästan nollvarians är en bra kandidat för borttagning.

Du kan manuellt upptäcka numerisk varians under din egen tröskel:

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

Du kan också använda caret-paketet för att hitta nästan nollvarians. En fördel här är att definieras nära nollvarians inte i den numeriska variansberäkningen utan snarare som en funktion av sällsynthet:

"nearZeroVar diagnostiserar prediktorer som har ett unikt värde (dvs. är nollvariansprediktorer) eller prediktorer som har båda följande egenskaper: de har mycket få unika värden i förhållande till antalet sampel och förhållandet mellan frekvensen för det vanligaste värdet till frekvensen för det näst vanligaste värdet är stort ... "

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

Ta bort funktioner med ett stort antal NA

Om en funktion till stor del saknar data är det en bra kandidat för borttagning:

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 

I det här fallet kanske vi vill ta bort NonD och Dream, som var och en har cirka 20% saknade värden (din avbrott kan variera)

Ta bort nära korrelerade funktioner

Nära korrelerade funktioner kan lägga till varians till din modell, och att ta bort ett av ett korrelerat par kan hjälpa till att minska det. Det finns många sätt att upptäcka korrelation. Här är en:

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 

Jag vill titta på vad MPG är så starkt korrelerat och bestämma vad jag ska behålla och vad jag ska kasta. Samma för cyl och disp. Alternativt kan jag behöva kombinera några starkt korrelerade funktioner.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow