DeepRunning　～Level4.2～

#Level４．機械学習講座（理論と実践）
##4-2.非線形回帰モデル
###4-2-1.データの捉え方
　　●複雑な**非線形構造を内在する現象**に対して、**非線形回帰モデリング**を実施する
　　　データの構造を線形で捉える場合は限られている。
　　　⇒非線形な構造をとらえる仕組みを考える。

###4-2-2.基底展開法
　　●基底関数と呼ばれる「既知の非線形関数」と「パラメータベクトル」の線形結合
　　●未知のパラメータには、線形回帰モデルと同じく「最小二乗法」「最尤法」によって推定する

```math
　　y_{i}=f(x_{i})+ε_{i}

　　y_{i}=w_{0}+\sum_{j=1}^{m}w_{j}\phi_{j}+ε_{i}
```

　　･･･$x$を線形の写像の$\phi$によって、非線形にしてから$w$との線形結合を見る。
　　　ムムム。難しいですね。
　　　ということで、別にお勉強してみました。
　　　困ったときのWikipedia様。
　　　[＜非線形回帰（出典：Wikipediaより）＞](https://ja.wikipedia.org/wiki/%E9%9D%9E%E7%B7%9A%E5%BD%A2%E5%9B%9E%E5%B8%B0)

　　●よく使われる基底関数
　　　①多項式関数
　　　②ガウス型基底関数
　　　③スプライン関数／Ｂスプライン関数

　　⇒$x$軸の空間は横軸であるので、$x$を一度、非線形に変換する。
　　　その後、非線形の関数とパラメータを線形結合でfitできるのではという考え方。
　　　もう少し深く勉強が必要そうです。（笑）

###4-2-3.１次元の基底関数に基づく非線形回帰

【多項式（1～9次）】

```math
\phi_j=x^j
```
【ガウス型基底】
　　●正規分布の形そのもので、当然、微分すると1になる。

```math
\phi_j(x)=exp \left\{\frac{(x-μ_j)^2}{2h_j}\right\}
```

###4-2-4.２次元の基底関数に基づく非線形回帰

【２次元ガウス型基底関数】
　　●ベクトル表記で表せられる。
　　●$h_j$が小さくなるとバンド幅も小さくなり、大きくなるとバンド幅も大きくなる。

```math
\phi_j(x)=exp \left\{\frac{(x-μ_j)^T(x-μ_j)}{2h_j}\right\}
```

###4-2-5.非線形関数の計画行列や最尤法の予測値

【説明変数】　　

```math
x_i=(x_{i1},x_{i2},･･･,x_{im})\in{\mathbb{R}^m}
```

【非線形関数ベクトル】
　　●基底関数ベクトルに変換した$k$次元のベクトル
　　●$\phi$は事前に用意したものに置き換える。

```math
　　\phi(x_i)=(\phi_1(x_i),\phi_2(x_i),･･･,\phi_k(x_i))^T\in{\mathbb{R}^k}
```
【非線形関数の計画行列】
　　●$n×k$のサイズの行列で、写像を学習データ分だけ用意する。

```math
　　\Phi^{(train)}=(\phi(x_1),\phi(x_2),･･･,\phi(x_n))^T\in{\mathbb{R}^{n×k}}
```

【最尤法による予測値】

```math
　　\hat y=\Phi(\Phi^{(train)^T}\Phi^{(train)})^{-1}\Phi^{(train)^{T}}y^{(train)}
```

###4-2-6.未学習(underfitting)と過学習(overfitting)
　　●未学習　･･･　学習データで十分な誤差が得られないモデル。表現力が低い。
　　●過学習　･･･　学習データにぴったりのモデル過ぎて、テストデータとの誤差が大きいモデル。

　　未学習の場合は、表現力の高いモデルを利用する。
　　過学習の場合は、学習データを増やしたり、不要な基底関数（変数）を削除して表現力を抑止する。
　　また、正規化法で表現力を抑止する。

　　※何事も「やらなすぎ」「やりすぎ」にはご注意を！！

###4-2-7.過学習(overfitting)対策
　【不要な基底関数を削除】
　　　●基底関数の数、位置やバンド幅によりモデルの複雑さが変化する。
　　　●適切な基底関数を用意する。

　【正規化法（罰則化法）】
　　　●モデルの複雑さに伴い値が大きくなる“正則化項（罰則項）”を課す関数を最小化
　　　　⇒複数の種類があり、推定量の性質が異なる。
　　　●正則化（平滑化）パラメータ

```math
　　\mathcal{S}_γ=(y-\Phi w)^{T}(y-\Phi w)+γR(w)　　\gamma(>0)
```

　　　⇒$γR(w)$がモデルの複雑さに伴う罰則である。
　　　　$γ$をどの程度抑えるかがポイント。

###4-2-8.正則化項（罰則項）の役割、正規化パラメータの役割

　　●正則化項が無い場合は、最小二乗推定量となる。
　　●Ｌ２ノルムを利用する場合は、Ridge推定量と呼ぶ。（縮小推定と呼ばれる）
　　　⇒Ridge推定量を大きく取る（制約面を大きく）と、最小二乗推定量と同じになる。
　　　　小さく取る（制約面を小さく）と、パラメータが0になるものが多く、overfittingしてしまう。
　　●Ｌ１ノルムを利用する場合は、Lasso推定量と呼ぶ。（スパース推定と呼ばれる）
　　　⇒Ｌ１ノルムはダイヤモンド形。
　　　　いくつかのパラメータを正確に0に推定する。不要な基底や変数を排除できる。
　　　　また、変数を推定する指標になる。

###4-2-9.モデルの選択
　　●汎化性性能が高い適切なモデルは**交差検証法**で決定する！！
　　　⇒どうやって見つけるのか。

###4-2-10.汎化性能
　　●学習データ以外で、新たな入力データに対する予測性能のこと。
　　●汎化誤差（テスト誤差）が小さいものが良い性能のモデル。
　　　⇒当然、学習データではなく、検証データで性能測定する。
　　●バイアス・バリアンス分解
　　　⇒今度、ゆっくり勉強してみよう。。。《今後の宿題》

　【訓練誤差】

```math
MSE_{train}=\frac{1}{n_{train}}\sum^{n_{train}}_{i=1}(\hat y_i^{(train)}-y_i^{(train)})^2
```

　【テスト誤差】

```math
MSE_{test}=\frac{1}{n_{test}}\sum^{n_{test}}_{i=1}(\hat y_i^{(test)}-y_i^{(test)})^2
```

###4-2-11.学習と検証のデータ利用
　【ホールドアウト法】
　　　データを学習用とテスト用の２つに分けて「予測精度」「誤り率」
　　　を推定するために使用する。ただし、問題がある。

　　　・学習用を多くすると精度は上がるが、性能評価の精度が落ちる。
　　　・テスト用を多くすると学習用が減るため、予測精度が落ちる。
　　　・使用できるデータが大量にない場合、良い性能評価を与えない欠点となる。
　　　　⇒そのため、データ量のバランス等を考えなければならない。
　　　　　（例：片方に外れ値のデータが含まれる。等）

　【クロスバリデーション（交差検証：ＣＶ）】
　　　データを学習用とテスト用に分割して、組み替えて使用する。
　　　分割したデータでは重複していないことが大切。

　　　制度の平均をＣＶ値と呼び、最も小さいＣＶ値のモデルを採用する。

　　　※ホールドアウトとＣＶでモデルの検証をした際に、
　　　　ホールドアウトの精度の方が良くても、汎化性能の推定としてはＣＶを利用する。