偏ったデータでの関数フィッティングを試す

偏ったデータの作成(トレーニング用)

In [43]:
import numpy as np
import random
import sklearn.linear_model as lm
import matplotlib.pyplot as plt

def clustered_x():
    # データ数
    n_tr1 = 10
    n_tr2 = 5
    x_max = 5.0 # xの範囲 [0, x_max]
    x = np.random.randn(n_tr1)*0.3
    x1 = np.random.randn(n_tr2)*0.8 + 1.8
    return np.hstack([x,x1])
    
x = clustered_x()
f_cos = lambda x: np.cos(2.0*x) # サンプルデータを作るためのベース関数
y = f_cos(x) + np.random.randn(len(x))*0.3
# データの描画
plt.plot(x, y, "ob", ms=8)
Out[43]:
[<matplotlib.lines.Line2D at 0x7f162056b940>]

SVRのテスト

In [44]:
from sklearn import svm

# svrの利用
svr = svm.SVR(kernel='rbf')
svr.fit(x[:, np.newaxis], y)

# 回帰曲線用データ
x_plot = np.linspace(-0.5, np.pi, 1000)
y_plot = svr.predict(x_plot[:, np.newaxis])
    
#グラフにプロットする。
plt.scatter(x, y)
plt.plot(x_plot, y_plot, label="SVR prediction")
x_curve = np.linspace(-0.3, np.pi, 100)
plt.plot(x_curve, f_cos(x_curve), label="cos(x)")
plt.legend()
plt.show()
In [ ]:
 
In [ ]:
 
In [ ]: