Upload
guest8ee130
View
14.106
Download
0
Embed Size (px)
DESCRIPTION
やる夫はSVMを実装したようです&やる夫で学ぶ非線形なSVM
Citation preview
やる夫はSVMを実装したようです
&やる夫で学ぶ非線形なSVM
Hatena id:repose
Twitter id :y_benjo
前回までのおさらい
使おうと思っていた
ライブラリが使えず
ぶん投げて逃げた
やる夫であった…
つうか
やっつけスライドな
のに大勢に見られ
た挙句、投げっぱ
なしなのは恥ずか
しいので
やる夫はSVMを実装したようです
とりあえずもう一度
落ち着いて考え直す
お…
前回発表したように、
線形SVMで問題にな
るのは、超平面まで
の最大化問題だお…
詳しい話はさておき、
これが解ければ線形
分離はできる筈…
問題は、行列が半正
定値行列になってし
まう事だお…
最初試したsolve.QP
は正定値行列にしか
対応してないし…
正定値行列と、半正
定値行列のおおまか
な違いは、行列式の
値が≧0か、>0かの
差なんだお…
今度はkernlabパッケ
ージのipopを試して
見るお…
こっちなら半正定値
行列でもきっと……
引数は多いわ、1次元
行列なのにエラー吐
くわ、引数と違う形式
でもエラー吐かない
わイミフすぎるお!
こうなりゃヤケだお!
適当にそれっぽい変
数作りまくってエラー
が消えるまで試し続
けるお!
なんか解が出た
これで超平面が引け
るお!SVMが完成し
たお!これで勝つる!
いい所まで出来たが、
それでは不十分。
あと少し必要
これまで解いていたのはマージン(距離)の最大化問題。ここで得られた解は超平面そのものではない。あと1ステップ必要
ここから先は楽勝だ
お!式に突っ込めば
すぐに超平面が完成
したお!!
実 装 完 了
じゃあ次は非線形な
SVMを実装してもらう。
ここまで来たら後は簡
単(な筈)
お前は何を言っているんだ
やる夫で学ぶ非線形なSVM
あの…いきなり簡単
とか言われましても…
そもそも「非線形な
SVM」ってどんな感じ
なんだお…?
じゃあ簡単な質問。
このような一次元の
データをSVMでどう
分割する?
そんなの楽勝だお。
こんな風に赤い点と青
い点の間に超平面を
引っ張ればいいお。
じゃあ、もしさっきの
データがこういう分布
なら?
ちょっと待つお…
これは明らかに直線で
分割するSVMでは無
理だお…
じゃあこのデータを
何らかの関数を使って
二次元に拡張したとし
よう
こうするとどうだろう?
SVMでのデータ分割
は可能だろうか
これなら楽勝だお!
ここに一本引いてやれ
ばいいお!
これが非線形分離を
行うSVMの原理。
データを線形分離可
能な高次元空間まで
写像して分離する。
わかったつもりになれる解説
ここでちょっと数式を使って解説します。
さて、先ほど「高次元空間に写像する」と言いました。これは地味ながらもSVMの特徴的な部分です。
何故ならば、他のデータ分析やクラス判別の手法では、「データの次元をいかに落とすか」という点に焦点を置いていたからです。
しかし、線形分離可能な高次元空間とはどんな状態なのでしょうか?また、その空間への写像はどのように記述すればいいのでしょうか?
ここで、「カーネルトリック」という手法が用いられます。
証明その他諸々を省くと、これは「写像がどんな形かわからなくても、ベクトルの内積だけで表せたら楽なんじゃね?wwwwwうはwwwwwwwwww」という方法です
それが更に発展し「じゃあφ(x1)φ(x2)って書くより K(x1,x2)みたいな関数で代用できるんじゃねwwwwwww天才現るwwwwwwww」となりました。この時の関数 Kをカーネル関数と呼びます。
この時用いられるカーネルの代表的なものにガウシアンカーネルがあります。
さて、ここで現れるのはベクトルの内積です。これをSVMの式に代入して見ましょう。
前回のスライドじゃずれちゃってたんですが、線形分離のSVMに置ける最適化問題はこのようになっています。
この後半部はベクトルの内積になっています。つまり、ここをカーネル関数で置き換えてやると…
このような形になります。非常に以前の式に似ていて、かつシンプルです。
あとは Rで実装するならば行列を少しだけ書き換えてipopに投げてやれば良い、という事ですね。
これなら式の形が前
回のと近くいからなん
とかなりそうだお!
この場合問題となるの
は、適切なパラメータ。
例えばガウシアンなら
ば、σをどうするか、で
結果が変わってくる
それでもこれならきっ
となんとかなるお!
これで卒論も修論も
楽勝だおwwwwww
ww
研究室楽勝すぎるおwwwwww数理計画系の研究室涙目だおwwwwwwwwww
言い忘れていた。
あなたが今回 Rで実装
したSVMだが、あのま
までは実用に堪えがた
いほど重い。
それにうちの研究室で
は、SVMを発展させた
OCSVMや多クラスの
SVM、そして線形回帰
に応用させたSVRに取
り組むのがメイン
なので今後は C++で
SVMを実装してもらう。
お前は何を言っているんだ
ネタではない。 Rの
SVMパッケージでは対
応できないような応用
を行う為には実装が必
要
無 理
次回
やる夫で学ぶ Random Forest