ぺーぱーの日々

上機嫌でいること、夢中でいることを目標に、今日も色んなことに手を出します。

MENU

機械学習のアルゴリズム実装(サポートベクターマシン)

以下のサイトを参考に、ランダムフォレストを実装してみる。

機械学習アルゴリズムの分類と実装まとめ - Qiita

 

やりたいこと

サポートベクターマシンの実装

サポートベクターマシンの目指すもの

マージンを最大化することでより良い決定境界を得る手法。

実装する前の仮説

  • ベクター」という言葉から、ベクトル(方向性)を想起
  • 「決定境界」という言葉から、「ここから上は自信あり」みたいなラインを導くと予想
  • 前回やったロジスティクス回帰のように、回帰版と分類版で予測精度に誤差が出ると予想。今回も分類版ほうが1により近いか?

実装

このアルゴリズムにも、どうやら回帰と分類2つのバージョンがあるらしい。

回帰版

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.svm import SVR

# データの読み込み
boston = load_boston()
X = boston['data']
y = boston['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)

model = SVR(kernel='linear', gamma='auto')
model.fit(X_train, y_train)

score = model.score(X_test, y_test)

print('score is', score)

分類版

from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC

# データの読み込み
wine = load_wine()
X = wine['data']
y = wine['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)

model = SVC(gamma='auto')
model.fit(X_train, y_train)

score = model.score(X_test, y_test)

print('score is', score)

得られたアウトプット

回帰版

score is 0.6169612118734573

分類版

score is 0.4444444444444444

わかったこと

サポートベクターマシンを実装するには、sklearnのSVCモジュールを使う

・回帰版と分類版で実行実行結果が違う

・回帰版の方が、1に近い

(恐らく、回帰版の方が予測精度が高いことを意味している)

・実装手順で違う箇所は、SVCメソッドの変数にkarnelを渡すか否か。

まとめ

今回も、回帰版と分類版の2つの手法があるアルゴリズムを実装した。得られた結果が、どちらも1からかなり離れていて、1に近ければより予測精度が高いという自分の仮説通りであれば、今回得られた予測精度はかなり低いと言える。

後々調べるべき単語

カーネル(kernel)

ガンマ(gamma)

サポートベクターマシンが学習に向いているケース