2016-11-24 8 views
1

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

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) 

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

ответ

7

Основная проблема заключается в том, что 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 сообщает нам

Note that factors are not vectors; ‘is.vector’ returns ‘FALSE’ and ‘as.vector’ converts a factor to a character vector for ‘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. 

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

+0

Большое спасибо за подробное объяснение. Я смог использовать ROCR для 2-го класса с вашей помощью и попытаться выяснить, как обойти проблему> 2 класса. – tacqy2

+0

Счастливые помочь. Если ответ разрешил ваш вопрос, отметьте его как принятый. –

 Смежные вопросы

  • Нет связанных вопросов^_^