これから書いていこうかなって思って作った...が...
今日自分が発表したのは
SVM
自分の理解の浅さを痛感した.先輩の話聞きながらほーって思って多少理解が深まったはず
まとめるのもキツイので重要なとこ要約
- SVMの特徴は?
- ラグランジュ未定定数の意味するところ
- パラメータの意味するところ
たぶんこんなところだと思う
SVMの特徴は?
- マージン最大化
これは先人の教え
www.slideshare.net
こういうのを見るのが感覚的な理解は深まるんじゃないかなって思う.これとか視覚的にカーネル法を用いて分離が見れるしふむ...って思うよね
SVM with polynomial kernel visualization
ラグランジュ定数が意味するところ
SVMの主問題を解く中でラグランジュの未定乗数法を用いると思うんだが
ここで言いたいのはこのが何を示すかってことだけど
ラグランジュの計算を進めたりして出てくるKuhn-Tucker条件から
こんな感じの関係式が出てくる
これ直感的になんだろうなあってずっとパッと理解しきれてなかったけど
はサポートベクターではない点,すなわちマージン最大化に関わらない点を示す.
言われてみればそうやなってなったわね
逆にがサポートベクターであり,これのみが超平面の決定に寄与する
字面だけ眺めてても図を見ながら考えるとわかることではあるしさっきのスライドとか見ながら考えるとわかりやすいのでは?
パラメータの意味するところ
眠いのですぐ書く
ソフトマージンを作るのに変数を導入した.
C-SVMの主問題の目的関数は
スラック変数の総和は誤識別数の上限である
パラメータCはどこまで誤識別数を許容するかを指定するパラメータ
今回ガウシアンカーネルに焦点を当てたので
このはカーネル関数の広がりを制御するパラメータ
結局は,これくらいはわかった上で実装してないと解析やる上でパッケージを使えるってだけの人になってしまうよねっていうのは感じるから一定レベルで理論の理解は大事だよね
irisのデータで実装
めんどいからコードはっつけとく
library(kernlab)
library(caret)
#行の長さ
rowdata<-nrow(iris)
iris<-iris
#ランダムに全体の半分の行を取り出す
random_ids<-sample(rowdata,rowdata*0.5)
random_ids
#学習データ作成
iris_training<-iris[random_ids, ]
iris_training
#予測データ作成
iris_predicting<-iris[-random_ids, ]
iris_predicting
#SVMによって学習,予測を行う
iris_svm<-ksvm(Species ~., data=iris_training )
iris_svm
#予測データを評価
result_predict<-predict(iris_svm, iris_predicting)
result_predict
#テーブルで比較
first<-table(result_predict,iris_predicting$Species)
first
#チューニング
fitControl<-trainControl(method="repeatedcv",number=10,repeats=10)
tGrid<-expand.grid(sigma=(1:10)*0.01, C= (1:10)*1)
model.tune<-train(Species~.,data=iris_training,trace=T,method="svmRadial",trControl=fitControl,tuneGrid=tGrid)
model.tune
plot(model.tune)
#結果を使って再度
iris_svm<-ksvm(Species ~., data=iris_training,kpar=list(sigma=0.05),C=4 )
iris_svm
#予測データを評価
result_predict<-predict(iris_svm, iris_predicting)
result_predict
#テーブルで比較
second<-table(result_predict,iris_predicting$Species)
second
first
こんな時間まで起きてないで寝ましょう
数式の表記微妙すぎて直したかったけどもう眠いからいいや