Sasaki Peter

pharmaceutical programmer

サポートベクトルマシン(SVM)について

2019-05-09 sasaki peterdata-science

概要

ランダムフォレストやXGboostとよく比較される、教師あり学習のモデル構築法。

それらと同じく、分類、回帰どちらにも使用できる。

ランダムフォレストと違って、しっかりパラメータの調整をしないと精度が出ない。そして、ニューラルネットワークなどと異なり、何でもかんでもデータが大きければいいモデルが作れるというわけではなく、外れ値のようなデータはあらかじめ除き、本当に予測に必要となる一部のデータに絞らないといけないらしい。

これは変数選択的な意味ではなく、同じ変数内での外れ値の除去とかそういう意味である。

サポートベクトルとは

サポートベクトルとは予測に必要となる一部のデータのことで、このベクトルを算出して未知のデータに対する予測を立てるのが、サポートベクトルマシンである。

この予測に必要となる一部のデータを抽出するのに、マージン最適化を行う。

サポートベクトルとは、最も最適な境界関数を求めるのに必要な実測値のこと、と捉えた。

つまり、最適な予測モデルの周辺にあるデータのことで、そのモデルをサポート、支持するベクトルということだ。

この、境界とサポートベクトルとの差、すなわちマージンを広く取れば広く取るほど、より明確に分類できるということになる。

したがって、このマージンを最大化する処理を行うことで、精度のいいモデルを作るというのがサポートベクトルマシンの理論っぽい。

ハードマージンとソフトマージン

さて、その境界についてだが、これを100%、入力データに合うように設計するのも、やりすぎで、誤差のようなデータがある場合、精度が大幅に落ちてしまう。いわゆる過学習である。

これが外れ値のような値をあらかじめ抜いておかないといけない理由であるが、そんなの正直わからん。

そこで、このモデルを作成するときに、マージンを調節することでいい塩梅に誤差を許すことができる。

このゆるいマージンをソフトマージンという。

ソフトマージンは、境界からできるだけ遠いサポートベクトルを用いつつも、誤判断は少なく設計する。

すなわち

1margin+Cerrorcount\frac{1}{margin} + C * errorcount

が最小になるようにするということである。

これが一種の損失である。

このCというのが誤判別をどこまで許容するかを表したパラメータである。

これが小さければ、誤判別は気にしないことになる。 それは間違いの個数を無視するから当たり前だ。

これが大きいと誤差を許さんというハードマージンになるというだけの話。

このパラメタはSVMを用いるときに投げてやるハイパーパラメータの一種である。

ハイパーパラメータとは、モデル作成時に設定してかなければならないパラメータの総称で、バッチサイズや、学習率、データの入力数などが考えられる。

つまり、モデル構築を行うにあたり、自動で最適化されないパラメータのことである。

これは外部から人間が試行錯誤して最適な値を探索する必要がある。

その探し方に、グリッドサーチや、ベイズ最適化が存在してる。

話が逸れたが、元に戻ると、ソフトマージンの場合は、誤判別されたデータもサポートベクトルだとみなした挙動になるらしい。

主問題と相対問題

この、表現、非常にわかりやすいから、メモっておく。

ニューラルネットワークだと、損失を最小にするというのが主問題で、行いたいこと。 しかし、これを考えるときに、どのように最小点を探索するかというと、相対問題を設定する。 それは微分して、その傾きが0になる点を探索するという問題にすり替える。

この傾きを勾配という。

この勾配が負だったら正の方向へ、正だったら負の方向へパラメータを更新することで、探索しているというわけ。

この微分するなどの計算手法をまとめてカーネルトリックというらしいのだが、サポートベクトルマシンに用いるカーネルトリックとして以下が挙げられる。

  • 線形カーネル: linear
  • 多項式カーネル: poly
  • ガウシアンカーネル: rdf

オリジナルのカーネルトリックも編み出せる。

SVRについて

SVC、すなわち分類の場合は、以上のような考え方でできるが、回帰の場合は予測誤差に工夫を凝らす。

それが不感損失関数、εらしい。

これは残差の周辺が0になる関数で、ReLUを線対称にふたつくっつけたようなやつである。

すなわち、最適なモデルと実測値の差であるところの、残差がε より大きかったり、-εより小さい時は、そのままの値を損失として定義し、その間の値であった場合には、損失はない、0だ、としてしまう。

この間に残差が来るようにモデルを構築して、出来上がり!とするのが回帰の場合なので、このεもハイパーパラメータの一種である。