roc.default 中的错误预测器必须是数字或有序的
Error in roc.default Predictor must be numeric or ordered
我正在尝试获取我在测试数据集上获得的模型的 ROC 曲线。
但出现错误:
Setting levels: control = negative, case = positive
Error in roc.default(testing_data$tested, predict_rf) :
Predictor must be numeric or ordered.
我已经按照以下答案进行操作,但没有成功。
SVM in R: "Predictor must be numeric or ordered."
我几个月前在我的 posting 上有一个类似的例子,其他人对此 link:
但是,我以 'stupidWolf' 为例,post 这里是为了可重复性,因为我之前对他的回答有疑问。然而,在尝试获取我的 ROC 曲线时遇到了另一个问题。
# choose a sample
idx = sample(nrow(iris),100)
data = iris
data$Petal.Length[sample(nrow(data),10)] = NA
data$tested = factor(ifelse(data$Species=="versicolor","positive","negative"))
data = data[,-5]
training_data = data[idx,]
testing_data= data[-idx,]
# train data
rf <- caret::train(tested ~., data = training_data,
method = "rf",
trControl = ctrlInside,
metric = "ROC",
na.action = na.exclude)
# test the model on test data
colnames(evalResult.rf)[max.col(evalResult.rf)]
testing_data = testing_data[complete.cases(testing_data),]
evalResult.rf <- predict(rf, testing_data, type = "prob")
predict_rf <- factor(colnames(evalResult.rf)[max.col(evalResult.rf)])
cm_rf_forest <- confusionMatrix(predict_rf, testing_data$tested, "positive")
# get the roc
library(pROC)
rfROCt <- pROC::roc(testing_data$tested, predict_rf)
并得到错误:
Setting levels: control = negative, case = positive
Error in roc.default(testing_data$tested, predict_rf) :
Predictor must be numeric or ordered.
第二个参数应该是预测的概率,所以如果你看这个例子:
evalResult.rf <- predict(rf, testing_data, type = "prob")
head(evalResult.rf)
negative positive
2 0.968 0.032
8 1.000 0.000
9 0.996 0.004
13 0.990 0.010
第二列是阳性的概率class。
所以你这样用
pROC::roc(testing_data$tested,evalResult.rf[,2])
Setting levels: control = negative, case = positive
Setting direction: controls < cases
Call:
roc.default(response = testing_data$tested, predictor = evalResult.rf[, 2])
Data: evalResult.rf[, 2] in 24 controls (testing_data$tested negative) < 22 cases (testing_data$tested positive).
Area under the curve: 0.9924
我正在尝试获取我在测试数据集上获得的模型的 ROC 曲线。
但出现错误:
Setting levels: control = negative, case = positive
Error in roc.default(testing_data$tested, predict_rf) :
Predictor must be numeric or ordered.
我已经按照以下答案进行操作,但没有成功。
SVM in R: "Predictor must be numeric or ordered."
我几个月前在我的 posting 上有一个类似的例子,其他人对此 link:
但是,我以 'stupidWolf' 为例,post 这里是为了可重复性,因为我之前对他的回答有疑问。然而,在尝试获取我的 ROC 曲线时遇到了另一个问题。
# choose a sample
idx = sample(nrow(iris),100)
data = iris
data$Petal.Length[sample(nrow(data),10)] = NA
data$tested = factor(ifelse(data$Species=="versicolor","positive","negative"))
data = data[,-5]
training_data = data[idx,]
testing_data= data[-idx,]
# train data
rf <- caret::train(tested ~., data = training_data,
method = "rf",
trControl = ctrlInside,
metric = "ROC",
na.action = na.exclude)
# test the model on test data
colnames(evalResult.rf)[max.col(evalResult.rf)]
testing_data = testing_data[complete.cases(testing_data),]
evalResult.rf <- predict(rf, testing_data, type = "prob")
predict_rf <- factor(colnames(evalResult.rf)[max.col(evalResult.rf)])
cm_rf_forest <- confusionMatrix(predict_rf, testing_data$tested, "positive")
# get the roc
library(pROC)
rfROCt <- pROC::roc(testing_data$tested, predict_rf)
并得到错误:
Setting levels: control = negative, case = positive
Error in roc.default(testing_data$tested, predict_rf) :
Predictor must be numeric or ordered.
第二个参数应该是预测的概率,所以如果你看这个例子:
evalResult.rf <- predict(rf, testing_data, type = "prob")
head(evalResult.rf)
negative positive
2 0.968 0.032
8 1.000 0.000
9 0.996 0.004
13 0.990 0.010
第二列是阳性的概率class。
所以你这样用
pROC::roc(testing_data$tested,evalResult.rf[,2])
Setting levels: control = negative, case = positive
Setting direction: controls < cases
Call:
roc.default(response = testing_data$tested, predictor = evalResult.rf[, 2])
Data: evalResult.rf[, 2] in 24 controls (testing_data$tested negative) < 22 cases (testing_data$tested positive).
Area under the curve: 0.9924