SVR(rbf)回帰によって、連続データを線形回帰分析する手法を、実装・解説します。
本記事ではrbfカーネルを適用した回帰手法を紹介します。
rbfカーネルを使用することで、非線形な回帰分析が可能になります。
直線ではフィッティングできないデータに対して、SVR rbfを使用することが推奨されています。
SVR rbf回帰分析は以下のscikit-learnマップの黒矢印に対応します。
目的変数の量を求める→サンプル数10万以下→説明変数xの特徴量のすべてが重要→通常の回帰分析がうまくいかない→[SVR rbf]
です。
SVR rbfの実装
直線でうまく回帰分析できない例として、sin波からデータを生成し、SVR rbfを適用します。
実装コードは以下の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | # 1:ライブラリのインポート-------------------------------- import numpy as np #numpyという行列などを扱うライブラリを利用 import pandas as pd #pandasというデータ分析ライブラリを利用 import matplotlib.pyplot as plt #プロット用のライブラリを利用 from sklearn import cross_validation, preprocessing, linear_model, svm #機械学習用のライブラリを利用 # 2:データの生成-------------------------------- # Generate sample data numSamples=80 x = np.sort(5 * np.random.rand(numSamples, 1), axis=0) y = np.sin(x).ravel() y= y + 0.2 * (np.random.randn(numSamples)) x_true=np.arange(0, 5.0, 0.1) # 3から10まで1刻み y_true = np.sin(x_true).ravel() # 解説3:SVR rbfを適用する-------------------------------- clf_svr = svm.SVR(kernel='rbf', C=1e3, gamma=0.1, epsilon=0.1) clf_svr.fit(x, y) y_rbf = clf_svr.fit(x, y).predict(x) # 4:プロットしてみる------------------------------------------ %matplotlib inline plt.scatter(x, y, color='darkorange', label='data') plt.plot(x_true, y_true, color='navy', label='sin') plt.plot(x, y_rbf, color='red', label='SVR(RBF)') plt.legend() plt.show() |
結果は次の通りになります。
赤色がSVR rbfの結果です。
直線ではなく、曲線でフィッティングされていることが分かります。
また元のsin波とも近い結果です。
実装コードを解説します。
# 解説3:SVR rbfを適用する——————————–
clf_svr = svm.SVR(kernel=’rbf’, C=1e3, gamma=0.1, epsilon=0.1)
ここでSVR回帰を指定しています。
カーネルはrbfを指定しています。
Cはペナルティ項の係数です。
gammaはrbfカーネルの形を決めています。
epsilonは回帰直線からどれだけ離れたらペナルティをかけるかを指定します。
それでは「結局、SVR rbfって何をやっていたの?」を説明します。
SVRの心
正確な情報は以下をご覧ください。
SVRについては前回記事と同じです。
今回はただカーネルの形が違うだけとなります。
以上、Pythonとscikit-learnで学ぶ機械学習入門|第19回:SVR rbf回帰での回帰分析でした。
次回はensemble手法による非線形回帰について説明します。