SVM(サポートベクターマシン)の説明で、マージン最大化とカーネルトリックが出てくる
ロジスティック回帰も境界の線を引くやつやろ?何が違うん
【疑問】SVMの「マージン最大化」と「カーネルトリック」、何をしてるん?次元を上げたら計算が重くならんの?【G検定】
前提のおさらい。ロジスティック回帰は、重みつきの和 をシグモイド関数で確率にして分類する。 のところが2つのクラスの境界になる
>>1
SVMも の境界を引く。違うのは、境界の決め方
2つのクラスを分けられる線はたくさんある。SVMはその中で、境界から一番近いデータまでの距離(マージン)が一番広くなる線を選ぶ
この一番近いデータをサポートベクターと呼ぶ。境界はサポートベクターだけで決まって、遠くのデータを動かしても変わらん
>>3
マージンの幅は、両側のサポートベクターが に乗るようにそろえると
なら で、幅は0.4。 を小さくするほどマージンが広がる
>>3
現実のデータはきれいに分けられんことのほうが多いやろ
>>5
そこで、境界をはみ出すデータを少し許すソフトマージンを使う。はみ出しへの罰の強さを で決める
を大きくすると、はみ出しを許さず学習データに合わせこむ。小さくすると、多少間違えてもマージンを広くとる
カーネルトリックは、まっすぐの線では分けられないデータのための工夫
1次元で、クラスAが 、クラスBが だと、しきい値を1つ置くだけでは分けられん
を の2次元に移すと、Aは 、Bは になって、 の横線で分けられる
>>7
次元を上げたら、そのぶん計算が重くなるんちゃうの?
>>8
そこがトリック。SVMの計算には、データどうしの内積しか出てこん。だから、変換したあとの内積を、変換せずに直接計算できる関数(カーネル)があればええ
たとえば は、2次元の を に移したあとの内積と同じ
、 なら、。移したあとの と一致する
>>9
よく使われるガウスカーネル(RBFカーネル) は、移したあとの次元が無限になる。それでも、この式1つで内積が計算できる
>>10
便利やけど、データが何十万件もあると、全部のペアのカーネルを扱うのが重くなる。大きなデータでは、ほかのモデルが選ばれることも多い
管理人のひとこと
- SVMは、境界から一番近いデータ(サポートベクター)までの距離(マージン)が最大になる境界を選ぶ。マージンは で、 なら0.4。
- ソフトマージンははみ出しを許し、 で罰の強さを決める。 が大きいほど学習データに合わせこむ。
- カーネルトリック: を に移すと −1, 0, 1 と ±3 が分けられる。変換後の内積をカーネルで直接計算するので、変換そのものはしなくてよい。
- は (1,2) と (3,1) で25になり、変換後の内積 と一致する。RBFカーネルは変換後の次元が無限。