2015-10-26 16 views
9

Tôi đang thử gói ranger R để tăng tốc độ thực hiện rất nhiều tính toán randomForest. Tôi đã kiểm tra các dự đoán tôi nhận được từ nó, và nhận thấy một cái gì đó buồn cười, trong đó dự đoán được thực hiện hoàn toàn tắt.Dự đoán xấu từ kiểm lâm so với randomForest

Dưới đây là ví dụ có thể tái sản xuất so sánh randomForestranger.

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 

Như bạn có thể thấy, bảng tổng thể nhầm lẫn có thể so sánh được, nhưng dự đoán hoàn toàn tắt cho ranger. Có ai khác gặp phải điều này trước đây không?

+0

Có lẽ một lỗi. Cố gắng để mở một sự cố trên github repo, ở đây: https://github.com/mnwright/ranger/issues – YCR

+0

Cảm ơn, đã gửi một vấn đề – rmflight

+1

Hóa ra đó là một lỗi về việc liệu bạn có sử dụng giao diện 'công thức' hay không giao diện thay thế mà tôi đang sử dụng ở trên. Giao diện 'công thức' đưa ra các dự đoán chính xác. – rmflight

Trả lời

13

Đây là lỗi. Nó được sửa trong phiên bản GitHub (xem https://github.com/mnwright/ranger/issues/6) nhưng các thay đổi chưa có trên CRAN. Tôi sẽ sớm gửi một phiên bản mới cho CRAN. Trong khi đó, hãy cài đặt phiên bản GitHub:

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

Cập nhật: Fix là trên cran kể từ ngày 10

Các vấn đề liên quan