Gpyで線形重回帰をやろうとおもうとこうなる。
x1とx2とXという行列にまとめるくらいで単回帰とほとんど変わらない内容で実行可能。
import numpy as np import GPy import matplotlib.pyplot as plt # データ x1 = np.array([1, 2, 3, 4, 5]) x2 = np.array([2, 6, 6, 9, 6]) X = np.column_stack((x1, x2)) # x1とx2を一つの行列にまとめる y = np.array([1, 3, 4, 7, 9]).reshape(-1, 1) # 線形kernelのGPRモデル kernel = GPy.kern.Linear(input_dim=2, variances=1) # input_dim=2に設定 model = GPy.models.GPRegression(X, y, kernel) # 最適化 model.optimize() # 予測値と信頼区間の計算 x1_pred = np.linspace(0, 6, 100) x2_pred = np.linspace(0, 10, 100) X_pred = np.array([(x1, x2) for x1 in x1_pred for x2 in x2_pred]) mean, cov = model.predict(X_pred, full_cov=True) std_dev = np.sqrt(np.diag(cov)) # 具体的な点での計算(今回はx1=3、x2=7) input_example = np.array([[3, 7]]) # 予測値の計算 mean_example, var_example = model.predict(input_example) std_dev_example = np.sqrt(var_example) lower_bound = mean_example - 1.96 * std_dev_example upper_bound = mean_example + 1.96 * std_dev_example print(f"予測値: ({mean_example})") print(f"95% 信頼区間 : ({lower_bound[0][0]}, {upper_bound[0][0]})")
予測値: ([[4.81907233]]) 95% 信頼区間 : (3.1468478821576604, 6.491296773116558)