機械学習サポートベクターマシンの数式サポートベクターマシンの最適化問題サポートベクターマシンの考え方と、数式の導出は以下の記事で扱っています。s0sem0y.hatenablog.com今回は最適化問題が導出されたところから始めます。あるときに、以下の最適化問題を解くことで、サポートベクターマシンの2クラス分類器を得ることができます。正であるか負であるかで分類を行うことができます。決めておいた非線形関数であり、線形分類ができなさそうな問題に対して、上手く分類できそうな非線形関数を選択せねばなりません。このような関数を明示的に扱うこと無く、全く同じ処理を行う方法があり、「カーネル法」と呼ばれています。してしまえばいいです。最適化問題は制約不等式が少々めんどくさい形をしています。ラグランジュの乗数法を用いることで、最適化問題を式変形して別の表現にしてしまうことができます。最適化問題を主問題、書き換えられた問題を双対問題と呼び、これらの解は1対1に対応するため、一方を解けば他方も解けたことになります。双対問題の導出は以下の記事で行っています。双対問題は以下の最適化問題となっています。関する関数にしてしまい、あとは最大化問題を解くだけです。二次関数なので、必ず解を得ることができます。対して、サポートベクターマシンによる分類器は以下の数式による計算を行います。この値が正であるか負であるかによって分類を行います。いうのは訓練データです。サポートベクターマシンでは訓練データを分類の際にも覚えておかねばなりません。学習を行う際には、分類平面の近くにあるきわどいデータのみを少数だけ選び出して訓練データとするため、実際には何千ものデータを保持する必要はありません(そもそもサポートベクターマシンは、分類が際どくなりそうなデータに対して、そのマージンを最大化することで汎化性能を高めるものでした)。なるように学習させるものです。いうのは非線形関数を明示すればという形でした。するので、となり、これは単なる標準内積です。非線形にすることで、あたかも非線形変換を行ってから、内積を取っているかのように扱う手法だと言えます。求めるのが目的でした。これを明示的に求めたい場合はを計算すればいいです。調整して決めるということになります。求めて分類器を完全に獲得します。対してはの正負をみて分類することになります。図示するとデータは以下のような感じです。赤い点が青い点がこれに対するサポートベクターマシンを構築しましょう。目視で分かるというのは素晴らしいことです。マージン最大化という観点を理解していなければ、他にも無数に分け方は存在します。適当な分類境界パーセプトロンならば、収束時にこのような境界にもなりうる他にも点が増えてきたであろうときにもマージン最大化での分類境界はおそらく上手く働きそうですね。実際には大量のデータの中から、分類が際どい点をそれぞれ数点選んでおいても良いのですが、今回は手計算で理解を深めるため、たったの2点でやります。問題を解く今回は簡単のため、線形分類を考えます。(非線形でやりたかったら適当にカーネルを調べてやってみてください。この部分の計算が変わるだけです。)さて訓練データは以下でした。最適化問題は以下でした。訓練データを目的関数(最大化問題の中身)へ代入します。この式へを代入していきと目的関数が得られました。調整して値を最小にします。制約条件を使うと、という関係を満たす必要が出てきます。代入することでが得られます。とおくとと求まります。満たされているので問題ありません。明示的に求めたい場合はを使います。あり、このベクトルは境界直線に対する法線ベクトルとなっているので、図示すると具体的に境界が求まったことになります。ある直線が境界となる。分類器は以下の形です。