‫サポートベクターマシンの理論や勘どころを紹介するこのコーナー､ 皆さんお待たせしました｡
‫この講義では､ カーネルのトリックとサポートベクターマシンの背後にある数学に焦点を当てます｡
‫これまでは､ これらの手法の背景にある直感的な部分についてのみ説明してきました｡
‫そこで､ これからサポートベクターマシンを構築するための一般的な数学について､ 簡単に説明したいと思います｡
‫そして､ その数学がサイキック・ラーンド・クラスコールとどのように関係しているのかも説明します｡
‫まず､ マージンベースの分類器を使うことについて簡単におさらいします｡
‫最大マージン分類器からサポートベクター分類器へ展開し､ 最終的にサポートベクターマシンのカーネルトリックを使うわけです｡
‫さて､ この講義は､ 相対的な読解に置き換えることができるオプション講義と自由にお考えください｡
‫背景となる読み物は､ 『統計的学習入門』の第9章に掲載されている｡
‫サポートベクターネットワークの概要については､ CortezとAPNICが発表した『Machine
‫Learning Journal』に掲載されているので､ そちらをご覧ください｡
‫では､ まず数学的に定義されたハイパーポイントについて説明します｡
‫ここでは､ 2つの特徴量x1とx2を持つ2次元の空間をイメージしています｡
‫ハイパープレーンとは､ 2つのフィーチャーの中の1本の線に過ぎません｡ つまり､ これを数学的に定義すると､ 今まで見てきた線と同じになるのです｡
‫切片ではなくβ1×1＋β2×2で､ これを0に等しく設定します｡
‫そして､ このラインを定義するために､ いくつかのベータのセットがあるはずです｡
‫さて､ これを何次元にも拡大することができることを心に留めておいてください｡ ただ､ これを続けると､ すべての特徴に対して1つのベータ係数が存在することになります｡
‫さて､ これがあるP個の特徴量に対する平面の数学的定義である｡
‫飛行機を切り離す話をしましょう｡
‫サポートベクターマシンのハイパープレーンの考え方は､ クラスを分離するということです｡
‫つまり､ プレーンラインそのものだけでなく､ 分離要因として何を考慮するかという数学的な定義から考えなければならないのです｡
‫だから､ ゼロ以上の値は､ この平面の片側に落ちると考えたいのです｡
‫同様に､ ゼロ以下の値も反対側に落ちてくることになる｡
‫このように､ 平面上のどの辺に落ちるかを定義できる方程式ができました｡
‫最大マージン分類器のようなものを数学的に定義するために､ 最後に考慮しなければならないのは､
‫データ点そのものです｡
‫ここで注意したいのは､ 実際に数学的にタイプアウトする場合､ 通常は実際の特徴点またはデータ点をXの転置行列として表示することである｡
‫つまり､ x1〜nはデータポイントの数､ 1〜Pは特徴量の数を表している｡
‫このように､ 一般的なデータの書き出し方とは異なることに注意してください｡
‫PANDASのデータフレームのようなものでは､ 同じデータを転置しているだけです｡
‫そうすると､ 行の列､ 列の行､ やはり1〜NNがポイントそのものの数､
‫1〜Pが実際のフィーチャーの数ですね｡
‫つまり､ この場合､ 右の図からすると､ 2つの特徴量x1とx2があり､ 6つのポイントがあることになります｡
‫つまり､ 1～6が1～Nになるわけです｡
‫さて､ これらの情報を使って､ 最大マージン分類器を数学的に定義してみましょう｡
‫最大マージン分類器の目的は, Mを最大化することであり, Mはハイパープレーンから拡張されたマージンであることを思い出してください．
‫つまり､ 基本的にはこのマージンを最大化できる最適なベータ係数を選ぼうとしているのですが､
‫いくつか制約があります｡
‫データセットから､ この2つの制約を受けることになります｡
‫では､ 実際にはどうなのでしょうか｡
‫まあ､ この意味は､ 私たちがやろうとしていることは､ ここのデータポイントを考えるということなのです｡
‫この場合､ 6つのデータポイント､ つまり1〜RNがあります｡
‫そして､ 私たちがやりたいことは､ データポイントがマージンのどちら側に位置するかによって､
‫マージンと同じかそれ以上になるという､ この主題の要件を満たすことを確認することなのです｡
‫これは本質的に､ 最大マージンを持つ分類器では､ どのデータポイントも実際にはマージン内に存在し得ないということを数学的に表現しているに過ぎないのです｡
‫また､ ベータ係数が1である場合の二乗の一部も適用されます｡
‫さて､ これは実際に､ 下の式に特徴量を差し込むとしたら､ ベータ2乗とそれらの和が1に等しいことを条件として､
‫EIのyにこれらのベータ係数と特徴量を掛けると､ 点からハイパー面への垂直距離が得られ､
‫その距離が少なくともマージンそのものと同じ大きさになることを保証してくれる､
‫という判断で他の式に対応させるのに役立ちます｡
‫これは､ この制約があれば､ 任意の点からハイパープレーンまでの直交距離を数学的に計算できるというだけの話である｡
‫ここで､ 最大マージン分類器の数学的な完全な定義が示されます｡
‫繰り返しになりますが､ データポイントのこの転置行列が与えられたとき､
‫これらの2つの方程式に従うmを最大化するベータ係数を求めたいと思います｡
‫そして､ 点からハイパープレーンへの直交距離を求めるために､ このベータ2乗和係数が1になることを条件としています｡
‫では､ サポートベクトル分類器に話を移そう｡
‫サポートベクトル分類器は最大マージン分類器とは異なり, MIS分類を許容するもので, 基本的にいくつかの点がマージン内に入ることを許容するものであることを思い出してください．
‫ですから､ このマージンを最大化することと､ ベクトルと平面との直交距離を求めるために､
‫ベータ値の2乗和が1になることを確認することは､ 今でも必要なことです｡
‫しかし､ サポートベクトル分類器なので､ 今は多少の誤差項を許容しています｡
‫イプシロンを使っていますが､ このイプシロンは､ 設定したC値との関係です｡ このC値によって､
‫実際にどれだけの誤分類を許容できるかが決まります｡
‫つまり､ マージンにはこの誤差要因､ イプシロン係数があり､ イプシロン係数の合計が以下であれば､ ユーザーからCが提供される場所を確認することができる､
‫ということを除けば､ ほとんど同じ式なのです｡
‫そして､ クロスバリデーションを用いて､ 精度を最大にするため､ あるいは精度を最大にするため､ あるいは再現性を最大にするために､ ここで実際に最適化しようとしているものに応じて､
‫最適なCを解くことができるようになります｡
‫しかし､ これはサポートベクトル分類器の完全な定義であり､ 本質的には最大マージン分類器と同じものです｡
‫しかし､ このような制約を加えたり､ 誤判別をCの値で制約したりすることで､
‫Cがゼロになると､ 実際には最大マージンの分類器に戻り､ 本質的にエラーを許容しないことになります｡
‫さて､ このCの値について簡単に説明します｡
‫ここで数学的に定義した方法では､ C値を大きくすればするほど､ 誤差を許容することになることに気づくはずである｡
‫インサイトは､ 複数のモデルで一貫性を保ちたいからこそ､ 学ぶことができたのでしょう｡
‫正則化パラメータとして､ こちらの式で示されるCに反比例しているという｡
‫つまり､ 数学的に言えば､ ここで示した方程式では､ Cを増やすと､
‫洞察力が学習できる誤判定の数が増えるということです｡
‫ここに示した式に反比例しているのだ｡
‫もちろん､ サイキック・ラーニングの実験を始めれば､ もっと明確になるでしょう｡ しかし､
‫サイキック・ラーニングのドキュメントやサポートベクターマシンのクラスコールのCは､ 私がここで示している方程式や､
‫実際にサポートベクターマシンの方程式を読むときに通常読むものと全く同じではないことを心に留めておいていただきたいと思います｡
‫これは､ 正則化パラメータが複数のモデル間で一貫性を保つようにするためです｡
‫なるほど｡
‫では最後に､ サポートベクターマシンについて､ その数学的な定義を説明しましょう｡
‫データ点に対して明確に分離可能な超平面を見つけることができない場合､ サポートベクターマシンを使用する必要があることを思い出してください｡
‫ここでは､ 線で区切ることができないようなものがあります｡
‫真ん中にポイントがたくさんあって､ それを囲むように別のクラスがあるんです｡
‫そこで､ 前回説明したように､ これをある種の高次元､ 特徴空間に変換します｡
‫つまり､ x1x2からexpの数の特徴量があり､ x1､ x1の2乗､
‫x2の2乗､ XP､ xpの2乗を使った多項式変換のようなものが可能です｡
‫この大きな特徴空間に､ 2つのクラスをうまく分離できる超平面があるかどうかを調べようとするのです｡
‫そして､ この高い特徴空間でも誤分類を許容することができるのです｡
‫つまり､ 私がやりたいことは､ このマージンを最大化することなのです｡
‫しかし､ 今は､ これを拡張する特徴空間によって､ さらに多くのベータ係数を考慮する必要があります｡
‫つまり､ 数学的に整理すると､ ここでやっているのは､ 二乗多項式という単純なケースに対して足し算をしているのです｡
‫一般的なサポートベクターマシンではないことに留意してください｡
‫以前お見せしたサポートベクターマシンで特徴空間の展開が2乗になったところをお見せしているだけです｡
‫基本的にサポートベクターマシンは､ 最もシンプルなものの1つです｡
‫つまり､ もはやx1x2をずっとXPで考えるのではなく､ 2乗した特徴量も考えているのです｡
‫やはり､ マージンを最大化したい｡
‫Mですが､ 元の特徴量だけでなく､ 2乗した特徴量の係数も持っているんです｡
‫そして､ 分類ミスを許容しています｡ これは､ 実際には､ マージンの1倍からεを引いた値以上であるYの対象で､
‫εは､ ユーザーパラメータCで定義され､ 高い特徴空間であっても本質的に分類ミスを許容しています｡
‫そうすると､ この大きな特徴空間を利用したサポートベクターマシンでは､ 元の特徴の制約を超えて､
‫これらの点を正しく分類するために､ 実際の特徴空間をどのように分離すればよいかを考えることができるようになりますね｡
‫私は今､ xの2乗やxの2乗など､ より大きな特徴空間を考えているのですから｡
‫さて､ より大きな特徴空間に移行する際に生じる主な問題は､ この増大する複雑性を実際にどのように処理するかということです｡
‫さて､ 今回は多項式の次数が2の簡単な例しか示しませんでした｡
‫より複雑なデータセットでは､ この多項式をより大きくする必要がある可能性が高い｡
‫また､ 多項式の次数が大きくなると､ マージンを解くのに必要な計算量も大きくなり､
‫実際にそれだけのマージン計算をするのは無理があるかもしれない｡
‫その答えは､ ベクトルの内積を利用したカーネルトリックにある｡
‫DOT製品とも呼ばれる｡
‫サポートベクターマシンの計算で実際にカーネルのトリックを使う方法を紹介する前に､ ドットプロダクトや内積が実際に何を表しているかを簡単におさらいしておきましょう｡
‫ここでは､ 2つのベクトル間の内積を単純化しますが､ ベクトルは2次元だけでなく､
‫このように何次元にもなることを思い出してください｡
‫しかし､ ここでは簡単のため､ 2次元空間での使用とします｡
‫ベクトルAとベクトルBがありますが､ この2つのベクトル間のDOT積または内積は､ それぞれの下位成分の和を掛け合わせたものと定義されますね｡
‫つまり､ ここに示した2次元のベクトルがあるとすると､ x軸に沿った副成分とy軸に沿った副成分があり､
‫x軸に沿ってa oneとb one､ y軸に沿ってa twoとB twoと定義することができる｡
‫そして､ 3次元のベクトル､ 4次元のベクトルなどに進むと想像がつきます｡ には､ その次元ごとにサブコンポーネントがあり､ DOT製品にもサブコンポーネントがあるはずです｡
‫つまり､ この場合､ AとBの内積やDOT積は､ それぞれの下位成分の和を掛け合わせただけということになる｡
‫さて､ 数学の授業で習ったかもしれませんが､
‫積の定義や数学的表記はこれだけではありません｡
‫また､ 積は､ それぞれのベクトルの大きさに､
‫ベクトル間の次数のコサインを掛けたものと定義することもできる｡
‫さて､ なぜこのようなことも知っておく必要があるのでしょうか｡
‫このような形式で内積を考え始めると､
‫本質的にベクトル間の相似形になることに気がつく｡
‫つまり､ これはAの1倍Bの1＋Aの2倍Bの2というのと同じ計算になるわけです｡
‫本来は､ 製品のもうひとつの定義です｡
‫なぜこれが便利かというと､ このcosine
‫of thetaの生成で､ ベクトル間の類似性測定ができるからです｡
‫極端なケースを考えればいいのです｡
‫この間の度合いがゼロだったと想像してください｡
‫ゼロのコサインは1に等しく､ その積は本質的にベクトルAとベクトルBの大きさの掛け算であることを意味します｡
‫それは､ 次数が0であれば､ これらのベクトルが全く同じ方向を向いていることを意味し､
‫その次数またはコサインシータが100％似ていることを意味するので､
‫1に等しくなるはずだからです｡
‫また､ これら2つのベクトルが互いに垂直または直交している場合､
‫90度の余弦は0に等しく､ 積が0に等しいことを意味することに気がつくでしょう｡
‫そして､ 両者が正反対の方向を向いている場合､ つまり180度の余弦の場合､
‫負の1が発生し､ 本質的にはaの大きさとBの大きさの負の1倍であると言うことになる｡
‫つまり､ 明らかにこの内積は類似性測定と考えることができる｡
‫では次に､ カーディナル・トリックの議論に移ろう｡
‫線形サポートベクトル分類器をこの内積で考えると､
‫Xのある関数が､ 学習点の各ペアの内積にあるα項の和をかけたβナウに等しいと言うことができるのです｡
‫基本的には訓練観測のすべてのペアの内積を計算するのですが､
‫『エスラー』の第9章の読み物を見ていただくとわかります｡
‫もっと詳しく知りたい方は､ Cortez社やAPNIC社の出版物をご覧ください｡
‫また､ なぜこのような内積の計算を実際に行うことができるのか､ その理由もご紹介しています｡
‫でも今は､ 線形サポートベクトル分類器を積間値で書き直せるようになったということで､
‫そのまま受け止めてください｡
‫さて､ 学習オブザベーションのすべてのペアにあるアルファ・パラメータを掛けた内積を計算できるので､
‫この特定のケースでは､ アルファ・パラメータはサポート・ベクトルに対してのみ非ゼロであることに気づきます｡
‫では､ ちょっと話を戻して､ これが意味をなすかどうか見てみましょう｡
‫先ほど､ 線形サポートベクトル分類器をこの式で書き直すことができると言いましたが､
‫このベータ係数に特徴量そのものを掛けて計算するのではなく､ このアルファに学習観測値のすべてのペアの内積を掛けて計算しようとするのです｡
‫しかし､ このように書き直すと､ Alphaはそのプロット上で黄色くマークされたサポートベクトルに対してのみ非ゼロになることがすぐにわかるでしょう｡
‫さて､ これで納得していただけたでしょうか？
‫直感的に言えば､ マージンがサポートベクトルにのみ依存することを想起させる｡
‫マージンからすれば､ どうでもいいことなんですけどね｡
‫サポートベクトルにぶつかったら､ その先にどんなベクトルがあるのか､
‫そのマージンを最初に接触したサポートベクトルだけで定義しているので､ サポートベクトルだけを気にすればいいということで､
‫すでに計算量はかなり節約されています｡
‫それが､ マージンに接触するベクターです｡
‫このため､ Iは1に等しく､ n個の点まで書き換えることができ､
‫代わりにIの集合s（sはサポート点のインデックスの集まり）を考えるだけでよいのです｡
‫基本的には同じ式ですが､ αがその支持点にのみ依存することを示せるので､ 支持ベクトルの点のみを考慮し､
‫本質的にはそれほど多くの計算をする必要はありません｡
‫そして､ カーネル関数が登場する｡
‫そこで､ 2つの訓練点間の関数Kとして大佐関数を定義することにする｡
‫トレーニングポイントIとトレーニングポイントIプライム｡
‫そして､ これは次のような和 x of j multiply by
‫x v prime of j と等しくなることを示すことができます｡ これは内積とカーネルのように見えるので､ 明らかに見覚えがあるはずです｡
‫2つの観測結果の類似性を数値化するだけの関数と考えることができます｡
‫そして､ DOT積と内積が本質的に類似性の測定であることは､ 先ほどお話したとおりです｡
‫つまり､ 線形サポートベクトル分類器の方程式を実際に見てみると､
‫内積を使って定義していることがわかります｡
‫内積が各副成分の乗算の和に等しいという関係を利用して､
‫カーネル関数を新しく書き直したサポートベクター分類器に入れ替えることができるのです｡
‫そして､ 実はカーネル機能はたくさんあるんです｡
‫ここでは最も単純なカーネル関数を示していますが､
‫これは単なる線形カーネルですが､ 多項式カーネルを通知することもできます｡
‫今は､ このカーネル関数と計算したい度合いの関係があって､
‫それを計算しているだけです｡
‫フルフィーチャースペースで実際に計算することがなくなったので､
‫計算の手間を省くことができるようになりました｡
‫カーネルを計算しているのですが､ これは内積です｡
‫もう一つの人気大佐は､ RBFラジオ・ベーシスト・ファンクションと呼ばれるラジオ・ベーシスト大佐である｡
‫これはもっと複雑な大佐で､ 実際に内積を使わずにこれを計算しようとすると､
‫実は理論上は無限の計算比較が生まれてしまうのです｡
‫ですから､ 数学的にこれを行うには､ 内積を利用するカーネル関数を使うしかありません｡
‫そこで､ カーネルを代替品として使用することをカーネルトリックという｡
‫そして､ サポートベクターマシンを使うと､ 実際にそのようなことが起こるのです｡
‫サポートベクトル分類器からその関係を内積で書き換えることができるんです｡
‫そして､ 本質的に類似関数として定義されたさまざまなカーネルが用意されており､
‫内積が発生する場所であればどこでも入れ替えが可能です｡
‫そして､ カーネルは､ 学習点の異なるペアごとに計算を行えばよいので､
‫拡大された特徴空間での計算を回避することができるのです｡
‫私たちが考えるべきは､ そのサポートベクトルそのものだけなのです｡
‫その詳細については､ 第9章をご覧ください｡ 3. 2とEisler｡
‫さて､ 直感的に分かることは､
‫内積はベクトル間の類似性の測定として働くということです｡ サポートベクターマシンを直感的に説明すると､
‫カーネルのトリックで少し曖昧になっているかもしれませんが､ カーネルの使用は､ 元の特徴空間と拡大した特徴空間の類似性の測定として考えることができるということです｡
‫つまり､ 拡大した特徴空間で実際に計算をするのではなく､
‫カーネルが元の特徴空間と拡大した特徴空間の類似度の指標を与えてくれるということにして､
‫代わりにカーネルを使って計算をすることで､ 拡大した特徴空間での計算量を大幅に削減することができます｡
‫なるほど｡
‫さて､ サポートベクターマシンの理論と直感を理解したところで､
‫実際にコードで使ってみることにしよう｡
‫それでは､ 次回の講義でお会いしましょう｡