AP 추정 회귀 사용
이 보도는 고천 연구실 학생들이 학습의 일환으로 쓴 것으로 내용이 애매하고 표현이 다소 다르다.
개요
처음는 가장 유사한 회귀 보도를 사용합니다. 두 번째 본 보도에서 저는 MAP로 추정되는 회귀를 총괄하고 싶습니다.
이 보도에서 한 일은 아래와 같다.
AP 기반 회귀 작업 설정
주어진 것
$\mathbfx=(x_1,..., x_N), x\in\mathbfR$를 입력하고 $\mathbfy=(y_1,..., y_N), y\in\mathbfR$의 데이터 집합을 출력합니다.
가설
/$\mathbfx$및 $\mathbfy$의 데이터 세트는 독립적으로 배포됩니다(i.i.d.).
·$y_i, f,\epsilon$를 다음과 같이 가정합니다($\beta$는 고스 소음의 정밀도 측정량입니다).
\begin{eqnarray}
y_i&=&f(x_i;\mathbf w)+\epsilon_i
\end{eqnarray}
\begin{eqnarray}
f(x_i;\mathbf w)=\mathbf{w}^T\boldsymbol{\phi}(x_i)
\end{eqnarray}
\begin{eqnarray}
\epsilon_i&\sim& N(0,\beta^{-1})
\end{eqnarray}
$\;\;\;$여기에 기본 함수 $\boldsymbol {\phi} (x) $와 매개 변수 $\mathbf {w} $는 다음과 같습니다.\begin{eqnarray}
\boldsymbol{\phi}(x_i)&=&(\phi_1(x_i),...,\phi_{D}(x_i))^T
\end{eqnarray}
\begin{eqnarray}
\mathbf{w}&=&(w_1,...,w_{D})^T
\end{eqnarray}
・ 사전 분포에서 $\mathbf w$가 크지 않다고 가정합니다(초변수 $\alpha$는 고스 분포의 정밀도 측정량입니다).$$p(\mathbf w|\alpha)=N(\mathbf w|\mathbf 0,\alpha^{-1}\mathbf I)$$
맵 추정 작업
후 분포 최대 매개변수 $\mathbfw_{MAP}$로 추정됩니다.
\begin{eqnarray}
\mathbf {w}_{MAP}
&=&\underset{\mathbf{w}}{\arg \max\;}p(\mathbf y|\mathbf x,\mathbf w,\beta)p(\mathbf w|\alpha)\\\
\end{eqnarray}
예상 $\mathbfw_{MAP}$에서 새 입력 $x^*$의 출력 $y^*$를 예측할 수 있습니다.해석 내보내기
최대 분포에 사용할 매개 변수 $\mathbf{w}_{MAP}$
1-1 유사와 선험 분포 변형에서 목적 함수를 구하다
1-2 $\mathbf{w}$로 목표 함수를 미세하게 나누어 극값을 구합니다
1. 분포를 최대화하는 매개 변수 구하기
1-1 유사와 선험 분포 변형에서 목적 함수를 구하다
MAP 추정과 가장 유사한 추정의 차이점은 베일스 방법의 선험 분포를 사용할 수 있다는 점이다. 여기서 선험 분포 $p(\mathbf{w}_alpha)$는 큰 $\mathbf{w}$의 고스 분포를 취하지 않는 것으로 가정하고,
\begin{eqnarray}
p(\mathbf{w}|\alpha)
&=&N(\mathbf{w}|\mathbf 0,\alpha^{-1}\mathbf I)\\
&=&\left(\frac{\alpha}{2\pi}\right)^{\frac{D}{2}}\exp\left(-\frac{\alpha}{2}\mathbf w^T \mathbf w\right)
\end{eqnarray}
하이퍼패라메트릭 $\alpha$는 고스 분포 정밀도를 나타내는 측정값입니다. 또한 비슷한 값은 $y_ 출력입니다.i=f(x_i;\mathbf w)+\epsilon_i$는 다음과 같습니다.\begin{eqnarray}
p(\mathbf y|\mathbf x,\mathbf w,\beta)
&=&\prod_{i=1}^{N} \sqrt \frac{\beta}{2\pi}\exp\left(-\frac{\beta}{2}\left(y_i-\mathbf w^T\boldsymbol \phi(x_i)\right)^2\right)
\end{eqnarray}
이러한 유사성과 선험 분포를 보면 데이터 집합의 후험 분포는 베일스의 정리보다$$p(\mathbf w|\mathbf x,\mathbf y,\alpha,\beta)=\frac{p(\mathbf y|\mathbf x,\mathbf w,\beta)p(\mathbf w|\alpha)}{p(\mathbf y|\mathbf x, \alpha,\beta)}$$
이렇게 해서 뒤에 분포하여 대수를 얻으면 다음과 같다.\begin{eqnarray}
\ln p\left(\mathbf w|\mathbf x,\mathbf y, \alpha, \beta\right)
&=& \ln p\left(\mathbf y|\mathbf x, \mathbf w, \beta\right)+\ln p\left(\mathbf w|\alpha\right) - \ln p\left(\mathbf y|\mathbf x,\alpha,\beta\right)\\
&=&\ln \left(\prod_{i=1}^{N} N(y_i|\mathbf w^T\boldsymbol \phi(x_i),\beta^{-1})\right)+\ln N(\mathbf{w}|\mathbf 0,\alpha^{-1}\mathbf I) + const\\
&=&\ln \left(\prod_{i=1}^{N} \sqrt \frac{\beta}{2\pi}\exp\left(-\frac{\beta}{2}\left(y_i-\mathbf w^T\boldsymbol \phi(x_i)\right)^2\right)\right)+\ln \left(\left(\frac{\alpha}{2\pi}\right)^{\frac{D}{2}}\exp\left(-\frac{\alpha}{2}\mathbf w^T \mathbf w\right)\right) + const\\
&=&\sum_{i=1}^N\left(\frac{1}{2}\ln \frac{\beta}{2\pi}-\frac{\beta}{2}\left(y_i-\mathbf w^T\boldsymbol \phi(x_i)\right)^2\right)+\left(\frac{D}{2}\ln\frac{\alpha}{2\pi}-\frac{\alpha}{2}\mathbf w^T\mathbf w\right)+const\\
&=&-\frac{\beta}{2}\sum_{i=1}^{N}\left(y_i-\mathbf w^T\boldsymbol \phi(x_i)\right)^2-\frac{\alpha}{2}\mathbf w^T\mathbf w+\frac{N}{2}\ln \frac{\beta}{2\pi}+\frac{D}{2}\ln \frac{\alpha}{2\pi}+const\\
&=&-\frac{\beta}{2}\sum_{i=1}^{N}\left(y_i-\mathbf w^T\boldsymbol \phi(x_i)\right)^2-\frac{\alpha}{2}\mathbf w^T\mathbf w+const\\
&=&-\frac{\beta}{2}\|\mathbf{y}-\Phi\mathbf{w}\|^{2}-\frac{\alpha}{2}\|\mathbf{w}\|^{2} + const
\end{eqnarray}
여기, 첫 번째 줄 오른쪽의 주변은 $p\mathbf {w} 와 같습니다. $라고 생각하면 다음과 같습니다.\begin{eqnarray}
M(\mathbf{w})
&=&-\frac{\beta}{2}\|\mathbf{y}-\Phi\mathbf{w}\|^{2}-\frac{\alpha}{2}\|\mathbf{w}\|^{2} + const
\end{eqnarray}
여기서 Ridge 회귀(제곱 오차 구속)의 대상 함수 $E(\mathbf w)$는\begin{eqnarray}
E(\mathbf{w})=\frac{1}{2}\|\mathbf{y}-\Phi\mathbf{w}\|^{2}+\frac{\lambda}{2}\|\mathbf{w}\|^{2}
\end{eqnarray}
$M (\mathbf {w}) $를 $\beta$, $\lambda=\frac {\alpha} {\beta}$로 나누면 $M (\mathbf {w}) $의 최대화는 $E (\mathbf {w}) $의 최소화와 같습니다. 따라서 소음 $\의 결과는 등가입니다.1-2 목표 함수 미세분, 극값 구하기
후 최대 분포 매개 변수 $\mathbf{w}_{MAP}$의 목표 함수 $M (\mathbf{w}) $는 2차 형식의 상향 돌출 형상이므로 $\mathbf{w}$로 0의 극치를 미세하게 나누십시오.
\begin{eqnarray}
\frac{\partial M(\mathbf{w})}{\partial \mathbf{w}}
&=&\frac{\partial}{\partial \mathbf{w}}\{-\frac{\beta}{2}(\mathbf{y}-\Phi\mathbf w)^{T}(\mathbf{y}-\Phi\mathbf{w})-\frac{\alpha}{2}\mathbf w^T\mathbf w+const\}\\
&=&\frac{\partial}{\partial \mathbf{w}}\{-\frac{\beta}{2}(\mathbf{y}^T\mathbf{y}-\mathbf{y}^T\Phi\mathbf{w}-\mathbf{w}^T\Phi^T\mathbf{y}+\mathbf{w}^T\Phi^T\Phi\mathbf{w})-\frac{\alpha}{2}\mathbf w^T\mathbf w+const\}\\
&=&\frac{\partial}{\partial \mathbf{w}}\{-\frac{\beta}{2}(\mathbf{y}^T\mathbf{y}-2\mathbf{w}^T\Phi^T\mathbf{y}+\mathbf{w}^T\Phi^T\Phi\mathbf{w})-\frac{\alpha}{2}\mathbf w^T\mathbf w+const\}\\
&=&-\frac{\beta}{2}(0-2\Phi^T\mathbf{y}+2\Phi^T\Phi\mathbf{w})-\alpha\mathbf{w}+0\}\\
&=&\beta\Phi^T\mathbf{y}-\beta\Phi^T\Phi\mathbf{w}-\alpha\mathbf{w}\\
&=&0
\end{eqnarray}
다음은 양쪽을 $\beta$로 나누어 공식을 변형하면 다음 공식이 됩니다 ($\lambda=\frac{\alpha}{\beta}$).\begin{eqnarray}
(\Phi^{T}\Phi\mathbf+\lambda I)\mathbf{w}&=&\Phi^{T}\mathbf{y}\\
\end{eqnarray}
따라서 MAP 추정에서 구한 $\mathbf{w}_{MAP}$는\begin{eqnarray}
\mathbf{w}_{MAP}
=(\Phi^{T}\Phi+\lambda I)^{-1}\Phi^T\mathbf{y}
\end{eqnarray}
태그 요소의 표시 속성을 수정합니다.2. 예측된 매개 변수에 따라 새 입력의 출력을 예측한다
예상 $\mathbf{w}_{MAP}$를 사용하면 $x^*$의 출력 $y^*$를 다음 형식으로 새로 입력합니다.
\begin{eqnarray}
y^{*}\simeq f(x^{*})=\mathbf{w}_{MAP}^{T}\boldsymbol{\phi}(x^*)
\end{eqnarray}
AP를 사용하여 회귀 예상
내보낸 공식을 사용하여 스크래치로 설치합니다.
AP를 사용하여 회귀 예상
# MAP推定
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
def Phi(X):
# X : [[x0],[x1],...]
# phi : e.g. [1, x, x**2]
# return : [[phi_1(X),...,phi_n(X)]]
result = np.array([[1, x[0], x[0]**2, x[0]**3, x[0]**4, x[0]**5, x[0]**6, x[0]**7, x[0]**8, x[0]**9] for x in X])
return result
N = 10
alpha = 0.003 # ハイパーパラメータ
beta = 0.3 # 既知と仮定しています
np.random.seed(1111)
x = np.linspace(-1,1,N)
t = np.sin(np.pi*np.linspace(-1.5,1.5,100))
y = np.sin(np.pi*x) + np.random.normal(0,beta,N)
x_test = np.linspace(-1.5,1.5,100)
y_test = np.sin(np.pi*x_test) + np.random.normal(0,beta,len(x_test))
# 縦ベクトルに変換
x = np.array([[i] for i in x])
x_test = np.array([[i] for i in x_test])
# MAP推定はここが変化するだけ
w_MAP = np.dot(np.dot(np.linalg.inv(np.dot(Phi(x).T, Phi(x))+(alpha/beta)*np.eye(10)), Phi(x).T), y)
w_MAP = np.array([[w] for w in w_MAP])
predict = np.dot(w_MAP.T, Phi(x_test).T).ravel()
fig, ax = plt.subplots(1,2,figsize=(12,4))
ax[0].plot(np.linspace(-1.5,1.5,len(t)),t,label='sin',color='b')
ax[0].plot(x_test.ravel(), predict.ravel(),label='predict curve',color='r')
ax[0].scatter(x.ravel(), y, label='train_data',color='b')
ax[1].plot(x_test.ravel(), predict.ravel(),label='predict curve',color='r')
ax[1].scatter(x_test.ravel()[::5],y_test[::5], label='test_data',color='0.1')
ax[0].set_title('train')
ax[1].set_title('test')
ax[0].set_xlim(-1.5,1.5)
ax[0].set_ylim(-1.5,1.5)
ax[1].set_xlim(-1.5,1.5)
ax[1].set_ylim(-1.5,1.5)
ax[0].legend(loc='upper right',fontsize=9)
ax[1].legend(loc='upper right',fontsize=9)
plt.show()
for i, w in enumerate(w_MAP.ravel()):
print('w{}: {:.3f}'.format(i,w),end=' ')
실험 결과
① 기본 함수가 9 회 다항식 $\alpha=0$일 경우
그 결과 최대 유사 추정 처음 실험에 사용된 데이터 집합과 같은 데이터 집합을 사용하여 $\alpha=0$(방차가 무한대), $\beta=0.3$(지지)로 9차례의 다항식 매개 변수 $\mathbf{w}$를 MAP로 추정했습니다.곡선은 모든 학습 데이터와 $\mathbfw$의 극단적인 큰 값을 통해 알 수 있듯이 이 결과는 최대 9회 다항식결과과 완전히 같다.
② 기본 함수가 9회 다항식 $\alpha=0.03$일 경우
같은 조건에서 $\alpha=0.03$의 변경이 그 결과입니다. 학습 데이터, 테스트 데이터는 모두 $x$에서 -1까지의 범위 내에서 데이터에 대한 곡선을 잘 맞출 수 있습니다. 다른 한편, $x$는 -1에서 1의 범위 밖에서 공부를 하지 않아서 잘 할 수 없습니다.사전 분포에 따라 표현력이 제약을 받아 매개 변수 $\mathbfw$는 큰 값을 얻지 못했다.
③ 기본 함수가 9회 다항식 $\alpha=100$일 때
같은 조건에서 $\alpha=100$(방차가 작음)가 그 결과입니다. 사전 분포의 제약이 너무 강하기 때문에 데이터를 학습할 수 있는 곡선이 없다는 것을 알 수 있습니다. 또한 매개 변수 $\mathbf{w}$의 값을 보면 모두 0 부근의 값입니다.
총결산
공식적인 추론을 통해 MAP로 추정되는 회귀와 Ridge 회귀 등가를 나타냈다. 또한 실험을 통해 사전 분포(정규화)된 초파라미터 $\alpha$를 조정하여 모델의 표현 능력을 제약하고 모델을 바꾸지 않고 적당한 회귀를 할 수 있음을 확인했다.
참고 문헌
[1] 패턴 식별 및 머신러닝 (상) C.M. 주교
Reference
이 문제에 관하여(AP 추정 회귀 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tsnry7913/items/b9f15953191e5e08d5af
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
# MAP推定
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
def Phi(X):
# X : [[x0],[x1],...]
# phi : e.g. [1, x, x**2]
# return : [[phi_1(X),...,phi_n(X)]]
result = np.array([[1, x[0], x[0]**2, x[0]**3, x[0]**4, x[0]**5, x[0]**6, x[0]**7, x[0]**8, x[0]**9] for x in X])
return result
N = 10
alpha = 0.003 # ハイパーパラメータ
beta = 0.3 # 既知と仮定しています
np.random.seed(1111)
x = np.linspace(-1,1,N)
t = np.sin(np.pi*np.linspace(-1.5,1.5,100))
y = np.sin(np.pi*x) + np.random.normal(0,beta,N)
x_test = np.linspace(-1.5,1.5,100)
y_test = np.sin(np.pi*x_test) + np.random.normal(0,beta,len(x_test))
# 縦ベクトルに変換
x = np.array([[i] for i in x])
x_test = np.array([[i] for i in x_test])
# MAP推定はここが変化するだけ
w_MAP = np.dot(np.dot(np.linalg.inv(np.dot(Phi(x).T, Phi(x))+(alpha/beta)*np.eye(10)), Phi(x).T), y)
w_MAP = np.array([[w] for w in w_MAP])
predict = np.dot(w_MAP.T, Phi(x_test).T).ravel()
fig, ax = plt.subplots(1,2,figsize=(12,4))
ax[0].plot(np.linspace(-1.5,1.5,len(t)),t,label='sin',color='b')
ax[0].plot(x_test.ravel(), predict.ravel(),label='predict curve',color='r')
ax[0].scatter(x.ravel(), y, label='train_data',color='b')
ax[1].plot(x_test.ravel(), predict.ravel(),label='predict curve',color='r')
ax[1].scatter(x_test.ravel()[::5],y_test[::5], label='test_data',color='0.1')
ax[0].set_title('train')
ax[1].set_title('test')
ax[0].set_xlim(-1.5,1.5)
ax[0].set_ylim(-1.5,1.5)
ax[1].set_xlim(-1.5,1.5)
ax[1].set_ylim(-1.5,1.5)
ax[0].legend(loc='upper right',fontsize=9)
ax[1].legend(loc='upper right',fontsize=9)
plt.show()
for i, w in enumerate(w_MAP.ravel()):
print('w{}: {:.3f}'.format(i,w),end=' ')
공식적인 추론을 통해 MAP로 추정되는 회귀와 Ridge 회귀 등가를 나타냈다. 또한 실험을 통해 사전 분포(정규화)된 초파라미터 $\alpha$를 조정하여 모델의 표현 능력을 제약하고 모델을 바꾸지 않고 적당한 회귀를 할 수 있음을 확인했다.
참고 문헌
[1] 패턴 식별 및 머신러닝 (상) C.M. 주교
Reference
이 문제에 관하여(AP 추정 회귀 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tsnry7913/items/b9f15953191e5e08d5af텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)