PRML上巻 P8
昨日の続き.
いろいろな次数の多項式について得られた係数の値を検証してみる. (コードは省略)
0.09 | -1.36 | 21.09 | 524.49 | |
0.77 | -31.88 | -8747.08 | ||
10.88 | 30200.27 | |||
0.01 | -46656.18 | |||
38429.23 | ||||
-17576.78 | ||||
4319.81 | ||||
-522.06 | ||||
28.31 | ||||
0.10 |
の増加に伴って,係数の多くが大きな値をとるようになっている.
次に,モデルの次数は固定し,データ集合のサイズを変えてみたときの振る舞いを確認する. (一時変数名が適当ですいません)
%matplotlib inline import matplotlib.pyplot as plt import numpy as np import numpy.polynomial.polynomial as poly np.random.seed(42)
# test data set (N=15) # t = sin(2 \pi x) + gaussian noise x4 = np.linspace(0, 1, 15) t4 = np.sin(2 * np.pi * x4) + np.random.normal(0, 0.2, 15) # test data set (N=100) # t = sin(2 \pi x) + gaussian noise x1 = np.linspace(0, 1, 100) t3 = np.sin(2 * np.pi * x1) + np.random.normal(0, 0.2, 100)
# figure 1.6 # fitting with polynomial functions w9_15 = np.polyfit(x4, t4, 9) w9_100 = np.polyfit(x1, t3, 9) # visualize fig, axs = plt.subplots(1, 2, figsize=(12, 4)) axs[0].set_title('N = 15') axs[1].set_title('N = 100') for ax in axs.flat: ax.plot(x1, t1, color='green') ax.set(xlabel='x', ylabel='t') axs[0].scatter(x4, t4, facecolor='None', edgecolor='blue') axs[0].plot(x1, np.poly1d(w9_15)(x1), color='red') axs[1].scatter(x1, t3, facecolor='None', edgecolor='blue') axs[1].plot(x1, np.poly1d(w9_100)(x1), color='red') plt.tight_layout()
図から,データ集合のサイズが大きくなるにつれて過学習の問題は深刻でなくなってくることがわかる.
大雑把な経験則としては,データの点の数はモデル中の適応パラメータの数の何倍か(例えば5とか10)よりは小さくてはいけない,といわれているらしい.
今日はここまで.