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
Author: smci, 2011-12-03

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:

  1. użyj innego narzędzia (rpart ładnie obsługuje brakujące wartości.)
  2. 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.

 103
Author: joran,
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.

 3
Author: Qbik,
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