1

我正在用ranger包装和相同的种子安装两个模型。第一个预测类,第二个返回概率矩阵,我的目标是达到相同的结果,但我在 4 个寄存器上有所不同。有人知道解决方案。我正在使用每个班级的最大概率。切入点应该是什么?

library(ranger)
library(caret)

## fit model 1
mod <- ranger(formula = Species ~., data = iris, seed = 2020)
res1 <- predict(object = mod, data = iris[,-5])$predictions

## fit model 2
mod2 <- ranger(formula = Species ~., data = iris, probability = TRUE, seed = 2020)
res2 <- factor(ifelse(apply(predict(object = mod2, data = iris[,-5])$predictions, 1, which.max) == 1,"setosa",
       ifelse(apply(predict(object = mod2, data = iris[,-5])$predictions, 1, which.max) == 2, "versicolor", "virginica")),
       levels = c("setosa","versicolor","virginica"))

head(data.frame(res1, res2))
    res1   res2
1 setosa setosa
2 setosa setosa
3 setosa setosa
4 setosa setosa
5 setosa setosa
6 setosa setosa

all.equal(res1, res2)
[1] "4 string mismatches"

我的预期输出

all.equal(res1, res2)
[1] TRUE
4

2 回答 2

1

非常有趣的问题:我是ranger这个结果的用户并且不知道。

正如@MrFlick 在对您的回答的评论中所述,您正在使用两种不同的方法。您可以确认它访问andtreetype的元素:modmod2

mod$treetype
"Classification"

mod2$treetype
"Probability estimation"
于 2020-07-09T07:52:12.497 回答
0

没有切点可以保证您的两个模型的结果相同。概率森林返回每棵树的二元投票平均值的分类森林不同。相反,每棵树都返回一个连续概率估计,然后对这些连续估计进行平均以获得整体概率预测。请参阅ranger文档:

预测是每个样本的类别概率。与其他实现相比,每棵树都会返回一个概率估计,并且这些估计是森林概率估计的平均值。

不同的是,在分类森林中,每棵树的每个节点都是二元的,而在概率森林中,每个节点都是连续的。

于 2021-08-09T21:53:26.873 回答