파이톤에서 베이스 선형 회귀를 실현했다

베이스 선형 회귀의 목적


지난번 보도'Bays 선형 회귀의 개략'에서 대략적으로 정리했는데 이번에 실제로 Pytohon에서 이 과정을 실시했기 때문에 다시 대략적으로 정리하고 싶습니다.
선형 회귀의 목적은 입력 x에 비해 y를 출력하는 것이다
$$y=x^Tw+\epsilon$$
이러한 형식으로 모델링을 한다는 가설을 바탕으로 우리는 새로운 입력에 대응하는 유사한 출력의 w를 되돌릴 수 있음을 추측하고자 한다.
나 여기서 오해한 적 있어.
최근에야 비로소 선형 회귀는 줄곧 입력 x가 선형이라고 생각했지만 정확한 것은 매개 변수 w에 비해 선형이라는 것을 알게 되었다.
즉, 입력x교기함수를 비선형으로 바꿔도 w의 일차선성과 (이 말이 맞습니까?)그럼 선형 회귀라고 하죠.
w의 값이 일반적인 선형 회귀임을 직접 확정하고 베스의 선형 회귀는 w가 따르는 확률 분포를 예측한다.따라서 훈련 데이터를 얻기 전에 w의 예분포는 $N(0,\Sigmap)을 규정하고 훈련 데이터를 얻은 후의 검사 확률을 정한다.
그 결과
$$w|y,X\\~ N\left(\frac{1}{\sigma_n^2}\left(\frac{1}{\sigma_n^2}XX^T+\Sigma_p^{-1}\right)Xy,\frac{1}{\sigma_n^2}XX^T+\Sigma_p^{-1}\right)$$
$\sigma_소음의 색산.
한편 이번 고스 함수는 기함수로 쓰였다.고스 함수의 공식은 다음과 같다.
$$\Phi(x) = exp\left(-\frac{(x - s)^2}{2s^2}\right)$$

코드

import numpy as np
import matplotlib.pyplot as plt

X = np.array([0.02, 0.12, 0.19, 0.27, 0.42, 0.51, 0.64, 0.84, 0.88, 0.99])
y = np.array([0.05, 0.87, 0.94, 0.92, 0.54, -0.11, -0.78, -0.79, -0.89, -0.04])

#基底関数 ガウス関数
def phi(x):
    #ガウス関数のバンド幅
    s = 0.1
    return np.append(1,np.exp(-(x - np.arange(0,1+s,s))**2/(2 * s * s)))

PhiX = np.array([phi(x) for x in X])

#1/sigma_n^2 = alpha
alpha = 9.0
#Sigma_p^-1 = beta * I
beta = 0.1

#p
A = alpha * np.dot(PhiX.T,PhiX) + beta * np.identity(PhiX.shape[1])
w_bar = alpha * np.dot(np.dot(np.linalg.inv(A),PhiX.T),y)

xlist = np.arange(0,1,0.01)
ylist = [np.dot(w_bar,phi(x)) for x in xlist]
#予測分布の分散
s_2 = [1.0/alpha + np.dot(np.dot(phi(x),np.linalg.inv(A)),phi(x).T) for x in xlist]

s = np.sqrt(s_2)
predict_upper = ylist + s
predict_lower = ylist - s
plt.plot(xlist,ylist)
plt.plot(X,y,'o')
plt.fill_between(xlist,predict_upper,predict_lower,facecolor='r',alpha=0.2)
plt.show()

실행 결과


베이스 선형 회귀

좋은 웹페이지 즐겨찾기