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

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

新規登録して質問してみよう
ただいま回答率
85.50%
R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

Q&A

解決済

1回答

4967閲覧

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

npn21

総合スコア13

R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

0グッド

0クリップ

投稿2016/07/04 14:46

MNISTのデータをRのSVM(コードは下記参照)で予測してみました。
すると、エラー率が80%以上・・・
正答率は0%になってしまいました。
正答率を上げるべく、チューニングの方法を教えてください!
(数学もSVMもRも初心者ですので簡単だとありがたいです・・・)

R

1library(kernlab) 2MN <- read.csv("C:/work/Downloads/train (1).csv") 3rowdata<-nrow(MN) 4random_ids<-sample(rowdata,rowdata*0.5) 5random_ids 6MN_training<-MN[random_ids, ] 7MN_training 8MN_predicting<-MN[-random_ids, ] 9MN_predicting 10MN_svm<-ksvm(label ~., data=MN_training ) 11MN_svm 12result_predict<-predict(MN_svm, MN_predicting) 13result_predict 14table(result_predict,MN_predicting$label) 15precision.percentage <- (sum(diag(result_predict)/nrow(MN_svm)))*100 16print(precision) 17print(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%"

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

coco_bauer

2016/07/05 02:34

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

回答1

0

ベストアンサー

coco_bauerさんがおっしゃる通り, "precision"が存在しないため,正答率が算出できていないと思います.
precisionは日本語で適合率とよび,正と予測したデータのうち,実際に正であるものの割合です.
他にもrecallがあり,precisionとrecallの調和平均であるF値を用いて,SVMの性能評価をすることがあります.
F値については,こちらを参照してください.

SVMの性能を調整するには,コストパラメータCをいじります(実際には,他にもありますが).
Cを変更するには,ksvm()の引数に'C = 1'のように指定すればOKです.
チューニングについては,
SVMを使いこなす!チェックポイント8つ
RでSVRのクロスバリデーション
が参考になると思います.

ksvmのマニュアルは,

R

1?ksvm

で見ることができます.
Rはクエスチョンマークの後に関数名をつけて実行すると,その関数のマニュアルを表示してくれます.
あまりいいマニュアルではないですが,引数には何があるのかを知るのに使うといいと思います.

自分の環境では,ksvmの学習が異常に長くてnpn21さんのプログラムの検証はできていないのですが,
RでSVMをした記事がありますので,こちらを参考にしつつ,バクを取り除いてみてください.

投稿2016/07/05 06:17

t-kaneko

総合スコア61

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問