GPy를 사용한 고스 프로세스 회귀

고스 프로세스 회귀


샘플링된 입력x에 대응하는 출력y새 입력 x' 으로 출력되는 예측치 y' 의 기대치와 색산을 되돌려주는 회귀 모델을 만듭니다.
유한한 견본점에서 함수를 예측하는 진실한 형식에 쓰인다.
https://jp.mathworks.com/help/stats/gaussian-process-regression-models.html
고스 프로세스 회귀 모델을 처리하기 위해 GPy라는 python 라이브러리를 사용합니다.
https://gpy.readthedocs.io/en/deploy/#

실제 함수 그리기


입력은 2차원으로 하고, 진정한 함수는 여현 함수를 통과하는 값의 합계로 한다.
temp.py
import numpy as np

# 関数の定義
def func(x):
    fx = np.sum(np.cos(2 * np.pi * x))
    return fx

xa = np.linspace(-1, 1, 101)
ya = np.linspace(-1, 1, 101)
Xa, Ya = np.meshgrid(xa, ya)

Za = np.zeros([101, 101])
for i in range(len(Xa)):
    for j in range(len(Ya)):
        x = np.array([Xa[i,j], Ya[i,j]])
        Za[i,j] = func(x)

# 描画
import matplotlib.pyplot as plt
fig1 = plt.figure(figsize=(8,8))
ax1 = fig1.add_subplot(111)
ax1.contour(Xa, Ya, Za, cmap="jet", levels=10, alpha=1)
plt.xlim(-1,1)
plt.ylim(-1,1)

샘플링


낭비하지 않고 샘플링하는 방법으로는 소볼 시퀸스와 라틴 하이퍼큐브 삼플링 등이 있다.
이것들을 사용하지 않고, 여기는 간단하게 무작위로 견본점을 확정한다.
샘플 점수는 처음에 20점을 적게 계산했다.
temp.py
import random
random.seed(1)

# ランダムにサンプリング
n_sample = 20
Xa_rand = [random.random()* 2 - 1 for i in range(n_sample)]
Ya_rand = [random.random()* 2 - 1 for i in range(n_sample)]

xlist = np.stack([Xa_rand, Ya_rand], axis=1)
Za_rand = []
for x in xlist:
    Za_rand = np.append(Za_rand, func(x))

# 描画
ax1.scatter(Xa_rand, Ya_rand)
방금 전의 그림에 견본점을 그리다.
하반부는 괜찮고 상반부는 샘플이 적어 SKY입니다.

고스 프로세스 회귀


고스 프로세스 회귀 모델을 구축하다.GPy.kern에서 내장 함수를 선택하십시오.여기는 2차원 RBF 커널입니다.GPy.models.GPRegression에서 회귀모델을 구축하고 model.optimize에서 조화모델의 매개 변수를 조정한다.
temp.py
import GPy

# 学習用データ
Input = np.stack([Xa_rand, Ya_rand], axis=1)
Output = Za_rand[:,None]

# ガウス過程回帰モデルを構築
kernel = GPy.kern.RBF(2)
model = GPy.models.GPRegression(Input, Output, kernel)
model.optimize(messages=True, max_iters=1e5)

# 描画
model.plot(levels=10)
plt.gcf().set_size_inches(8, 8, forward=True)
plt.xlim(-1,1)
plt.ylim(-1,1)
plt.xlabel("x1")
plt.ylabel("x2")
응답 서피스를 그립니다.
불과 20점과 상당히 적은 점수였지만 의외로 대략적인 골짜기를 재현할 수 있었다.
상반부의 오차가 매우 크다.

신뢰 영역 그리기


반응 곡면의 단면을 봐라.
x2=0 단면

x1=0 단면

연한 남색 끈은 2.5~97.5%의 신뢰 구간을 나타낸다.
신뢰 구간의 폭이 클수록 회귀 결과의 편차가 크다.
가장 큰 곳은 역시 자신이 없다.

샘플링 수 증가 시

n_sample = 40

n_sample = 100


샘플링의 수량이 많을수록 신뢰 구간의 폭이 좁아지고 회귀 결과의 편차가 작아진다.

총결산


GPy를 사용하여 고스 프로세스 회귀 모델을 구축했다.

좋은 웹페이지 즐겨찾기