pythonでできる!分かりやすいSVM(サポートベクターマシン)

こんにちは!
IT企業に勤めて、約2年間でデータサイエンティストになったごぼちゃん(@XB37q)です!

このコラムでは、SVMという分析手法を紹介します。
SVMは通称サポートベクターマシンとも呼ばれますが、このコラムではSVMという言葉で紹介していきます。
回帰分析や決定木分析と比較すると、少しイメージがしづらいため、理解が難しく中級レベルだと思います。

SVMは数値の予測や画像認識に使われる分析手法です。
また、精度も高い手法でもあり古くからよく使われる手法です。

SVMのイメージをつかむ

簡単に理解できるSVMのイメージ
簡単に理解できるSVMのイメージ

SVMとは、データに境界線を引いて分類を行う分析手法です。

回帰分析では、データを表すための直線を引いて、数値を予測したり傾向を把握するための手法でした。
SVMは直線を引いて、データを分類するための手法です。

SVMの使い方を知る

SVMは、数値の予測や画像認識に使われる分析手法です。

SVMの考え方を知る ~ソフトマージン~

簡単に理解できるSVMの考え方~ソフトマージン~
簡単に理解できるSVMの考え方~ソフトマージン~

それでは、実際にSVMの考え方を紹介していきます。
まず初めの章ではSVMはデータを分類するための手法と紹介しました。
それでは、どのように線を引くことできれいに境界線を引くことができるのでしょうか?

上の図の例で説明すると、データのを分割できる線は何本でも考えることができます。
①、②、③の中で考えてみると、直感的に②の境界線が1番きれいにデータを分割できている境界線だということが見てわかると思います。

このように、SVMは境界線とデータとのそれぞれの距離を最大化する箇所に境界線を引く分析手法です。

簡単に理解できるSVMの考え方~ソフトマージン2~
簡単に理解できるSVMの考え方~ソフトマージン2~

しかし、先ほどの例のように境界線1本で完璧にデータを分割できるような都合の良いデータは存在しません。

そこで、ある程度の誤判別を許すことを前提としたマージンの取り方を「ソフトマージン」と呼びます。
マージンとは境界線とデータの距離のことです。

「ソフトマージン」では、下記の2つを満たすように値を調整していく考え方です。

  • 境界線とデータはなるべく離す(大きくする)
  • 誤判別はなるべく少なくする

このように、なるべく分割の精度が高くなるような考え方で、SVMが成り立っています。

SVMの考え方を知る ~カーネル法~

簡単に理解できるSVMの考え方~カーネル法~

きれいに分割できるデータは少ないと前の章では説明しました。
それでは上図のようなデータの場合はどうでしょうか?
一本の直線で分割するためにはどうすればよいでしょう?
このように複雑なデータの場合、このままでは1本の直線で分離することは出来ません。

ここで用いられる考え方がカーネル法という考え方です。
カーネルトリックとも呼ばれますが、このコラムではカーネル法という言葉を使います。
2次元のままでは1本の境界線でデータを分割できないため、カーネル法を使うことにより、2次元のデータを超次元のデータに変換することで、線形分類可能にしています。

超次元とは、3次元や4次元など、次元数が多い次元のことを表します。
4次元以上を人間が目で解釈することは不可能ですが、数学を使えばその計算を行うことが可能なのです。
そうして、データを変換し、その変換先で1本の境界線を用いてデータを分割します。

この「カーネル法(カーネルトリック)」を用いて線形分離可能な形を作ることがSVMのポイントです。

まとめ SVMのメリットとデメリット

メリットとデメリット
メリットとデメリット

メリット

  • 汎化性能が高く、応用分野も広い
  • 「マージン最大化」の考えに基づき、主に2値分類の分類問題に利用
  • 回帰や異常検知、また多クラス分類への応用も可能

デメリット

  • 計算コストが比較的大きいので、大規模なデータセットには適していないため、主に中小規模のデータセットで利用される