サポートベクターマシンの説明

サポートベクターマシン(Support Vector Machine: SVM)とは機械学習における教師あり学習の パターン認識 のアルゴリズムのひとつである。

パターン認識とは「何らかの入力が与えられたときに、 その入力パターンを解析して適切なカテゴリに分けること」。

「顔であるかないか」といったふたつに分類する画像認識や、「どの文字であるか」といった文字認識(複数の分類)などに用いられる。

教師データとして与えられたデータを分類したあとに、未知のデータ(学習しなかったデータ)をうまく分類するのが SVM の役目。

画像認識の例:

  • 歪んだ文字が撮影された写真(画像データ)と、その文字が何であるかという問題と回答を SVM に学習させる。つまりあらかじめ識別、分類した結果をコンピュータに覚えさせる。
  • この学習を繰り返す。
  • 未知の写真(画像データ)を SVM に与えると、その写真に何が写っているのかを分類をしてくれる

画像以外にもメールの文章から「迷惑メールなのか、そうでないのか」といったことも識別できます。

特徴抽出

下のふたつの写真を見た時に上の写真がバナナで下の写真にはリンゴが写っていることを識別できる。

Banana - Isolated

0133

私達人間がこれらの写真がバナナであることやリンゴであることを分類できるのは色や形を認識しているからである。

コンピュータはこうした識別能力を持たないので人間が「これはバナナの写真だよ」「こっちがリンゴの写真だよ」というのを学習させるわけですが、 色や形といった特徴となるデータ を与えてやらなければ、それ以外のデータを学習してしまって識別能力が悪くなる。

つまり、入力データとして写真のバイナリ表現を使っても、果物の周りにある情報(例えば背景の白色など)から問題と解答の組み合わせを学習してしまう。

このような学習の誤りを極力減らすためにはバナナの写真からバナナだけが写っている部分を抜き出す作業(前処理)も必要なのだ。 こうした作業を 特徴抽出 という。

もちろん教師データはコンピュータが扱えるように数字の表現に変換する必要がある。 データはベクトルにするので変換されたものを特徴ベクトルと呼ぶ。

機械学習では特徴ベクトルを色々試して精度の高いモデルを作る。 「特徴を持った入力データと特徴に対応するラベル」を教師データとして学習させることが性能の良い SVM を生み出す。

ちなみ、この特徴抽出を自動的に行なう機械学習が『ディープ ラーニング(深層学習)』と呼ばれるシステムだ。

ナンバーズの予想に使うには

いかに特徴抽出を行うかが鍵になってくる。

今回、特徴ベクトルを前回の抽せん数字として、正解データは次回回号の抽せん数字とする。

下記の例はあくまで SVM の使用例を紹介するので非常に小さな教師データとなっていますし、 この教師データを拡張してすべての回号に当てはめても予測の精度は悪いです。 教師データ(特徴ベクトルと正解の組み合わせ)は自分なりに考えてみて下さい。

参考ページ: 機械学習をこれから始める人に押さえておいてほしいこと

第1回から第6回の抽せん数字を教師データとした例。 ただし識別のラベルとなるデータは次回の回号なので特徴ベクトルは全5回になります。

from sklearn import svm
import numpy as np

# 特徴ベクトル
# 第1回から第5回の抽せん数字
X_train = np.array([[1, 9, 1],
                   [9, 8, 8],
                   [1, 9, 4],
                   [1, 0, 5],
                   [5, 9, 2]])
# 正解データ
# 第2回から第6回の抽せん数字
y_train = np.array([988, 194, 105, 592, 792])

# sklearn の svm.SVC を使った機械学習
clf = svm.SVC()
clf.fit(X_train, y_train)

# 未知のデータ(特徴ベクトル)を与えて予測する
clf.predict([0,0,0])
# array([592])

# 予測精度を調べる (学習済みのデータで計測しているので結果は100%になる)
clf.score(X_train, y_train)
# 1.0

最終更新日: 2016年02月14日(日)


Back to top