与randomForest相比,ranger的预测表现不佳。

13

我正在尝试使用ranger R包来加速进行大量randomForest计算。我正在检查从中返回的预测结果,注意到有些奇怪的情况,即所做的预测完全错误。

下面是一个可重现的示例,比较了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

正如您所看到的,总混淆矩阵看起来是相似的,但对于ranger的预测完全不准确。有其他人遇到过这种情况吗?


可能是一个 bug。请尝试在 GitHub 仓库上开一个事件,链接在此:https://github.com/mnwright/ranger/issues - YCR
谢谢,已经提交了一个问题。 - rmflight
2
结果证明,无论您使用上面所使用的“替代接口”还是“公式”接口,都存在一个错误。 “公式”接口可以提供正确的预测。 - rmflight
1个回答

16

这是一个错误,已在GitHub版本中修复(请参见https://github.com/mnwright/ranger/issues/6),但更改尚未反映在CRAN上。 我很快会向CRAN提交新版本。 与此同时,请安装GitHub版本:

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

更新:修复已于11月10日发布在CRAN上。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接