多类kNN中的r-ROC



我试图在多类knn模型和数据集上运行一些ROC分析

到目前为止,我已经有了kNN模型的代码。它运行良好
X_train_new是一个包含131个数值变量(列(和7210个观测值的数据集
Y_train是作为因素的结果变量。它是一个只有1列(活动(和7210个观测值(有6个可能的因素(的数据集

ctrl <- trainControl(method  = "cv",
number  = 10)
model2 <-    train(X_train_new,
Y_train$activity,
method     = "knn",
tuneGrid   = expand.grid(k = 5),
trControl  = ctrl,
metric     = "Accuracy"
)

X_test_new是一个包含131个数值变量(列(和3089个观测值的数据集
Y_test是作为因素的结果变量。它是一个只有1列和3089个观测值的数据集(有6个可能的因素(

我运行预测函数

knnPredict_test <- predict(model2 , newdata = X_test_new )

我想对每个班和所有班做一些ROC分析。我正在尝试

a = multiclass.roc ( Y_test$activity, knnPredict_test )

knnPredict_test是一个具有预测类的向量:

knnPredict_test <- predict(model2 ,newdata = X_test_new )
> length(knnPredict_test)
[1] 3089
> glimpse(knnPredict_test)
Factor w/ 6 levels "laying","sitting",..: 2 1 5 1 3 2 4 5 3 2 ...

这是我获取时的错误

Error in roc.default(response, predictor, levels = X, percent = percent,  :   
Predictor must be numeric or ordered.

要获得ROC,需要一个数字预测。但是,默认情况下,predict将为您提供预测的类。使用type = "prob"

这里是一个具有相同错误的可复制示例。

library(caret)
knnFit <- train(
Species ~ .,
data = iris,
method = "knn"
)
predictions_bad <- predict(knnFit)
pROC::multiclass.roc(iris$Species, predictions_bad)
#> Error in roc.default(response, predictor, levels = X, percent = percent,  : 
#>   Predictor must be numeric or ordered.

使用type = "prob"修复错误。

predictions_good <- predict(knnFit, type = "prob")
pROC::multiclass.roc(iris$Species, predictions_good)
#> Call:
#> multiclass.roc.default(response = iris$Species, predictor = predictions_good)
#> 
#> Data: multivariate predictor predictions_good with 3 levels of iris$Species: setosa, versicolor, virginica.
#> Multi-class area under the curve: 0.9981

最新更新