Upload
guest8ee130
View
16.489
Download
0
Embed Size (px)
DESCRIPTION
Tsukuba.R#2http://d.hatena.ne.jp/repose
Citation preview
やる夫で学ぶ SVM with R
発表者: y_benjo
自己紹介
• Twitter id : y_benjo (便所)
•http://d.hatena.ne.jp/repose
•今回は「やる夫で学ぶ SVM with R」
•「 SVMって何?」というところから、 Rでの簡単な実装まで
•全てフィクションです
イントロダクション 08年春
さて、機械学習の研究室に入ったはいいけど機械学習がわからないお…
というかここって一体何をするところなんだお?学習? AI ?人口知能?長門?かっこよさげな名前だけで研究室を選んだのが間違いだったお……
機械学習とはパターン認識の一分野。簡潔な言い方をすると、ここは、どのようにデータを分類するかという事に取り組んでいる研究室。
急に変なのが出てきた!あんた誰だお?
私は長門有希。研究室のM2にして今回の案内役。
一見無秩序に思える大量のデータからいかに関係性を見出すか、その為にどのような手法が有効か。その手法を考えるのが機械学習。
とりわけこの研究室ではSVMについて熱心に取り組んでいる。あなたの卒論・修論も、おそらく SVMに関する内容になるだろう
SVM って何だお?やる夫の知識は 2 年生の「統計 2 」で止まってるんだお…
SVMは Support Vector Machineと呼ばれる手法。長くなるので次のスライドに
SVMとは
SVMとは Support Vector Machineの略称です。データ群を 2クラスに分類する超平面を引くことによってデータを分類してしまおうという手法です。具体例を挙げてみましょう。
例えば、このような点の集合があった場合、超平面はこのように引かれます。このような分離を、超平面は線形なので、「線形分離」と言います。
次にこのような場合、超平面は直線状にならず、曲線状になってしまいます。このような分離を「非線形分離」と呼びます。
ここで、気をつけてほしいことがあります。さきほどの例では、超平面は直線になっていましたが、これはデータが2次元のベクトルだからです(データが 3次元なら超平面は平面)。
通常、データは d次元なので「超平面」という名が付けられています。
非線形分離の場合、 SVMはカーネルトリックという手法を使わなければなりません。その詳細は後述するとして、今回は線形分離が可能なデータ集合を考え、それを分離する SVMについて取り上げます。
『超平面』を引くことによりデータを線形分離します!
だっておwwwwwwww『超平面』とかどこの中二病だおwwwwwwww
線を一本引くだけならやる夫にも楽勝だおwwwwwwwwwwwwwww
そこまで言うならあなたにSVMを実装してもらう
Hello,World ですら友達のをコピペしたのにコンパイルエラーが出まくって先生も諦めたレベルだお!?
いきなり何を言い出すんだお!?やる夫はプログラミングなんて全くできないお!
大丈夫、実装する言語にはRを使ってもらう。Rなら行列操作も容易。
それに今回は線形分離だけを行う SVMを作ってくれればいい。カーネルメソッドはまた次の機会( Tsukuba.R#3)にでも。
いやいや次とかないから
とりあえず数式を出して欲しいお。それを見ないと何とも言えないお…(数式を見たからといって実装は無理だろうけど…)
SVMの簡単な理論
ここからは数式の説明に入ります。ちょっとだけギリシャ文字が出てきますが、適当に聞き流しながら雰囲気を掴んでください。興味ない人はスルーしてハートマン軍曹が出てくるスライドだけ見てくれればおk
SVM は先ほど述べたように、 2つのクラスを分割する「超平面」と呼ばれるものを引くアルゴリズムです。ではそれを定式化してみましょう。
さて、今データ点を 2 次元のベクトルとして考え、このように分布しているとしましょう。
この時、これらのデータを「訓練集合」と呼びます。そして同時に「教師信号」というものも考えます。
いいか、これからお前ら屑を教育してやる!!!じっくりかわいがってやる!泣いたり笑ったり出来なくしてやる!その日まではウジ虫だ!地球上で最下等の生命体だ !
訓練集合に対して教師信号を
lxxxx ,...,, 21
2
1
1
1
cx
cxy
i
ii
つまり、訓練集合の各データがクラス 1なら1、クラス 2ならー 1を取る!糞単純な話だ!わかったか!念のため言っておくが各データは d次元のベクトルだ!
訓練集合と教師信号の組み合わせを とし、これを「学習データ」と呼ぶことにする!何故「学習」かというと、これらのデータを元に超平面が計算されるからだ。
だから、学習データが糞ならそこから得られる超平面はまるでそびえたつ糞だ!ジジイのファックの方がまだ気合が入ってる!
ll yxyxyx ,,...,,,, 2211
では赤い点をクラス 1、青い点をクラス 2としましょう。
そして、このように分離する超平面の存在を仮定します。この時、超平面は( w,b )という形で表されます。
「超平面が (w,b)で表される」というのは、超平面に一番近いデータ集合において
2
1
1
1
cx
cxbxw・
となります。ここで、新たなデータ集合が与えられた場合は、等号が等号付き不等号に変わります。
そして、各訓練集合から超平面までの距離を γとし、これを幾何マージンと呼ぶことにしましょう。
この時、幾何マージン γは
で表されます。マージンは、超平面と各訓練集合との距離を示していますから、マージンは大きければ大きいほど良いという事になります。
2
1
w
ここで、次のような最大化問題を考えます。
Max: →Min:
s.t
(∵教師信号の定義より)
1bxwy ii ・
2
1
www・
寝てる奴は起きろ!これから要点だけまとめてやる!
1)SVM は超平面=境界を引く!2)その時、境界からの距離をマージンと呼ぶ!3)マージンはできるだけ大きくする!
よしお前ら、お前らの仕事はこのマージン最大化問題を解く事だ!それまでじっくり可愛がってやる!泣いたり笑ったりできなくしてやる!
わかったか、ウジ虫!
………ハッ!
無理だお!!!!数理計画の授業で死に掛けたやる夫には無理すぎて死ぬお!!!
問題無い。そこで Rを使う。
他のプログラミング言語であればニュートン法や最急降下法を使うところだが、Rなら二次計画のパッケージが用意されている。
ならきっとどうにかなるお……
色々ぐぐりながらやってみるお
とりあえずこの式をラグランジュの未定乗数法を使って凸二次計画問題に変形して…
ここ説明すんのだるいので省くお。
二次計画を解くための Rのパッケージは quadprog、関数はsolve.QP()らしいお…えーっと…使い方は…っと…
Solve a Quadratic Programming ProblemDescription:This routine implements the dual method of Goldfarb and Idnani(1982, 1983) for solving quadratic programming problems of theform min(-d^T b + 1/2 b^T D b) with the constraints A^T b >= b_0.Usage:solve.QP(Dmat, dvec, Amat, bvec, meq=0, factorized=FALSE)…
日本語でおk
と、とにかく…引数に合うように式を変形させて…条件式はそのまま使えそうだから使って…
を、行列表現に書き換えれば後半部分はそれぞれ、 x_i ・ x_jを要素に持つ行列Xと、 y_iy_jを要素に持つ行列Yに書き換えて… X*Yってやれば要素が
l
jijijiji
l
ii xxyy
1,1 2
1max
jiji xxyy
な行列が出来るハズだお…
やったらエラー吐くお!つうか半正定値行列にならないお!!!
…kernlab パッケージのipop も使えなかったし…
……