2015-10-26 3 views
9

Ich probiere das ranger R-Paket, um eine Menge von randomForest Berechnungen zu beschleunigen. Ich untersuchte die Vorhersagen, die ich davon zurückbekam, und bemerkte, dass etwas Komisches darin lag, dass die gemachten Voraussagen völlig fehlten.Schlechte Vorhersagen von Ranger im Vergleich zu RandomForest

Unten ist ein reproduzierbares Beispiel, das randomForest und ranger vergleicht.

data(iris) 
library(randomForest) 


iris_spec <- as.factor(iris$Species) 
iris_dat <- as.matrix(iris[, !(names(iris) %in% "Species")]) 

set.seed(1234) 

test_index <- sample(nrow(iris), 10) 
train_index <- seq(1, nrow(iris))[-test_index] 


iris_train <- randomForest(x = iris_dat[train_index, ], y = iris_spec[train_index], keep.forest = TRUE) 
iris_pred <- predict(iris_train, iris_dat[test_index, ]) 

iris_train$confusion 


##   setosa versicolor virginica class.error 
## setosa   47   0   0 0.00000000 
## versicolor  0   42   3 0.06666667 
## virginica  0   4  44 0.08333333 


cbind(as.character(iris_pred), as.character(iris_spec[test_index])) 
##  [,1]   [,2]   
## [1,] "setosa"  "setosa"  
## [2,] "versicolor" "versicolor" 
## [3,] "versicolor" "versicolor" 
## [4,] "versicolor" "versicolor" 
## [5,] "virginica" "virginica" 
## [6,] "virginica" "virginica" 
## [7,] "setosa"  "setosa"  
## [8,] "setosa"  "setosa"  
## [9,] "versicolor" "versicolor" 
## [10,] "versicolor" "versicolor" 


library(ranger) 


iris_train2 <- ranger(data = iris[train_index, ], dependent.variable.name = "Species", write.forest = TRUE) 
iris_pred2 <- predict(iris_train2, iris[test_index, ]) 

iris_train2$classification.table 


##    true 
## predicted setosa versicolor virginica 
## setosa   47   0   0 
## versicolor  0   41   3 
## virginica  0   4  45 


cbind(as.character(iris_pred2$predictions), as.character(iris_spec[test_index])) 

##  [,1]   [,2]   
## [1,] "versicolor" "setosa"  
## [2,] "virginica" "versicolor" 
## [3,] "virginica" "versicolor" 
## [4,] "virginica" "versicolor" 
## [5,] "virginica" "virginica" 
## [6,] "virginica" "virginica" 
## [7,] "versicolor" "setosa"  
## [8,] "versicolor" "setosa"  
## [9,] "virginica" "versicolor" 
## [10,] "virginica" "versicolor" 


sessionInfo() 

## R version 3.2.2 (2015-08-14) 
## Platform: x86_64-pc-linux-gnu (64-bit) 
## Running under: Fedora 22 (Twenty Two) 
## 
## locale: 
## [1] LC_CTYPE=en_US.UTF-8  LC_NUMERIC=C    
## [3] LC_TIME=en_US.UTF-8  LC_COLLATE=en_US.UTF-8  
## [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 
## [7] LC_PAPER=en_US.UTF-8  LC_NAME=C     
## [9] LC_ADDRESS=C    LC_TELEPHONE=C    
## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C  
## 
## attached base packages: 
## [1] stats  graphics grDevices utils  datasets methods base  
## 
## other attached packages: 
## [1] ranger_0.2.7  randomForest_4.6-12 
## 
## loaded via a namespace (and not attached): 
## [1] magrittr_1.5 formatR_1.2.1 tools_3.2.2 Rcpp_0.12.1 stringi_0.5-5 
## [6] knitr_1.11 stringr_1.0.0 evaluate_0.8 

Wie Sie sehen können, die allgemeine Verwirrung Tabellen aussehen vergleichbar, aber die Prognosen sind völlig aus für ranger. Ist jemand anderen schon einmal begegnet?

+0

Vielleicht ein Fehler. Versuchen Sie, einen Vorfall auf dem Repo Github zu öffnen, hier: https://github.com/mnwright/ranger/issues – YCR

+0

Danke, ein Problem – rmflight

+1

Es stellt sich heraus, es ist ein Fehler, ob Sie die 'Formel' Schnittstelle oder die verwenden alternative Schnittstelle, die ich oben verwende. Die 'Formel'-Schnittstelle liefert korrekte Vorhersagen. – rmflight

Antwort

13

Dies war ein Fehler. Es ist in der GitHub-Version behoben (siehe https://github.com/mnwright/ranger/issues/6), aber die Änderungen sind noch nicht auf CRAN. Ich werde bald eine neue Version bei CRAN einreichen. In der Zwischenzeit, installieren Sie bitte die GitHub Version:

devtools::install_github("mnwright/ranger/ranger-r-package/ranger") 

Update: Fix ist auf CRAN seit dem 10. November

Verwandte Themen