Ошибка ROCR: неверный формат предсказаний

Получив свои прогнозы от glmnet, я пытаюсь использовать функцию «прогнозирования» в пакете «ROCR», чтобы получить tpr, fpr и т. д., но получаю эту ошибку:

pred <- prediction(pred_glmnet_s5_3class, y)
Error in prediction(pred_glmnet_s5_3class, y) : 
Format of predictions is invalid.

Я вывел как прогнозы, так и метки glmnet, и они выглядят так, как будто они в одинаковом формате, и поэтому я не понимаю, что здесь недопустимо.

Код выглядит следующим образом, и входные данные можно найти здесь input. Это небольшой набор данных, и его запуск не займет много времени.

library("ROCR")
library("caret")
sensor6data_s5_3class <- read.csv("/home/sensei/clustering /sensor6data_f21_s5_with3Labels.csv")
sensor6data_s5_3class <- within(sensor6data_s5_3class, Class <- as.factor(Class))
sensor6data_s5_3class$Class2 <- relevel(sensor6data_s5_3class$Class,ref="1")

set.seed("4321")
inTrain_s5_3class <- createDataPartition(y = sensor6data_s5_3class$Class, p = .75, list = FALSE)
training_s5_3class <- sensor6data_s5_3class[inTrain_s5_3class,]
testing_s5_3class <- sensor6data_s5_3class[-inTrain_s5_3class,] 
y <- testing_s5_3class[,22]

ctrl_s5_3class <- trainControl(method = "repeatedcv", number = 10, repeats = 10 , savePredictions = TRUE)
model_train_glmnet_s5_3class <- train(Class2 ~ ZCR + Energy + SpectralC + SpectralS + SpectralE + SpectralF + SpectralR + MFCC1 + MFCC2 + MFCC3 + MFCC4 + MFCC5 + MFCC6 + MFCC7 + MFCC8 + MFCC9 + MFCC10 + MFCC11 + MFCC12 + MFCC13, data = training_s5_3class, method="glmnet", trControl = ctrl_s5_3class)
pred_glmnet_s5_3class = predict(model_train_glmnet_s5_3class, newdata=testing_s5_3class, s = "model_train_glmnet_s5_3class$finalModel$lambdaOpt")

pred <- prediction(pred_glmnet_s5_3class, y)

Ценю твою помощь!


person tacqy2    schedule 24.11.2016    source источник


Ответы (1)


Основная проблема заключается в том, что prediction принимает «вектор, матрицу, список или фрейм данных» как в качестве аргументов predictions, так и labels. Несмотря на то, что pred_glmnet_s5_3class и y выглядят как векторы, они ими не являются, например.

sapply(c(is.vector, is.matrix, is.list, is.data.frame), do.call, list(y))
# [1] FALSE FALSE FALSE FALSE

На самом деле они являются факторами (что видно, например, из class(y)), а ?is.vector информирует нас о том, что

Обратите внимание, что факторы не являются векторами; ‘is.vector’ возвращает ‘FALSE’, а ‘as.vector’ преобразует фактор в вектор символов для ‘mode = «any»’.

Мы можем преобразовать оба объекта в numeric:

pred <- prediction(as.numeric(pred_glmnet_s5_3class), as.numeric(y))
#   Number of classes is not equal to 2.
# ROCR currently supports only evaluation of binary classification tasks.

К сожалению, это создает другую проблему, которая выходит за рамки этого вопроса.

person Weihuang Wong    schedule 24.11.2016
comment
Большое спасибо за подробное объяснение. С вашей помощью мне удалось использовать ROCR для 2 класса и попытаться выяснить, как обойти проблему ›2 класса. - person tacqy2; 24.11.2016