SVMについて雑にまとめる
はじパタのSVMの直感的理解に苦しんだので雑に整理しておく。
SVMの導出
- SVMを使うと2クラスの線形識別できるよ
- 基本2クラスだけど多クラスの場合は、判別したいクラスとその他のクラスの2クラス問題にして一対他SVMするよ
- サポートベクトルとは、識別境界を決めるために使用する学習データのことだよ。つまり境界付近のデータだよ。
- サポートベクトルをつかって学習機械をつくるからSVMだよ
- SVMの導出にはラグランジュ未定定数法をつかうよ
- この最適化問題の主問題の解は、双対問題の解がわかれば求まるよ
線形分離できない時
- 基本的にSVMは線形分離できるときだけ使える手法だよ
- ただし、ある程度の誤識別を許容することで線形分離できない問題も解くことができるよ
- どれくらい誤識別するかをスラック変数で表すよ。スラック変数の総和が大きいほどマージンを超えてくるよ。
- スラック変数の総和にどれくらペナルティを与えるかが、パラメータCだよ
- Cが大きいほどマージンを超えてくることに厳しくなるよ。でも過学習しやすくなるので汎化誤差が大きくなるよ。
- これをC-SVMとかいうよ
- ちなみにスラック変数は学習の時だけつかうよ
非線形特徴写像
- 線形分離できないd次元のデータをM>>dなM次元に写像すると、データの間隔に隙間ができるので(疎になるで)超平面で線形分離できる可能性がでてくるよ
- ただし内積計算に時間がかかるので内積カーネルを用いたほうがいいよ
- 内積カーネルには多項式カーネルと動径基底関数カーネルがあるよ
- このあたりはよくわからんかったので、あとでやりなおすぞ
ν(ニュー)-SVM
- 学習機械(識別する仕組み)が達成できる誤り率と機械の複雑さには関連性があるよ
- 「誤り率と機械の複雑さ」のトレードオフをνというパラメータをつかって調整するよ
- C-SVMの時と似ていて、複雑にすると誤り率が減るけど汎化誤差がますよ(過学習)、ぎゃくに単純すぎると誤り率が高くなるよ
- パラメータνは、-ρ倍することでトレードオフを調整するよ。-ρなのは、ρが大きくなれば評価関数が小さくなるので最適化にすすむからだよ。
- νは、「サポートベクトルの割合(全データのうち、どれくらいがサポートベクトルになるか?)の下限」と、「上限サポートベクトルの割合の上限」を表すよ
- 上限サポートベクトル(Bounded SV)とは、α_i = 1/N となるデータだよ。
1クラスサポートベクトル
- 2クラス分類で話をすすめてきたけれど、1クラスだけで学習して使う方法もあるよ
- ある1クラスに属すか?属さないか?を分類するよ
- 新規性判別、例外検出、外れ値検出に利用するよ
サポートベクトルの理解 むずかしい。