2017-05-16 9 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

関連する問題