引き続きガウス過程回帰(GPR)を勉強中。今回はGpy版。最近はとりあえずchatGPTに投げて、その中身を調べて勉強してます。
kernelをGPy.kern.Linearとすることで線形モデルに近くなるらしい。
import numpy as np import GPy import matplotlib.pyplot as plt # データ x = np.array([1, 2, 3, 4, 5]).reshape(-1, 1) y = np.array([2, 6, 6, 9, 6]).reshape(-1, 1) # 線形カーネルを使ったGPRモデル kernel = GPy.kern.Linear(input_dim=1, variances=1) model = GPy.models.GPRegression(x, y, kernel) # 最適化 model.optimize() # 予測値と信頼区間の計算 x_pred = np.linspace(0, 6, 100).reshape(-1, 1) mean, cov = model.predict(x_pred, full_cov=True) std_dev = np.sqrt(np.diag(cov)) # 結果 plt.figure() plt.plot(x, y, "kx", mew=2, label="Data") plt.plot(x_pred, mean, "b-", label="GPR Mean") plt.fill_between(x_pred[:, 0], mean[:, 0] - 2 * std_dev, mean[:, 0] + 2 * std_dev, alpha=0.3, label="95% Confidence Interval") plt.xlabel("x") plt.ylabel("y") plt.legend() plt.show()
ちなみに非線形の解析になるとこんな感じだった。
kernel = GPy.kern.RBF(input_dim=1, variance=1, lengthscale=1)