Jak zbudować losowe lasy w R z brakującymi wartościami (NA)?
Chciałbym dopasować przypadkowy model lasu, ale kiedy wywołuję
library(randomForest)
cars$speed[1] <- NA # to simulate missing value
model <- randomForest(speed ~., data=cars)
Otrzymuję następujący błąd
Error in na.fail.default(list(speed = c(NA, 4, 7, 7, 8, 9, 10, 10, 10, :
missing values in object
2 answers
Moją początkową reakcją na to pytanie było to, że nie wykazywało ono dużego wysiłku badawczego, ponieważ "wszyscy" wiedzą, że losowe lasy nie radzą sobie z brakującymi wartościami w predyktorach. Ale po sprawdzeniu ?randomForest
muszę przyznać, że mogłoby to być o wiele bardziej jednoznaczne.
(chociaż, Breiman PDF dołączony do dokumentacji wyraźnie mówi, że brakujące wartości po prostu nie są obsługiwane w ogóle.)
Jedyną oczywistą wskazówką w oficjalnej dokumentacji, którą widziałem, było domyślną wartością parametru na.action
jest na.fail
, co może być zbyt tajemnicze dla nowych użytkowników.
W każdym przypadku, jeśli Twoje predyktory mają brakujące wartości, masz (zasadniczo) dwie opcje:
- użyj innego narzędzia (
rpart
ładnie obsługuje brakujące wartości.) - przypisać brakujące wartości
Nic dziwnego, że pakiet randomForest
ma do tego funkcję, rfImpute
. Dokumentacja w ?rfImpute
zawiera podstawowy przykład jej użycia.
If only mała liczba przypadków ma brakujące wartości, możesz również spróbować ustawić na.action = na.omit
, aby po prostu porzucić te przypadki.
I oczywiście, ta odpowiedź jest trochę domysłem, że Twoim problemem jest po prostu brakujące wartości.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-04 02:10:54
Jeśli istnieje możliwość, że brakujące wartości mają charakter informacyjny, możesz wprowadzić brakujące wartości i dodać dodatkowe zmienne binarne (z new.vars<-is.na(your_dataset)
) i sprawdzić, czy obniża to błąd, jeśli new.var
jest zbyt duży zestaw, aby dodać go do your_dataset
, możesz użyć go samodzielnie, wybrać znaczące zmienne z varImpPlot
i dodać je do your_dataset
, Możesz również spróbować dodać pojedynczą zmienną do your_dataset
, która zlicza liczbę NA
' s new.var <- rowSums(new.vars)
Nie jest to odpowiedź off-topick, jeśli brakujące zmienne mają charakter informacyjny dla nich może skorygować wzrost błędu modelu z powodu nieprzewidywalnej procedury imputacji.
Brakujące wartości są pouczające, a następnie powstają z powodu przypadkowych przyczyn, szczególnie powszechnych w Ustawieniach eksperymentów społecznych.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-19 13:01:16