我正在尝试从下面创建一个ROC曲线。我收到一个错误,指出预测错误(bc_rf_predict_prob,bc_test $ Class): 预测和标签的交叉验证运行次数必须相等。
library(mlbench) #has the Breast Cancer dataset in it
library(caret)
data(BreastCancer) #two class model
bc_changed<-BreastCancer[2:11] #removes variables not to be used
#Create train and test/holdout samples (works fine)
set.seed(59)
bc_rand <- bc_changed[order(runif(699)), ] #699 observations
bc_rand <- sample(1:699, 499)
bc_train <- bc_changed[ bc_rand,]
bc_test <- bc_changed[-bc_rand,]
#random forest decision tree (works fine)
library(caret)
library(randomForest)
set.seed(59)
bc_rf <- randomForest(Class ~.,data=bc_train, ntree=500,na.action = na.omit, importance=TRUE)
#ROC
library(ROCR)
actual <- bc_test$Class
bc_rf_predict_prob<-predict(bc_rf, type="prob", bc_test)
bc.pred = prediction(bc_rf_predict_prob,bc_test$Class) #not work- error
预测中的错误 - 错误(bc_rf_predict_prob,bc_test $ Class): 预测和标签的交叉验证运行次数必须相等。
我认为这是因为我这样做的事实:
bc_rf_predict_prob<-predict(bc_rf, type="prob", bc_test)
我得到一个矩阵作为结果,有两列Benign及其概率列表和第二列Malignant及其概率列表。我的逻辑告诉我,我应该只有一个概率向量。
答案 0 :(得分:1)
根据page 9 of the ROCR Library documentation,prediction
函数有两个必需的输入,predictions
和labels
,它们必须具有相同的尺寸。
对于矩阵或数据框,所有交叉验证运行必须具有相同的长度。
自str(bc_rf_predict_prob) > [1] matrix [1:200, 1:2]
起,这意味着str(bc_test$Class)
应具有匹配的维度。
听起来你只想要bc_rf_predict_prob
的第一列向量,但是如果不查看数据我就无法确定。