Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何使用插入符号获得随机森林模型的概率输出?_R_R Caret - Fatal编程技术网

R 如何使用插入符号获得随机森林模型的概率输出?

R 如何使用插入符号获得随机森林模型的概率输出?,r,r-caret,R,R Caret,我正在尝试使用插入符号为二元分类建立随机森林模型。我以前使用过randomForest源代码包来实现这一点,它工作得很好,但使用插入符号时,我的输出是二进制的,而不是概率。 使用type='prob',它将给出错误 在[.data.frame中出错(out,obslevers,drop=FALSE):选择了未定义的列 我对这两种语言都使用相同的语法(我希望如此) >fit = randomForest(x = a[,-1], y = as.factor(a[,1]),ntree=120)

我正在尝试使用插入符号为二元分类建立随机森林模型。我以前使用过randomForest源代码包来实现这一点,它工作得很好,但使用插入符号时,我的输出是二进制的,而不是概率。 使用type='prob',它将给出错误

[.data.frame
中出错(out,obslevers,drop=FALSE):选择了未定义的列

我对这两种语言都使用相同的语法(我希望如此)

>fit = randomForest(x = a[,-1], y = as.factor(a[,1]),ntree=120)
>head(predict(fit, newdata = test_data[,-c(1:2)], type = "prob")[,2])
         1          2          3          4          5          6 
0.04166667 0.03333333 0.55833333 0.80000000 0.87500000 0.04166667
现在,使用插入符号,我试图做同样的事情,但它不接受predict函数中的“type='prob'”,这给了我错误

>rf_model<-train(x = a[,-1], y = as.factor(a[,1]),method="rf",ntree=120)
>head(predict(rf_model, test_data[,-c(1:2)], type="prob"))
Error in `[.data.frame`(out, , obsLevels, drop = FALSE) : 
undefined columns selected
如何获得概率的输出

在此之后,我需要创建多个算法,我认为Caret会更同质化。我确信我在这里遗漏了一些东西,但作为Caret的新手,我不知道是什么。

尝试保持
type=“prob”
,这样预测将是:


prd=.5))

它可以与插入符号v6.0-41配合使用:

library(caret)
set.seed(1)
rf_model <- train(x = iris[,-5], y = as.factor(iris[,5]), method="rf", ntree=120)
tail(predict(rf_model, iris[, -5], type="prob"))

    setosa  versicolor virginica
145      0 0.000000000 1.0000000
146      0 0.000000000 1.0000000
147      0 0.008333333 0.9916667
148      0 0.000000000 1.0000000
149      0 0.000000000 1.0000000
150      0 0.025000000 0.9750000
库(插入符号)
种子(1)

rf_modelUPDATE:我通过找到了解决方案。显然,caret的序列不适合处理目标变量中的0和1二进制类值。将它们更改为任意字符串('r'和's')效果很好

> a$dv<-gsub('0','r',a$dv)
> a$dv<-gsub('1','s',a$dv)
> rf_model<-train(x = a[,-c(1:2)], y = as.factor(a[,2]),method="rf",ntree=120)
> head(predict(rf_model, test_data[,-c(1:2)], type="prob"))
      r           s
1 0.9750000 0.025000000
2 0.9916667 0.008333333
3 0.2583333 0.741666667
4 0.2833333 0.716666667
5 0.1583333 0.841666667
6 1.0000000 0.000000000 
>a$dv a$dv rf_模型头(预测(rf_模型,测试数据[,-c(1:2)],type=“prob”))
RS
1 0.9750000 0.025000000
2 0.9916667 0.008333333
3 0.2583333 0.741666667
4 0.2833333 0.716666667
5 0.1583333 0.841666667
6 1.0000000 0.000000000 

您可能很久以前就解决了这个问题……但在当前版本的插入符号中,2级因子的type=“prob”输出2列:概率为0,概率为1(或无论您的2个级别是什么)。

感谢您的回复!我不确定您所说的“尝试保持…”是什么意思,因为我已经尝试过了,但从R(在文章中提到)那里得到了错误。将预测保留在概率中,但在插入符号中使用时将其分解,因为插入符号适用于0-1个二进制变量。概率>=0.5的值为“1”,概率<0.5的值为“0”。“将预测保留在概率中”。但这正是我想在这里得到的输出!!我的全部目标是获得概率预测,而不是二进制(0,1)因为type=“prob”在predict命令中使用时返回错误。我不明白您想说的。不,我检查了所有内容。两者的列数和列名都相同。“-c(1:2)”在test_中,数据只是数据清理部分,我已经在数据集“a”中删除了该部分。但是,您使用isis数据的代码仍在工作。是的,它确实失败了,无论您作为类使用的数字是多少,我已经尝试了几种组合,并得到了相同的错误。
> a$dv<-gsub('0','r',a$dv)
> a$dv<-gsub('1','s',a$dv)
> rf_model<-train(x = a[,-c(1:2)], y = as.factor(a[,2]),method="rf",ntree=120)
> head(predict(rf_model, test_data[,-c(1:2)], type="prob"))
      r           s
1 0.9750000 0.025000000
2 0.9916667 0.008333333
3 0.2583333 0.741666667
4 0.2833333 0.716666667
5 0.1583333 0.841666667
6 1.0000000 0.000000000