R Language
Funktionsauswahl in R - Entfernen überflüssiger Funktionen
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.