2016-11-29 11 views
0

svm과 함께 "rfe"기능을 사용하여 기능이 축소 된 모델을 만들었습니다. 그런 다음 클래스 레이블 (2 진수), 0 클래스 확률, 1 클래스 확률을 출력하는 테스트 데이터에서 "예측"을 사용합니다. 그때 ROCR 패키지, 예측 가능성 및 사실 클래스 라벨 만에, 예측 기능을 사용하려고 다음과 같은 오류가 발생하고,이 개 배열의 길이가 동일로 왜 확실하지 않다 :예측 오류 - 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. 

나는 아래의 코드를 입력은 click me입니다. 이진 분류가있는 작은 데이터 세트이므로 코드가 빠르게 실행됩니다.

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) 

감사합니다. 광고에

pred_svm <- prediction(pred_svm_2class[,2], y) 

pred_svm_2class는 [2] 시험 데이터의 예측이고 Y는 훈련 데이터의 라벨 때문에

답변

2

이다. 그냥이

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) 
+0

그건 내 바보 였지만 진짜 실수였습니다. 당신의 도움을 주셔서 감사합니다! – tacqy2