質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.32%

RのSVMのでうまくチューニングをしたいです

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,944

npn21

score 11

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%"

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • coco_bauer

    2016/07/05 11:34

    「Error in print(precision) : object 'precision' not found 」というエラーが出ています。正答率(precisionに入ると考えている)が0%なのではなく、正答率が代入される先のprecisionというオブジェクトが存在しないのが問題なのです。チューニングは、プログラムのバグを修正した後でしてください。

    キャンセル

回答 1

checkベストアンサー

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をした記事がありますので,こちらを参考にしつつ,バクを取り除いてみてください.

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.32%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る