Suche…


Entfernen von Features mit einer Varianz von null oder nahezu null

Ein Feature mit einer Varianz nahe null ist ein guter Kandidat für die Entfernung.

Sie können die numerische Abweichung unterhalb Ihrer eigenen Schwelle manuell ermitteln:

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

Oder Sie können das Caret-Paket verwenden, um eine Varianz nahe Null zu finden. Ein Vorteil hierbei ist, dass die Varianz nahe Null nicht in der numerischen Berechnung der Varianz definiert wird, sondern eher als Funktion der Seltenheit:

NearZeroVar diagnostiziert Prädiktoren mit einem eindeutigen Wert (dh Null-Varianz-Prädiktoren) oder Prädiktoren mit beiden folgenden Eigenschaften: Sie haben sehr wenige eindeutige Werte im Verhältnis zur Anzahl der Abtastwerte und dem Verhältnis der Häufigkeit des häufigsten Werts zur Häufigkeit des zweithäufigsten Wertes ist groß ... "

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

Entfernen von Features mit hoher NA-Anzahl

Wenn für ein Feature weitgehend Daten fehlen, ist es ein guter Kandidat zum Entfernen:

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 diesem Fall möchten wir vielleicht NonD und Dream entfernen, bei denen jeweils etwa 20% fehlende Werte vorliegen (Ihr Cutoff kann variieren).

Entfernen von stark korrelierten Features

Durch eng korrelierte Features kann Ihr Modell mehr Varianz erhalten. Durch das Entfernen eines korrelierten Paares kann dies verringert werden. Es gibt viele Möglichkeiten, Korrelationen zu erkennen. Hier ist eins:

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 

Ich möchte sehen, was mit MPG so stark korreliert ist, und entscheiden, was ich behalten und was ich werfen soll. Gleiches für cyl und disp. Alternativ muss ich möglicherweise einige stark korrelierte Funktionen kombinieren.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow