読むだけでちょっと賢くなる、架空のまとめスレ

【疑問】SVMの「マージン最大化」と「カーネルトリック」、何をしてるん?次元を上げたら計算が重くならんの?【G検定】

11レスカテゴリ:AI・機械学習
1: 名無しさん

SVM(サポートベクターマシン)の説明で、マージン最大化とカーネルトリックが出てくる
ロジスティック回帰も境界の線を引くやつやろ?何が違うん

2: 名無しさん

前提のおさらい。ロジスティック回帰は、重みつきの和 をシグモイド関数で確率にして分類する。 のところが2つのクラスの境界になる

3: 名無しさん

>>1
SVMも の境界を引く。違うのは、境界の決め方
2つのクラスを分けられる線はたくさんある。SVMはその中で、境界から一番近いデータまでの距離(マージン)が一番広くなる線を選ぶ
この一番近いデータをサポートベクターと呼ぶ。境界はサポートベクターだけで決まって、遠くのデータを動かしても変わらん

4: 名無しさん

>>3
マージンの幅は、両側のサポートベクターが に乗るようにそろえると

なら で、幅は0.4。 を小さくするほどマージンが広がる

5: 名無しさん

>>3
現実のデータはきれいに分けられんことのほうが多いやろ

6: 名無しさん

>>5
そこで、境界をはみ出すデータを少し許すソフトマージンを使う。はみ出しへの罰の強さを で決める
を大きくすると、はみ出しを許さず学習データに合わせこむ。小さくすると、多少間違えてもマージンを広くとる

7: 名無しさん

カーネルトリックは、まっすぐの線では分けられないデータのための工夫
1次元で、クラスAが 、クラスBが だと、しきい値を1つ置くだけでは分けられん
を の2次元に移すと、Aは 、Bは になって、 の横線で分けられる

8: 名無しさん

>>7
次元を上げたら、そのぶん計算が重くなるんちゃうの?

9: 名無しさん

>>8
そこがトリック。SVMの計算には、データどうしの内積しか出てこん。だから、変換したあとの内積を、変換せずに直接計算できる関数(カーネル)があればええ
たとえば は、2次元の を に移したあとの内積と同じ
、 なら、。移したあとの と一致する

10: 名無しさん

>>9
よく使われるガウスカーネル(RBFカーネル) は、移したあとの次元が無限になる。それでも、この式1つで内積が計算できる

11: 名無しさん

>>10
便利やけど、データが何十万件もあると、全部のペアのカーネルを扱うのが重くなる。大きなデータでは、ほかのモデルが選ばれることも多い

管理人のひとこと