R Language
Funktionsval i R - Ta bort extrema funktioner
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.