Ошибка с предсказанием - пакет ROCR (с использованием вероятностей)
Я использовал функцию "rfe" с svm, чтобы создать модель с ограниченными возможностями. Затем я использую "прогнозирование" на тестовых данных, которые выводят метки классов (двоичные), 0 вероятностей классов, 1 вероятностей классов. Затем я попытался использовать функцию прогнозирования в пакете ROCR для прогнозируемых вероятностей и истинных меток классов, но получил следующую ошибку и не уверен, почему, поскольку длины двух массивов равны:
> pred_svm <- prediction(pred_svm_2class[,2], as.numeric(as.character(y)))
Error in prediction(pred_svm_2class[, 2], as.numeric(as.character(y))) :
Number of predictions in each run must be equal to the number of labels for each run.
У меня есть код ниже, и ввод здесь, нажмите меня. Это небольшой набор данных с двоичной классификацией, поэтому код работает быстро.
library("caret")
library("ROCR")
sensor6data_2class <- read.csv("/home/sensei/clustering/svm_2labels.csv")
sensor6data_2class <- within(sensor6data_2class, Class <- as.factor(Class))
set.seed("1298356")
inTrain_svm_2class <- createDataPartition(y = sensor6data_2class$Class, p = .75, list = FALSE)
training_svm_2class <- sensor6data_2class[inTrain_svm_2class,]
testing_svm_2class <- sensor6data_2class[-inTrain_svm_2class,]
trainX <- training_svm_2class[,1:20]
y <- training_svm_2class[,21]
ctrl_svm_2class <- rfeControl(functions = rfFuncs , method = "repeatedcv", number = 5, repeats = 2, allowParallel = TRUE)
model_train_svm_2class <- rfe(x = trainX, y = y, data = training_svm_2class, sizes = c(1:20), metric = "Accuracy", rfeControl = ctrl_svm_2class, method="svmRadial")
pred_svm_2class = predict(model_train_svm_2class, newdata=testing_svm_2class)
pred_svm <- prediction(pred_svm_2class[,2], y)
Спасибо и ценю вашу помощь.
1 ответ
Это потому что в линии
pred_svm <- prediction(pred_svm_2class[,2], y)
pred_svm_2class[,2] - это прогнозы на тестовых данных, а y - метки для обучающих данных. Просто сгенерируйте метки для теста в отдельной переменной, как эта
y_test <- testing_svm_2class[,21]
И теперь, если вы делаете
pred_svm <- prediction(pred_svm_2class[,2], y_test)
Там не будет ошибки. Полный код ниже -
# install.packages("caret")
# install.packages("ROCR")
# install.packages("e1071")
# install.packages("randomForest")
library("caret")
library("ROCR")
sensor6data_2class <- read.csv("svm_2labels.csv")
sensor6data_2class <- within(sensor6data_2class, Class <- as.factor(Class))
set.seed("1298356")
inTrain_svm_2class <- createDataPartition(y = sensor6data_2class$Class, p = .75, list = FALSE)
training_svm_2class <- sensor6data_2class[inTrain_svm_2class,]
testing_svm_2class <- sensor6data_2class[-inTrain_svm_2class,]
trainX <- training_svm_2class[,1:20]
y <- training_svm_2class[,21]
y_test <- testing_svm_2class[,21]
ctrl_svm_2class <- rfeControl(functions = rfFuncs , method = "repeatedcv", number = 5, repeats = 2, allowParallel = TRUE)
model_train_svm_2class <- rfe(x = trainX, y = y, data = training_svm_2class, sizes = c(1:20), metric = "Accuracy", rfeControl = ctrl_svm_2class, method="svmRadial")
pred_svm_2class = predict(model_train_svm_2class, newdata=testing_svm_2class)
pred_svm <- prediction(pred_svm_2class[,2], y_test)