Mik*_*son 19 r machine-learning predict random-forest
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)
Run Code Online (Sandbox Code Playgroud)
out.data
数据框在哪里,具有feature.cols
数字和分类特征的混合,response.col
而是一个TRUE
/ FALSE
二进制变量,我被强制插入,factor
以便randomForest
模型将其正确地视为分类.
一切运行良好,变量model
正确返回给我.但是,我似乎无法找到传递给randomForest
函数的标志或参数,因此model
返回给我的概率为TRUE
或FALSE
.相反,我得到的只是预测值.也就是说,如果我看一下model$predicted
,我会看到类似的东西:
FALSE
FALSE
TRUE
TRUE
FALSE
.
.
.
Run Code Online (Sandbox Code Playgroud)
相反,我希望看到类似的东西:
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
. . .
. . .
. . .
Run Code Online (Sandbox Code Playgroud)
我可以得到上述内容,但为了做到这一点,我需要做以下事情:
tmp <- predict(model, out.data[test.rows, feature.cols], "prob")
Run Code Online (Sandbox Code Playgroud)
[ test.rows
捕获模型测试期间使用的行号.此处未显示详细信息,但由于测试行ID已输出,因此很简单model
.
一切正常.该问题是,该模型大,需要很长的时间来运行,甚至预测本身需要一段时间.由于预测应该完全没必要(我只是想计算测试数据集上的ROC曲线,应该已经计算过的数据集),我希望跳过这一步. 我可以在原始 randomForest
调用中 标记某些内容以避免重新运行该predict
函数吗?
Osc*_*car 25
model$predicted
是不是通过返回的同样的事情predict()
.如果你想要TRUE
或FALSE
类的概率,那么你必须运行predict()
,或传递x,y,xtest,ytest
喜欢
randomForest(x,y,xtest=x,ytest=y),
Run Code Online (Sandbox Code Playgroud)
哪里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)
,如上面给出的示例所示.randomForest(x,y,xtest=x,ytest=y)
将返回每个类的概率,这可能听起来有点奇怪,但它被发现model$test$votes
,并且预测类下model$test$predicted
,它只是根据哪个类具有更大的值来选择类model$test$votes
.此外,使用时randomForest(x,y,xtest=x,ytest=y)
,model$predicted
和model$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")
Run Code Online (Sandbox Code Playgroud)
prob
将等同于model$test$votes
因为测试数据输入都是x
.