一日坊主

雰囲気でやっている

PRML上巻 P1-5

とりあえず, PRML を頭から読み直すやつをやることにした.

今日は「1.1 多項式曲線フィッティング」をやってみる.

訓練集合として,N個の観測値xを並べた\mathbf{x}\equiv(x_1,\ldots,x_N)^ \mathrm{T}と, それぞれに対応する観測値tを並べた\mathbf{t}\equiv(t_1,\ldots,t_N)^ \mathrm{T}が与えられる.

我々の目標は,この訓練集合を利用して,新たな入力変数の値\hat{x}に対して目標変数\hat{t}の値を予測することである.

まず,関数  sin(2 \pi x) にガウシアンノイズを加えて,N = 10 個の訓練データを生成する.

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(42)
# t = sin(2 \pi x)
x1 = np.linspace(0, 1, 100)
t1 = np.sin(2 * np.pi * x1)
plt.plot(x1, t1, color='green')

# training data set
# t = sin(2 \pi x) + gaussian noise
x2 = np.linspace(0, 1, 10)
t2 = np.sin(2 * np.pi * x2) + np.random.normal(0, 0.2, 10)
plt.scatter(x2, t2, facecolor='None', edgecolor='blue')

plt.xlabel('x')
plt.ylabel('t')

f:id:twakamori:20210216020614p:plain
figure 1.2

この訓練データに対して,以下のような多項式をフィッティングする.

\displaystyle{
y(x, \mathbf{w}) = w_0 + w_1 x + w_2 x^2 + \cdots + w_M x^M = \sum_{j=0}^{M}w_j x^j \tag{1.1}
}

この多項式は線形モデル(linear model)と呼ばれる.

訓練データに多項式をあてはめることで係数の値を求める. これは,誤差関数(error function)の最小化で達成できる. 誤差関数には以下の二乗和誤差(sum-of-squares error)を用いる.

\displaystyle{
E(\mathbf{w})=\frac{1}{2}\sum_{n=1}^{N}\left\{y(x_n, \mathbf{w}) - t_n \right\}^2\tag{1.2}
}

E(\mathbf{w})は非負であり,y(x, \mathbf{w})が全訓練データ点をちょうど通るとき,0になる. このように,E(\mathbf{w})をできるだけ小さくするような\mathbf{w}を選ぶことで曲線あてはめ問題を解くことができる.

今日はここまで. (100年くらいかかりそう)