以下のサイトを参考に、ランダムフォレストを実装してみる。
やりたいこと
サポートベクターマシンの実装
サポートベクターマシンの目指すもの
マージンを最大化することでより良い決定境界を得る手法。
実装する前の仮説
- 「ベクター」という言葉から、ベクトル(方向性)を想起
- 「決定境界」という言葉から、「ここから上は自信あり」みたいなラインを導くと予想
- 前回やったロジスティクス回帰のように、回帰版と分類版で予測精度に誤差が出ると予想。今回も分類版ほうが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)
サポートベクターマシンが学習に向いているケース