#!/usr/bin/env python
# coding: utf-8
#
Table of Contents
#
#
#
#
# 数式処理group work-3(線形代数)解答例
#
#
#
# file:/~/python/doing_math_with_python/symbolic_math/group_works/group_work_3_ans.ipynb
#
# cc by Shigeto R. Nishitani 2009-2018
#
#
# ``` ruby
# 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を少し改良すればできる.
#
# # 距離
# 1. 行列$A$, ベクトル$w,b$の形状を確かめよ.
# 1. また,$A.w$の形状を確かめよ.
# 1. さらに$A.w-b$の距離の2乗$||A.w -b ||^2$を計算せよ.
# 1. $A.w$と$b$の距離とは乳がんの分類器においては何を意味するか?
# A[i]にはデータが入っている.またwは分類器である.これらの積$A[i].w$は悪性か良性かを判断
# する数値を与える.従ってそのベクトルの距離は,全てのデータに対する正誤の2乗和となる.
#
#
# # 係数ベクトルdLw
# 最急降下法による仮説ベクトル$\boldsymbol{w}$の最適化を試みる.
# 最急降下法の概念図を以下に示した.損失関数の値$L(\boldsymbol{w})$
# をz軸にとって(x,y)平面を$\boldsymbol{w}$と見立てて,
# その勾配$dL/dw$に従って極小値を求めるステップを
# 刻んでいく様子を示している.
# 単なるイメージ図なんで,コードの中身は無視してください.
#
# In[1]:
get_ipython().run_line_magic('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()
# 損失関数の偏微分
# $$
# \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で確かめよ?
# # wの更新
#
# 係数ベクトルdLwとAのdot積が勾配ベクトルとなる.
# $$
# w = w - \sigma(dLw^t \cdot A)^t
# $$
# として仮説ベクトル$w$を勾配に従って進めたベクトルを求めよ.
# ここで$\sigma$はステップ幅と呼ばれ,勾配に従ってどの程度進むかを調整するパラメータで,大きすぎると最適値を通り越し,小さすぎると最適値にたどり着くまでに繰り返し(iteration)が多くなる.ここでは,`3.0*10**(-9)`程度とせよ.
# # 最急降下の繰り返し
# 先ほどの漸近操作を300回程度繰り返し,その前後でwを表示してみよ.
# 最初の30データの予測値を比較せよ.
# # QR分解
#
# 行列$A$のQR分解を行い,Q, R行列の次元をshapeで確かめよ.
# # 結果
# 仮説ベクトル$\boldsymbol{w}$の最適値
# $$
# ww = R^{-1}.Q^t.b
# $$
# を求めよ.その値と精度を確かめよ.また距離の2乗
# $$
# ||A.w -b ||^2
# $$
# が下がっていることを確かめよ.