ruby ../bin/pick_works_from_ans.rb gw3_ex_ans.ipynb -1 '' '14'
train_A.dataには特徴量が,train_b.dataには悪性(1)か良性(-1)かを示す数値が入っている. 訓練(tain(ing))データを読み込み, 仮説ベクトル$\boldsymbol{w}$の初期値を全て0.0001として, 最初の30データの正誤を表示せよ. テキストのshow_accuracyを少し改良すればできる.
A[i]にはデータが入っている.またwは分類器である.これらの積$A[i].w$は悪性か良性かを判断 する数値を与える.従ってそのベクトルの距離は,全てのデータに対する正誤の2乗和となる.
最急降下法による仮説ベクトル$\boldsymbol{w}$の最適化を試みる. 最急降下法の概念図を以下に示した.損失関数の値$L(\boldsymbol{w})$ をz軸にとって(x,y)平面を$\boldsymbol{w}$と見立てて, その勾配$dL/dw$に従って極小値を求めるステップを 刻んでいく様子を示している. 単なるイメージ図なんで,コードの中身は無視してください.
%matplotlib notebook
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
def f(x,y):
return x**2+y**2+x*y
x = np.arange(-np.pi, np.pi, 0.02)
y = np.arange(-np.pi, np.pi, 0.02)
X, Y = np.meshgrid(x, y)
Z1 = f(X,Y)
x_p = [2, 1, 0.5]
y_p = [2, 1, 0.5]
z_p = [f(x_p[0], y_p[0]),f(x_p[1], y_p[1]),
f(x_p[2], y_p[2])]
fig = plt.figure()
plot3d = Axes3D(fig)
plot3d.plot(x_p, y_p, z_p, "o-", color="red")
plot3d.plot_surface(X,Y,Z1,alpha=0.6)
plt.show()
<ipython-input-1-6a9f96ea6a91>:20: MatplotlibDeprecationWarning: Axes3D(fig) adding itself to the figure is deprecated since 3.4. Pass the keyword argument auto_add_to_figure=False and use fig.add_axes(ax) to suppress this warning. The default value of auto_add_to_figure will change to False in mpl3.5 and True values will no longer work in 3.6. This is consistent with other Axes classes. plot3d = Axes3D(fig)
損失関数の偏微分 $$ \begin{aligned} \frac{\partial L}{\partial w_j} &= \sum_{i=1}^n \frac{\partial}{\partial w_j}(A_i \cdot w -b_i)^2 \\ &= \sum_{i=1}^n 2(A_i \cdot w -b_i) A_{ij} \end{aligned} $$ の最後の式の$A_{ij}$の係数ベクトルをdLwとして求めよ.その次元をshapeで確かめよ?
係数ベクトルdLwとAのdot積が勾配ベクトルとなる.
$$
w = w - \sigma(dLw^t \cdot A)^t
$$
として仮説ベクトル$w$を勾配に従って進めたベクトルを求めよ.
ここで$\sigma$はステップ幅と呼ばれ,勾配に従ってどの程度進むかを調整するパラメータで,大きすぎると最適値を通り越し,小さすぎると最適値にたどり着くまでに繰り返し(iteration)が多くなる.ここでは,3.0*10**(-9)
程度とせよ.
先ほどの漸近操作を300回程度繰り返し,その前後でwを表示してみよ. 最初の30データの予測値を比較せよ.
行列$A$のQR分解を行い,Q, R行列の次元をshapeで確かめよ.
仮説ベクトル$\boldsymbol{w}$の最適値 $$ ww = R^{-1}.Q^t.b $$ を求めよ.その値と精度を確かめよ.また距離の2乗 $$ ||A.w -b ||^2 $$ が下がっていることを確かめよ.