質問: MNISTのデータをRのSVM(コードは下記参照)で予測してみました。 すると、エラー率が80%以上・・・ 正答率は0%になってしまいました。 正答率を上げるべく、チューニングの方法を教えてください! (数学もSVMもRも初心者ですので簡単だとありがたいです・・・) ``` library(kernlab) MN <- read.csv("C:/work/Downloads/train (1).csv") rowdata<-nrow(MN) random_ids<-sample(rowdata,rowdata*0.5) random_ids MN_training<-MN[random_ids, ] MN_training MN_predicting<-MN[-random_ids, ] MN_predicting MN_svm<-ksvm(label ~., data=MN_training ) MN_svm result_predict<-predict(MN_svm, MN_predicting) result_predict table(result_predict,MN_predicting$label) precision.percentage <- (sum(diag(result_predict)/nrow(MN_svm)))*100 print(precision) print(paste(precision.percentage, "%", sep='')) ``` 得られた結果 ------ > > precision.percentage <- (sum(diag(result_predict)/nrow(MN_svm)))*100 > > print(precision) > > Error in print(precision) : object 'precision' not found > > print(paste(precision.percentage, "%", sep='')) > > [1] "0%" > > >
回答: coco_bauerさんがおっしゃる通り, "precision"が存在しないため,正答率が算出できていないと思います. precisionは日本語で適合率とよび,正と予測したデータのうち,実際に正であるものの割合です. 他にもrecallがあり,precisionとrecallの調和平均であるF値を用いて,SVMの性能評価をすることがあります. F値については,こちらを参照してください. SVMの性能を調整するには,コストパラメータCをいじります(実際には,他にもありますが). Cを変更するには,ksvm()の引数に'C = 1'のように指定すればOKです. チューニングについては, SVMを使いこなす!チェックポイント8つ RでSVRのクロスバリデーション が参考になると思います. ksvmのマニュアルは, ``` ?ksvm ``` で見ることができます. Rはクエスチョンマークの後に関数名をつけて実行すると,その関数のマニュアルを表示してくれます. あまりいいマニュアルではないですが,引数には何があるのかを知るのに使うといいと思います. 自分の環境では,ksvmの学習が異常に長くてnpn21さんのプログラムの検証はできていないのですが, RでSVMをした記事がありますので,こちらを参考にしつつ,バクを取り除いてみてください.