2017-05-16 1 views
0

제 질문은 아직 this thread과 동일하지만, 아직 만족할만한 대답이없는 것 같아서 재현 가능한 코드와 함께 다시 묻는 것이 적절하다고 생각합니다 .R은 SVM 모델로 예측할 때 인수 (0)을 반환합니다.

training <- read.csv("https://d396qusza40orc.cloudfront.net/predmachlearn/pml-training.csv")[,-1] 
testing <- read.csv("https://d396qusza40orc.cloudfront.net/predmachlearn/pml-testing.csv")[,-1] 
# Importing data 

library(e1071) 
# Load the required package for SVM 

svm_model <- svm(classe ~ pitch_arm + pitch_forearm + pitch_dumbbell + pitch_belt + 
    roll_arm + roll_forearm + roll_dumbbell + roll_belt + 
    yaw_arm + yaw_forearm + yaw_dumbbell + yaw_belt, 
    data = training, scale = FALSE, cross = 10) 
# Perform SVM analysis with default gamma and cost, and do 10-fold cross validation 

predict(svm_model, testing) 
# R returns factor(0) here 

테스트 데이터 프레임에 필요한 모든 열이 있고 해당 필수 열에 NA가 없는지 확인했습니다. 계속할 아이디어를 좀주세요. 감사!

+0

예 이들은 동일한 유형입니다. 알림 주셔서 감사합니다! :) – ytu

답변

0

이것은 e1071 predict.svm 기능의 기발한 결과 인 것으로 보입니다. 테스트 데이터에는 모델의 변수에 대한 누락 된 값이 없습니다. 모든 포인트에 값이 누락되었습니다.

complete.cases(testing) 
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
[14] FALSE FALSE FALSE FALSE FALSE FALSE FALSE 

불필요한 변수를 제거하여이 문제를 해결할 수 있습니다.

ModelVars = which(names(training) %in% 
    c("pitch_arm", "pitch_forearm", "pitch_dumbbell", "pitch_belt", 
    "roll_arm", "roll_forearm", "roll_dumbbell", "roll_belt", 
    "yaw_arm", "yaw_forearm", "yaw_dumbbell", "yaw_belt")) 
test2 = testing[, ModelVars] 

predict(svm_model, test2) 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 
A A B A A A D B A A A C A A A A A A A A 
Levels: A B C D E 
+0

이 방법은 나를 위해 작동, 감사합니다! :) – ytu

관련 문제