Szukaj…


Usuwanie funkcji o wariancji zerowej lub prawie zerowej

Funkcja, która ma prawie zerową wariancję, jest dobrym kandydatem do usunięcia.

Możesz ręcznie wykryć wariancję liczbową poniżej własnego progu:

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

Możesz też użyć pakietu karetki, aby znaleźć wariancję prawie zerową. Zaletą jest tutaj to, że definiuje wariancję bliską zera nie w numerycznym obliczaniu wariancji, ale raczej jako funkcję rzadkości:

„nearZeroVar diagnozuje predyktory, które mają jedną unikalną wartość (tj. są predyktorami zerowej wariancji) lub predyktory, które mają obie z następujących cech: mają bardzo niewiele unikatowych wartości w stosunku do liczby próbek i stosunku częstotliwości najbardziej powszechnej wartości do częstotliwości drugiej najczęściej spotykanej wartości jest duża ... ”

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

Usuwanie funkcji z dużą liczbą NA

Jeśli funkcja w dużej mierze nie ma danych, jest dobrym kandydatem do usunięcia:

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 

W takim przypadku możemy chcieć usunąć NonD i Dream, z których każda ma około 20% brakujących wartości (Twoja granica może się różnić)

Usuwanie ściśle skorelowanych funkcji

Ściśle skorelowane funkcje mogą dodać wariancję do twojego modelu, a usunięcie jednej ze skorelowanych par może pomóc to zmniejszyć. Istnieje wiele sposobów wykrywania korelacji. Tu jest jeden:

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 

Chcę przyjrzeć się temu, z czym MPG jest tak ściśle skorelowane, i zdecydować, co zachować, a co podrzucić. To samo dotyczy cyl i disp. Ewentualnie może być konieczne połączenie niektórych silnie skorelowanych funkcji.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow