サポートベクター回帰(SVR)のメモ

機械学習




Suport Vector Regression

RBFカーネル法を用いたSVMをモデルとした回帰

特徴量に対して明示的な変換を行わなくても、多項式回帰と同じような複雑な予測をすることができる。

結果(グラフ)

他の回帰と比較

Linearモデル(単回帰)と、多項式回帰を比較した。

サポートベクター回帰が柔軟なことがわかる。

ソースコード

import numpy as np
from sklearn.svm import SVR
import matplotlib.pyplot as plt
import math
import time

np.random.seed(0)

#データを作る
X = np.linspace(0, 2*math.pi, 40)
y = np.sin(X)

#サイズを合わせる
X = X.reshape(40,1)

#ノイズの入れる
y[::2] += np.random.rand(20)

#予測用データ
X_pre = np.linspace(0,4*math.pi,40)
y_pre = np.sin(X_pre)
X_pre = X_pre.reshape(40,1)

#サポートベクター回帰(SVR)
svr_rbf = SVR(kernel='rbf', C=1e3, gamma=0.05)
y_rbf = svr_rbf.fit(X, y)
y_rbf = y_rbf.predict(X_pre)



#プロット
lw = 2
plt.scatter(X_pre, y_pre, color='darkorange', label='predict')
plt.scatter(X, y, color="red", label='data')
plt.plot(X_pre, y_rbf, color='navy', lw=lw, label='RBF model')
plt.xlabel('data')
plt.ylabel('target')
plt.title('Support Vector Regression')
plt.legend()
plt.show()

参考

sklearn.svm.SVR
...
Support Vector Regression (SVR) using linear and non-linear kernels
...
タイトルとURLをコピーしました