機械学習のアルゴリズムの一つである、サポートベクターマシンを勉強していて疑問に思ったことはないでしょうか。
「ハードマージンで線形分離できなかったらどうすんの?????エラー出るの???」
SVM(サポートベクターマシン)を調べていると大体
- マージン最大化
- ハードマージン・ソフトマージン
- カーネル関数
- カーネルトリック
のような順番で解説されています。
それぞれの雑な解説
マージン最大化では、「線形分離してマージンを最大化するよ!」
ハードマージンでは、「一つも誤分類を許さいないよ!」
ソフトマージンでは、「誤分類を許容するよ!過学習を抑制できるよ!」
カーネル関数では、「いい感じに説明変数を増やすことによって、線形分離できるようにするよ!」
カーネルトリックでは、「説明変数増やした分計算が大変になるけど、工夫すればいい感じに計算んできるよ!」
的なノリで説明されていることが多いです。
ここで疑問に思ってしまうのが、ハードマージン意味ある????ってことです。線形分離できるデータがほとんどなのだから無理じゃね?ってかソフトマージンも許容する誤分類を増やさないと厳しくね?ってなるわけです。
色々調べた結果
というわけでこの疑問を調べた結果、私はこのような結論に至りました。
ハードマージンでは線形分離できるようになるまで、カーネル関数で次元を増やす
はい。どこにも明確には書いていませんが、↓の本にもこのようなことを仄めかす一文がありました。
つまり、ソフトマージンにすることにより、次元の数が減り境界線がシンプルになり過学習が抑制されるということです。
正しい解説の順番
ということでサポートベクターマシンSVMをわかりやすく解説していただいている、クソ有能ブログのみなさんはぜひ
- マージン最大化
- カーネル関数
- ハードマージン・ソフトマージン
- カーネルトリック
の順番で解説して欲しいですね。