【Gpy】pythonのGpyを使って線形重回帰分析の信頼区間を計算する【chatGPTメモ】

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)