trsing’s diary

勉強、読んだ本、仕事で調べたこととかのメモ。

PRMLメモ 3章 3.3.2、3.3.3

3.3.2 予測分布

p(w|t,\alpha,\beta)=\mathcal{N}(w|m_{N},S_{N}):周辺分布(2.99)p(x)=\mathcal{N}(x|\mu,\Lambda^{-1})に対応
p(t|w,\beta)=\mathcal{N}(t|\phi(x)^{T}w,\beta^{-1}):条件付き分布(2.100)p(y|x)=\mathcal{N}(y|Ax+b,L^{-1})に対応
\mu=m_{N},\,\Lambda^{-1}=S_{N},\,A=\phi(x)^{T},\,b=0,\,L^{-1}=\beta^{-1}として(2.115)を用いると(3.58),(3,59)が出てくる。

ガウス基底であればxが各基底関数の平均から遠ざかると\phi(x)が0に近づいていく。図3.1の中央を見るとイメージしやすい。

3.3.3 等価カーネル

xに近いx_{n}に対応するt_{n}の重みが大きい。

{\begin{align}
cov[\phi(x)^{T}w,\,w^{T}\phi(x^{'})]&=E[(\phi(x)^{T}w-E[\phi(x)^{T}w])(w^{T}\phi(x^{'})-E[w^{T}\phi(x^{'})])]\\
&=E[(\phi(x)^{T}w-\phi(x)^{T}E[w])(w^{T}\phi(x^{'})-E[w^{T})]\phi(x^{'})]\\
&=\phi(x)^{T}E[(w-E[w])(w^{T}-E[w^{T})])]\phi(x^{'})\\
&=\phi(x)^{T}Var[w]\phi(x^{'})\\
&=\phi(x)^{T}S_{N}\phi(x^{'})
\end{align}}

xx^{'}が近ければy(x)y(x^{'})に高い相関あり(≒値が近い?)。

メモ:x_{n},\,t_{n}は観測済みの値ということに注意してないとなんか混乱してくる。
メモ:$$の中でcovは使えないみたいだ・・・

PRMLメモ 3章 3.3.1

3.3.1 パラメータの分布

(3.10)をwで整理する。 $$ \phi(x_{n})\phi(x_{n})^{T}= \begin{bmatrix} \phi_{0}^{n}\\ \vdots\\ \phi_{M -1}^{n} \end{bmatrix} \begin{bmatrix} \phi_{0}^{n} & \cdots & \phi_{M -1}^{n} \end{bmatrix}= \begin{bmatrix} \phi_{0}^{n}\phi_{0}^{n}&\cdots& \phi_{0}^{n}\phi_{M -1}^{n}\\ \vdots &\ddots&\vdots\\ \phi_{M -1}^{n}\phi_{0}^{n}&\cdots& \phi_{M -1}^{n}\phi_{M -1}^{n} \end{bmatrix} $$ \sum\phi(x_{n})\phi(x_{n})^{T}の(i+1,j+1)成分は\sum\phi_{i}^{n}\phi_{j}^{n}。 これは\Phi^{T}\Phiの(i+1,j+1)成分と同じだから $$ \sum\{w^{T}\phi(x_n)\}^{2}=\sum\{w^{T}\phi(x_{n})\phi(x_{n})^{T}w\}=w^{T}\{\sum\phi(x_{n})\phi(x_{n})^{T}\}w=w^{T}\Phi^{T}\Phi w $$ $$ \sum t_{n}w^{T}\phi(x_{n})=w^{T}\sum t_{n}\phi(x_{n})=w^{T}[\phi_{0}\,\cdots\,\phi_{M -1}]t=w^{T}\Phi^{T}t $$

モード(最頻値):分布が最大になるとこ。ガウス分布の場合平均値。

S_{0}=\alpha^{-1}I,\,\alpha\to0よりS_{0}^{-1}=\alpha I\to0S_{N}=1/\beta(\Phi^{T}\Phi)^{-1}m_{N}=(\Phi^{T}\Phi)^{-1}\Phi^{T}t

(3.53)(3.50):m_{0}=0,\,S_{0}=\alpha^{-1}Iとしたもの。

(3.55):p(w|t)\propto p(t|w)p(w|\alpha)p(t|w)は(3.10)。

前提条件
・元の関数f(x)=a_{0}+a_{1}x=-0.3+0.5x
・訓練データt_{n}=f(x)+noise ・ノイズは標準偏差0.2のガウス分布
・ノイズの分散は既知
・パラメータ\alphaは2.0に固定。
目標
訓練データから秦のパラメータ値\alpha_{0},\,\alpha_{1}を復元する

図3.7
左:尤度関数p(t|x,w)wについてプロットしたもの
中:事前分布(2,3行目は一つ上の)x尤度関数
右:復元した関数(のうちの6個)。青は訓練データ点

(3.56):演習2.43がちょっと参考になる。

PRMLメモ 3章 3.2

3.2 バイアス‐バリアンス分解

※普段は分散表記なのになぜここはバリアンス表記…
※1.5.5を復習しておけば楽

(3.37):(1.90)参照。第二項はtの分布の分散をxに関して平均したもの(ノイズ)

分布p(t,x)に従うデータ集合から任意のデータ集合\mathcal{D}を取ってきて予測関数y(x:\mathcal{D})を求める。データ集合\mathcal{D}が異なれば予測関数y(x:\mathcal{D})が異なるため二乗損失の値も異なる→学習アルゴリズムの性能をデータ集合\mathcal{D}の取り方に関する平均で評価する。

(3.40):E_{\mathcal{D}}[y(x;\mathcal{D}],\,h(x)\mathcal{D}に依存しないことに注意。

図3.5
上段:バイアス大、分散小
下段:バイアス小、分散大

(3.46),(3.47):E_{\mathcal{D}}[y(x;\mathcal{D})]=\overline{y}(x),\,p(x_n)=1/N,\,p(\mathcal{D})=1/Lと考えれば出てくる

PRML 3章 3.1.4, 3.1.5

3.1.4 正則化最小二乗法

(3.27):(1.4)あたり参照。

(3.27)をw_i偏微分すると

\sum_{n=1}^N\{t_n-w^{T}\phi(x_n)\}\{-\phi_i(x_n)\}+\lambda w_i=-\phi^{T}(x_i)t+\varphi_i^{T}\Phi w+\lambda w_i

よって(\nabla (3.27))^{T}=0

{\displaystyle
-\left[
\begin{array}{c}
\phi^{T}(x_1)\\
\vdots\\
\phi^{T}(x_N)
\end{array}
\right]t+
\left[
\begin{array}{c}
\varphi_{1}^{T}\\
\vdots\\
\varphi_{M}^{T}
\end{array}
\right]\Phi w+\lambda w=-\Phi^{T} t+\Phi^{T} \Phi w+\lambda I w=0} (\lambda I + \Phi^{T}\Phi )w=\Phi^{T}t

演習3.5の解答を参照すると、
(3.12) +\lambda/2(\sum|w_j|^q-\eta)をwで微分したものと(3.29)をwで微分したものは同じになる(\etaのwにおける微分は0)→(3.29)を最小化することは(3.12)を制約条件(3.20)のもとで最小化することと等しい。
そして非ゼロの\lambdaを選ぶと\sum|w_j|^q-\eta=0が制約条件となるので図3.4が出てくる。

正則化は、適切な基底関数の数を求める問題を正則化係数\lambdaを適切に決める問題に置き換えただけとなる。

(3.12)を最小化するw^{\ast}が求まったら\eta=\sum|w_{j}^{\ast}|^{q}が求まる。\sum|w_{j}|^{q}=\etaとなるwは図3.14の赤線。その中でw_{j}^{\ast}は(3.12)の等高線と接するとこにある。

3.1.5 出力変数型次元の場合

||t_{n}-W^{T}\phi(x_n)||^2=(t_{n}-W^{T}\phi(x_n))^{T}(t_{n}-W^{T}\phi(x_n))w_{ij}微分すると \left(\frac{\partial}{\partial w_{ij}}\{t_{n}-W^{T}\phi(x_n)\}^{T}\right)\{t_{n}-W^{T}\phi(x_n)\}+\{t_{n}-W^{T}\phi(x_n)\}^{T}\frac{\partial}{\partial w_{ij}}\{t_{n}-W^{T}\phi(x_n)\}=2\left(\frac{\partial}{\partial w_{ij}}\{t_{n}-W^{T}\phi(x_n)\}^{T}\right)\{t_{n}-W^{T}\phi(x_n)\}

\frac{\partial}{\partial w_{ij}}\{t_{n}-W^{T}\phi(x_n)\}=-\left[
\begin{array}{c}
0\\
\vdots\\
\phi_{i}(x_n)\\
\vdots\\
0
\end{array}
\right]
※j+1行目が非ゼロ成分(0開始のため)
よって

$$ \begin{bmatrix} 0 & \cdots & \phi_{i}(x_n) & \cdots & 0 \end{bmatrix} \left( \begin{bmatrix} t_{n0}\\ \vdots\\ t_{nj}\\ \vdots\\ t_{nK -1} \end{bmatrix} - \begin{bmatrix} w_{00} & \cdots & w_{M-11}\\ \vdots & \ddots & \vdots\\ w_{0K} & \dots &w_{M-1K} \end{bmatrix} \begin{bmatrix} \phi_{0}(x_{n})\\ \vdots\\ \phi_{M -1}(x_{n}) \end{bmatrix} \right)= \phi_{i}(x_n)t_{nj}-\phi_{i}(x_n) \begin{bmatrix} w_{0j} & \cdots & w_{M-1j} \end{bmatrix} \phi(x_n) $$
これの\sum
$$ \begin{bmatrix} \phi_i(x_{1}) & \cdots & \phi_{i}(x_{N}) \end{bmatrix} \begin{bmatrix} t_{0j}\\ \vdots\\ t_{N-1j} \end{bmatrix}- \begin{bmatrix} \phi_i(x_1) & \cdots & \phi_{i}(x_{N}) \end{bmatrix} \begin{bmatrix} \phi^{T}(x_1)\\ \vdots\\ \phi^{T}(x_{N})\\ \end{bmatrix} \begin{bmatrix} w_{0j}\\ \vdots\\ w_{M -1j} \end{bmatrix}\\ =\varphi_{i}^{T} \begin{bmatrix} t_{0j}\\ \vdots\\ t_{N-1j} \end{bmatrix}- \varphi_{i}^{T}\Phi \begin{bmatrix} w_{0j}\\ \vdots\\ w_{M -1j} \end{bmatrix}= \begin{bmatrix} t_{1j} & \cdots & t_{N -1j} \end{bmatrix} \varphi_{i}- \begin{bmatrix} w_{0j} & \cdots & w_{M -1j} \end{bmatrix} \Phi^{T}\varphi_{i} $$ よってWでの微分は $$ \begin{bmatrix} \begin{bmatrix}t_{10} & \cdots & t_{N0}\end{bmatrix}\varphi_{0} & \cdots & \begin{bmatrix}t_{1K -1} & \cdots & t_{NK -1}\end{bmatrix}\varphi_{0}\\ \vdots & \ddots & \vdots\\ \begin{bmatrix}t_{10} & \cdots & t_{N0}\end{bmatrix}\varphi_{M -1} & \cdots & \begin{bmatrix}t_{1K -1} & \cdots & t_{NK -1}\end{bmatrix}\varphi_{M -1} \end{bmatrix}- \begin{bmatrix} \begin{bmatrix}w_{00} & \cdots & w_{M -10}\end{bmatrix}\Phi^{T}\varphi_{0} & \cdots & \begin{bmatrix}w_{0K -1} & \cdots & w_{M -1K -1}\end{bmatrix}\Phi^{T}\varphi_{0}\\ \vdots & \ddots & \vdots\\ \begin{bmatrix}w_{00} & \cdots & w_{M -10}\end{bmatrix}\Phi\varphi_{M -1} & \cdots & \begin{bmatrix}w_{0K -1} & \cdots & w_{M -1K -1}\end{bmatrix}\Phi^{T}\varphi_{M -1} \end{bmatrix}\\= \begin{bmatrix} \varphi_{0}^{T}\\ \vdots\\ \varphi_{M -1}^{T}\\ \end{bmatrix} \begin{bmatrix} t_{10} & \cdots & t_{1K -1}\\ \vdots & \ddots & \vdots\\ t_{N0} & \cdots & t_{NK -1} \end{bmatrix}- \begin{bmatrix} \varphi_{0}^{T}\\ \vdots\\ \varphi_{M -1}^{T}\\ \end{bmatrix} \Phi \begin{bmatrix} w_{00} & \cdots & w_{1K -1}\\ \vdots & \ddots & \vdots\\ w_{M -10} & \cdots & w_{M -1K -1} \end{bmatrix}= \Phi^{T}T-\Phi^{T}\Phi W $$ これを0とおくと $$ \Phi^{T}\Phi W=\Phi^{T}T $$

メモ -,= がtex中でも行頭に来ると水平線になるので注意。
texで書くのめんどすぎるのはノート撮影して画像貼り付けよう・・・

PRML 3章~3.1.2

3.1線形基底関数モデル

(3.1):線形回帰。パラメータwの線形関数のため解析しやすい。しかし入力変数xに関しても線形関数のため表現能力に乏しい。

(3.2):線形モデル。線形回帰を拡張して基底関数を導入。パラメータに関しては線形関数、入力関数に関して非線形。解析しやすく表現能力が高い。

フーリエ基底:\phi_j(x)=\exp(ijx)

3.1.1最尤推定と最小二乗法

(3.8)平均はy(x,w)

回帰や分類といった教師あり学習問題では、入力変数の分布をモデル化しようとしていない(INとOUTの関係を見る)。

(3.13)\frac{\partial}{\partial w_i}E_D(w)=\beta\sum\{t_n-w^{T}\phi(x_n)\}\phi_i(x_n)

(3.15):特にひねりなく(3.14)を計算していくと \sum t_n\phi(x_n)^{T}=\Phi^{T},\,\sum\phi(x_n)\phi(x_n)^{T}=\Phi^{T}\Phiになる。

(3.11)を\beta偏微分すると\frac{N}{2}\frac{1}{\beta}-E_D(w)

3.1.2最小二乗法の幾何学

yは\varphi_jの任意の線形結合

{\displaystyle
 y=
\left[
\begin{array}{c}
y(x_1,w)\\
\vdots\\
y(x_N,w)
\end{array}
\right]=
\left[
\begin{array}{c}
w_0\phi_0(x_1)+\dots+w_{M-1}\phi_{M-1}(x_1)\\
\vdots\\
w_0\phi_0(x_N)+\dots+w_{M-1}\phi_{M-1}(x_N)
\end{array}
\right]\\\,\,=w_0
\left[
\begin{array}{c}
\phi_0(x_1)\\
\vdots\\
\phi_0(x_N)
\end{array}
\right]+\dots+w_{M-1}
\left[
\begin{array}{c}
\phi_{M-1}(x_1)\\
\vdots\\
\phi_{M-1}(x_N)
\end{array}
\right]=w_0\varphi_0+\dots+w_{M-1}\varphi_{M-1}
}

(3.12):E_D(w)=1/2\sum{t_n-y(x_n,w)}よりyとtの二乗ユークリッド距離

PRML 2章 演習メモ

下記HPがとても参考になります(私は参考にしたというより写経に近かったですが…)

パターン認識と機械学習[PRML] 練習問題模範解答 - ドラえもん

PRML演習問題 全問解答 | 機械学習の教科書の決定版【パターン認識と機械学習】の演習問題の全てを詳しく解答・解説

WWWがついてる問題は公式の回答も。

 

わからん→資料読む→なるほど・・・

みたいなのを繰り返してました

本文中で出てくる演習はその時にやった方が良いですね。

 

EntityFrameworkメモ

目標:EntityFramework使ってるソフトを引き継いだので、ソース見て検索しながら理解できれば良い程度。

なのでざっくり。

 

下記ホームページで目標達成できる。

だいたいの使い方

Entity Framework カテゴリーの記事一覧 - インクリメンタルなカイハツにっき

もうちょっと詳細まで

EntityFramework 目次:Gushwell's Dev Notes

自動Migrationについて

Entity Framework で自動マイグレーション : @jsakamoto

 

以下メモ(詳細は上記ホームページで)

概要

・データ操作(DB操作含む)するときに使うと便利

・テーブルとクラスをマッピング 

・接続するDBはコンフィグファイル(App.configとかWeb.config)の<connectionStrings>で指定。

・プロパティ名を合わせれば主キー、外部キーの設定を自動でよしなにやってくれる。(外部キーの場合ナビゲーションプロパティが必要)

 プロパティ名を合わせない場合アノテーションを使って指定。

  ・ナビゲーションプロパティを使って関連するテーブルのデータにもアクセスできる(LINQを使ってデータにアクセスするとき便利)

・クエリは作成した時点では発行されない。評価するときに発行される。

 速度や通信量が気になる場合いつどんなクエリが発行されているか確認が必要。

 DbContext.Database.LogにActionを設定してやれば確認できる

・関連のある行を削除する場合注意(書き方によっては関連が外れるだけ?)

 

マイグレーション

・クラスのプロパティを変更すればDBに反映される(マイグレーション必要)

マイグレーション。手動・自動に関わらず

 1.ツール→Nugetパッケージマネージャー→パッケージマネージャーコンソールからEnable-Migrations←最初の設定。これでプロジェクトにMigrationsフォルダ、Configurationファイルができる

 手動の場合

 2.プロパティ修正

 3.Add-Migration 名称←これでMigrationファイルが作られる

 4.Update-Database←実際にDBを更新

 自動の場合

 2'.Configuration()で自動マイグレーション許可の設定をする

 3'.開始時に実行されるとこにDatabase.SetInitializer

 あとは自動でやってくれる。

※手動だとAdd-Migrationで変更履歴が残るので特定の状態に戻すのが楽