読者です 読者をやめる 読者になる 読者になる

かゆいとこログ

あと少しなのに良く分からないものを解説したいね

SVM(Support Vector Machine)のきほん


f:id:physickelback:20161017225714j:image

ここのところ人工知能が大ブームとなっておりますね(*^^*)

自分も最近、自然言語処理の勉強を始めたところです。

 

何?自然言語処理って言葉知らない?

 

簡単に言うと、人間の言葉を使ってコンピュータとやり取りすることを可能にする技術分野ですかね。

対話型で言ったらiPhoneのSiriとかMicrosoftのりんなちゃんとかがいますよね!

将来的には今よりも数段レベルの高い対話型のAIが登場しているでしょう。

それらの鍵となっているのが自然言語処理なんです。

 

ここでは、自然言語処理はじめ、人工知能分野において広く使われるSVM(Support Vector Machine)について勉強していきましょう。

 

1. SVMが対象とするタスク

SVMは2値分類を行うタスクに対して用いることができます。

2値分類というのは、与えられた各データに対して、そのデータが正クラスに属すのか負クラスに属するのかを判別するタスクです。

ここで、以下の問題について考えてみましょう。

 

【例】:今日の平均気温と平均湿度をもとに明日の天気を予測したい。

ここでは、正クラスが晴れ、負クラスがそれ以外に対応するものとします。

 学習データ:
f:id:physickelback:20161017231906j:image

※あくまで概念を理解するための記事ですので、値はテキトーです。

上のような学習データを学習した後、今日の平均気温と平均湿度が15度、40%だったとします。

さて、明日は晴れるでしょうか?

 

 2.SVMの考え方

まずはSVMの考え方を知るために、上の学習データをグラフにプロットしてみましょう。

すると、以下のような図が得られます。

f:id:physickelback:20161018002016j:image

(注)正クラスが晴れ、負クラスがそれ以外に対応しています。

 

人間であれば、左下の方に打たれる点は晴れ(正クラス)となり、

右上の方の点は負クラスとなっていることが直感的に分かるでしょう。

今日のデータ(15度、40%)をプロットしてみると…

f:id:physickelback:20161018210106j:image

 

今日のデータは正クラスに分類され、明日は晴れるということが直感でわかってしまいますね。

ではこれをコンピュータに判断させるにはどうしたら良いのでしょうか。

 

答えは案外シンプルで、

f:id:physickelback:20161018210846j:image

このように、正クラスと負クラスの間に分離直線を引かせて、点がそれよりもどちら側に属しているかで判別してやればいいんですね!

ここで、この直線をどう引かせるかが問題となってきます。

この直線の引き方をうまく定めたのがSVMというアルゴリズムなんです。

皆さんは、以下の3種類の分離直線、どれが一番うまく機能すると思いますか?


f:id:physickelback:20161018211446j:image

 

そうです。真ん中ですよね。

左右のように、片側に寄ってしまっていると分離直線付近の点に対して正しいクラス分けができない気がします。

SVMはこの直感に基づいて、分離直線と各クラスの点とが出来る限り離れるように直線を引くんです。

これをマージン最大化と呼んでいます。

 

 

ここまで読んできたけど、SVMってショボくね?

だって上の問題とか人が見れば一発で分かんじゃん。

と思ったそこのあなた。

まだSVMを分かっていませんね。

 

今回例に挙げたのは平均気温と平均湿度という、たった2つのパラメータから明日が晴れか否かを推定するという問題でしたが、パラメータは2つに限らず、3つ、4つ、いや、原理的にはいくつあっても良いのです。

例えばパラメータが3つの場合は、3次元座標にプロットされる学習データに対して分離平面を考えます。

また、4次元以上の場合は超平面による分離を行うことになります。

(ここまで"分離直線"という言葉を使ってきましたが、直線になるのは2次元の場合のみですので、一般的にはこのように"分離平面"といいます。) 

 

ということでSVMの概念、分かって頂けたでしょうか?

お疲れ様でした!

概念を理解したところで今回はオシマイです〜。

 次回は「マージン最大化」を数式に落とし込んでより具体的な解説をしていきます(๑•̀ㅂ•́)و✧

 

[Caption]

後半部分でSVMは最強であるみたいな書き方しましたが、SVMは基本的にそのままでは線形な問題にしか適用できないという大きな欠点があります。これについての詳細はまた別の記事に書こうと思います。

 

参考:

言語処理のための機械学習入門

https://www.amazon.co.jp/dp/4339027510