在R中使用randomForest包,如何从分类模型中获得概率?
machine-learning
r
random-forest
8
0

TL; DR:

我可以在原始的 randomForest 调用中 标记一些东西, 从而避免重新运行 predict 函数以获得预测的分类概率,而不仅仅是可能的类别吗?

细节:

我正在使用randomForest包。

我有一个类似的模型:

model <- randomForest(x=out.data[train.rows, feature.cols],
                      y=out.data[train.rows, response.col],
                      xtest=out.data[test.rows, feature.cols],
                      ytest=out.data[test.rows, response.col],
                      importance= TRUE)

其中out.data是一个数据框架,其中feature.cols是数字特征和分类特征的混合,而response.colTRUE / FALSE二进制变量,我将其强制设置为factor以便randomForest模型将其正确地视为分类。

一切运行良好,变量model正确返回给我。但是,我似乎找不到传递给randomForest函数的标志或参数,以使modelTRUEFALSE概率返回给我。相反,我得到的只是预测值。也就是说,如果我查看model$predicted ,则会看到类似以下内容:

FALSE
FALSE
TRUE
TRUE
FALSE
.
.
.

相反,我希望看到如下内容:

   FALSE  TRUE
1  0.84   0.16
2  0.66   0.34
3  0.11   0.89
4  0.17   0.83
5  0.92   0.08
.   .      .
.   .      .
.   .      .

我可以达到上述要求,但为了做到这一点,我需要做一些类似的事情:

tmp <- predict(model, out.data[test.rows, feature.cols], "prob")

[ test.rows捕获模型测试期间使用的行号。这里没有显示详细信息,但是很简单,因为测试行ID已输出到model

然后一切正常。 问题在于模型很大,运行时间很长,甚至预测本身也要花费一些时间。由于预测应该是完全没有必要(我只是希望来计算测试数据集的ROC曲线,数据集应该已经计算),我希望能跳过此步骤。 我可以在原始的 randomForest 调用中 标记一些内容, 以避免必须重新运行 predict 函数吗?

参考资料:
Stack Overflow
收藏
评论
共 1 个回答
高赞 时间 活跃

model$predicted 不会被返回同样的事情predict() 。如果您想要TRUEFALSE类的概率,则必须运行predict()或传递x,y,xtest,ytest

randomForest(x,y,xtest=x,ytest=y), 

其中x=out.data[, feature.cols], y=out.data[, response.col]

model$predicted根据每个记录的model$votes哪个值较大的类返回该类。 votes ,如@joran指出的是OOB从随机森林的比例(包装袋)的“票”,仅当OOB样品中选择出的记录计数的一票。另一方面, predict()根据所有树的投票返回每个类别的真实概率。

randomForest(x,y,xtest=x,ytest=y)使用randomForest(x,y,xtest=x,ytest=y)功能与传递公式或仅传递randomForest(x,y)时的功能有所不同。 randomForest(x,y,xtest=x,ytest=y)将返回每个类别的概率,这听起来可能有点怪异,但可以在model$test$votes下找到,并且在model$test$predicted下可以找到预测的类别,它只是根据model$test$votes具有较大值的类来选择类。此外,当使用randomForest(x,y,xtest=x,ytest=y)model$predictedmodel$votes具有与上述相同的定义。

最后,仅需注意,如果使用randomForest(x,y,xtest=x,ytest=y) ,则为了使用predict()函数,keep.forest标志应设置为TRUE。

model=randomForest(x,y,xtest=x,ytest=y,keep.forest=TRUE). 
prob=predict(model,x,type="prob")

prob 等同于model$test$votes ,因为测试数据输入都是x

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号