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()