고스 프로세스 회귀를 위한 설치~InfTucker 목표
17414 단어 고스 프로세스 회귀InfTuckerGPLVMPython
이 보도는 고천 연구실 학생들이 학습의 일환으로 쓴 것이다.내용이 때때로 애매하고 표현 방식이 다소 다르다.
개시하다
InfTucker는 가우스 프로세스에 기반한 장량 분해 방법입니다.(원저논문+DeepL에 근거)
장량 분석 관계 연구를 하는 저에게 이것은 매우 실현하고 싶은 기법이지만 고스 과정을 모르면 손을 댈 수 없기 때문에 저는 먼저 고스 과정으로 고스 과정으로 돌아가기로 결정했습니다.
고스 과정의 회귀를 이해하고 실시하는 과정에서 고스 과정의 청사진을 참고했다.알고리즘도 있어서 금방 조립할 수 있어요.
고스 프로세스 회귀
고스 프로세스는 N개의 입력 집합\mathbf{X}=(x1, x2,..., xN)달러, 다변수 고스 분포 예측에 따라 $p(\mathbf{Y})$를 동시에 분포하고 $\mathbf{X}에 대응하는 출력 $\mathbf{Y}=(y 1, y 2,..., y N)$의 확률 프로세스를 계산합니다.
확률 프로세스는 확률 모델을 가리키며 입력 집합 $\mathbf{X}에 대응하는 확률 변수의 집합 $\mathbf{Y}에 $p(\mathbf{Y})$를 동시에 분포하는 확률 모델을 말한다.스스로 N개의 입력에 대해 대응하는 N개의 출력을 무작위로 출력할 수 있는 장치로 해석한다.
이번에 실시된 고스 프로세스 회귀는 고스 프로세스를 바탕으로 하는 회귀 모델이다.고스 과정 회귀는 두 가지 요소에 의해 정의된다.
1. $\mathbf{X} =(\mathbf{x]1,...,\mathbf{x]n) 및 출력 $\mathbf{Y}=(y 1,...,y n)$로 구성된 학습 데이터 입력
2. $\mathbf{x}를 입력하고 다른 $\mathbf{x'}와 유사도(이번에는 고스 핵에 의해 결정됨)를 입력하는 핵 함수 $k(\mathbf{x},\mathbf{x'})$
이번 내핵 함수의 정의는 다음과 같다.
$$
k(\mathbf{x},\mathbf{x'}) =\exp(-\frac{\beta}{2}||\mathbf{x}-\mathbf{x'}||^2)
$$
내부 핵 너비의 매개 변수.
학습 데이터를 제공할 때의 테스트 데이터는 $\mathbf{x}^{new}달러의 출력$y^{new}에 다음과 같은 확률로 분포되어 있습니다
$$
p(y^{new}|\mathbf{x}^{new},\mathbf{X},\mathbf{Y})=\mathcal{N}(\mathbf{k}^T_{new}\mathbf{K}^{-1}\mathbf{Y},k_{new,new}-\mathbf{k}^T_{new}\mathbf{K}^{-1}\mathbf{k}_{new})
$$
여기는 $\mathbf{k}입니다.$및\mathbf{X} 커널, $
$k_{new,new}달러는\mathbf{x}^{new}달러와 $\mathbf{x}^{new}달러의 내핵입니다.
이 확률 분포를 실시하고 실제 회귀한 결과는 다음과 같다.
import numpy as np
import matplotlib.pyplot as plt
class gpr():
def __init__(self, X, beta):
self.X = X
self.DIM = self.X.shape[-1]
self.N = self.X.shape[0]
self.beta = beta
def fit(self):
Xdist = np.sqrt((self.X[:,None,0]-self.X[None,:,0])**2)
Kernel = np.exp((-0.5 * self.beta * Xdist))
self.InvKernel = np.linalg.inv(Kernel)#(NX,NX)
self.yy = self.InvKernel @ self.X[:,1]#NX
def predict_testdata(self, test_data):
self.test_data = test_data
XtrainXtest_dist = np.sqrt((self.X[:,None,0]-self.test_data[None,:,0])**2)
k = np.exp((-0.5 * self.beta * XtrainXtest_dist))#(NX,NY)
Xtest_dist = np.sqrt((self.test_data[:,0]-self.test_data[:,0])**2)
s = np.exp((-0.5 * self.beta * Xtest_dist))#(NY)
self.mu = self.yy@k
self.var = s-k.T@self.InvKernel@k
self.std = np.sqrt(np.diag(self.var))
if __name__ == "__main__":
seed = 8
np.random.seed(seed)
beta_bandwidth = 1
beta = 1.0 / (beta_bandwidth ** 2)
NX = 20
NY = 20
X = np.zeros((NX, 2))
data = np.sort(np.random.rand(NX) * 6-3)
X[:, 0] = data
X[:, 1] = np.sin(data)
test_data = np.zeros((NY, 2))
data = np.sort(np.random.rand(NY) * 6-3)
test_data[:, 0] = data
model =gpr(X,beta)
model.fit()
model.predict_testdata(test_data)
mu = model.mu
var = model.var
std = model.std
# 描画
fig = plt.figure(figsize=(12, 4))
plt.cla()
plt.scatter(X[:, 0], X[:, 1], c="green", marker="+", label="observed data")
plt.plot(test_data[:, 0], mu, color="red", linewidth=1, label="estimated function")
plt.scatter(test_data[:, 0], mu, color="blue",s=10,label="test data")
plt.fill_between(test_data[:, 0], mu+std, mu-std, facecolor='orange', alpha=0.2,label = "std")
plt.legend()
plt.show()
도표의 녹십자는 학습에 사용되는 데이터이고 파란색은 테스트 데이터이며 빨간색은 고스 과정이 회귀한 후에 출력된 테스트 데이터의 함수의 평균값이며 주황색의 구역은 분산을 나타낸다.
테스트 데이터와 학습 데이터는 모두sin 함수에서 샘플을 채취한 것이기 때문에 붉은 선도 정현곡선과 같지만 학습 데이터가 적은 부분은 분산이 매우 커서 확률 과정의 특징을 느낄 수 있다.이렇게 추정되는 함수의 불확실성을 처리할 수 있는 것은 확률 과정의 장점이다
끝맺다
인프터커 구성을 위한 영입으로 이번에는 가우스 프로세스 회귀를 실시했다.
나는 다음에 고스 프로세스 회귀를 더욱 확장한 모델인 GPLVM을 실시하여 Infltucker에 조금 가까워지고 싶다.
참고서 목록
다리를 든 대지, 큰 깃털이 고스를 정벌하는 과정과 기계 학습
Reference
이 문제에 관하여(고스 프로세스 회귀를 위한 설치~InfTucker 목표), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/syusyumk2/items/0cdb0e63c0c487b11593텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)