非線形モデル(機械学習入門)
線形モデルには解釈が容易であるというメリットの反面、予測のパフォーマンスが劣るというデメリットがある。LassoやRidge回帰は変数選択を行い分散を下げることで予測の精度を向上させるが、線形性の過程を緩めることで、よりパフォーマンスを上げることが出来る。そこで、ここでは変数について線形でないモデルを扱う。
ここで扱うモデル
- 変数の2乗や3乗の項を説明変数として含む線形モデル
- 変数のステップ関数による変換を説明変数として含む項を含む線形モデル
- 回帰スプラインによるこれらの拡張
- 平滑化スプラインによる回帰スプラインの改良
- カーネル関数による重みづけを用いた局所回帰
- スプラインを複数変数に対して用いることによる一般化加法モデル
多項式回帰
\(x\)についての非線形モデルを考えたいとき、しばしば適用されるアイディアは線形モデル
\[y_i=\beta_0+\beta_1x_i+\epsilon_i\]
の説明変数を\(x,x^2,\ldots,x^d\)とすることで、線形モデル
\[y_i=\beta_0+\beta_1x_i+\beta_2x_i^2+\dots+\beta_dx_i^d+\epsilon_i\]
を扱うことだった。次数を上げれば表現できる関数のクラスは広がるが、定義域全体でのフィッティングになるため現実にはデータへの当てはまりが悪く、3次程度にとどめられることがほとんどである。
関数形を見たいときには、個別の係数に興味があるわけではないので、推定結果を用いて多項式全体を計算する。すなわち
\[\hat{f}(x_0)=\hat{\beta}_0+\hat{\beta}_1x_0+\hat{\beta}_2x_0^2+\dots+\hat{\beta}_dx_0^d\]を用いればよい。
各点\(x_0\)での分散\(Var\left[\hat{f}(x_0)\right]\)
ここで\(x_0\)は確率変数ではないので
\[E\left[\left(\hat{f}(x_0)-E\left(\hat{f}(x_0)\right)\right)^2\right]=E\left[\left(\sum_{j=0}^d \left(\hat{\beta}_j- E \left(\hat{\beta}_j\right) \right)x_0^j \right)^2\right]\]
のサンプル対応で推定でき、中心極限定理から従う1.96を用いれば、95\(\%\)信頼区間を計算できる。
被説明変数が2値(0,1)の場合にも、説明変数を多項式にすることで対応できる。たとえばロジスティック回帰を用いて
\[Pr(y_i\gt a|x_i)=
\frac{\exp\left(\beta_0+\beta_1 x_i+\ldots + \beta_d x_i^d \right)}
{1+\exp\left(\beta_0+\beta_1 x_i+\ldots + \beta_d x_i^d \right)}\]
とすればよい。推定結果の例(Fig 7.1の右側)
ステップ関数を利用した回帰
Polynomial Regressionでは、\(f\)の定義域全体に高次式をフィットした。一方で定義域を分割し、区画ごとに簡単な関数をフィットするという考え方もある。ここではstep functionによるフィットを紹介する。step function \(C_k(\cdot),~k=1,…,K\)を以下のように定義する。
\[C_0(X)=I\left(X \lt c_1\right)\]
\[C_1(X)=I\left(c_1 \leq X \lt c_2\right)\]
\[~~~\vdots~~~\]
\[C_{K-1}(X)=I\left(c_{K-1} \leq X \lt c_K\right)\]
\[C_K(X)=I\left(c_K \leq X \right)\]
とし、これを線形モデルの説明変数に適用することで
\[y_i=\beta_0+\beta_1C_1(x_i)+\ldots+\beta_K C_K(x_i)+\epsilon_i \]
を考える。手続きとしては\(C_k(\cdot)\)を作り、データを\(C_k(\cdot)\)により変換したものをあらかじめ用意して、線形回帰の説明変数として用いればよい。
このモデルでは、全域にフィットすることに起因する当てはまりの悪さは回避できるが、
非連続関数を考えることに起因する当てはまりの悪さが新たに発生する。
ロジスティックモデルへの適用はPolynomialRegressionと同様に
\[Pr(y_i\gt a| x_i)=
\frac{\exp\left(\beta_0+\beta_1 C_1(x_i)+\ldots + \beta_K C_K(x_i) \right)}
{1+\exp\left(\beta_0+C_1(x_i)+\ldots + \beta_K C_K(x_i) \right)}\]
とすればよい。
基底関数を利用した回帰
これまで見てきた手続きは以下のように一般化できる。 \[y_i=\beta_0+\beta_1b_1(x_i)+\ldots+\beta_K b_K(x_i)+\epsilon_i\] 但し\(b_1(\cdot),\ldots,b_K(\cdot)\)は基底関数。
- Polynominal Regressionでは\(b_j(x)=x^j\)
- Step Functionsでは\( b_j(x)=I \left( c_j \leq x \lt c_{j+1} \right) \)
この枠組みで、より近似精度の高いモデルを考える。
スプライン回帰
Piecewise Polynomials
たとえばPolynominal Regressionは以下のように表現される。
\[y_i=\beta_0+\beta_1x_i+\beta_2 x_i^2+\beta_3 x_i^3+\epsilon_i\]
このモデルは全域に対して関数をフィットさせることで当てはまりの悪さが生じていた。
そこで、ノット \(c\) を境にパラメタを変化できるようにすることで解決を試みる。
\[y_i=\left\{\begin{array}[|]
~\beta_{01}+\beta_{11}x_i+\beta_{21} x_i^2+\beta_{31} x_i^3+\epsilon_i&\text{if}~~x_i\lt c\\
~\beta_{02}+\beta_{12}x_i+\beta_{22} x_i^2+\beta_{32} x_i^3+\epsilon_i&\text{if}~~x_i\geq c
\end{array}\right.\]
次数を下げればStep Functionsに一致し、ノットを減らせばPolynominal Regressionに一致することから、この表現はこれらの一般化であるとわかる。
Constraints and Splines
Piecewise PolynomialsはPolynomial RegressionやStep Functionの利用と比較すると良い近似になっているように感じるが、近似区間の境周辺では当てはまりが良くないように見える。そこで、制約をかけながらスプライン回帰をすることでこの欠点を解決しようとする。
The Spline Basis Representation
区間ごとの3次式による回帰は以下のように簡単化できる。
\[y_i=\beta_0+\beta_1 b_1(x_i)+\ldots+\beta_{K+3}b_{K+3}(x_i)+\epsilon_i\]
但し\(b_k(\cdot)\)は区間ごとのstep functionや区間ごとに非零となる2次3次項などとすればよい。
\[h(x,\xi)=\left(x-\xi\right)_+=\left\{\begin{array}[|]
~\left(x-\xi\right)^3&\text{if}~~x\gt \xi\\
~0&\text{otherwise}
\end{array}\right.\]
を3次までのpower seriesに追加することで2回連続微分可能になる。cubic splineの場合は推定は説明変数を
\(X,X^2,X^3,h(X,\xi_1),\ldots,h(X,\xi_K)\)として最小2乗法で行えばよい。ただし\(\xi\)はノットであり、多いほど細かい区間ごとにフィットを行うことが出来る。
cubic splineの場合各ビンで3次関数をフィットするが、サポートの端ではこれがバイアスの要因になる。そこで端だけ1次近似にする方法がありこれをnatural splineという。
チューニングパラメーターの選び方
ノットは個数と場所の両方を変えられる。データが沢山あるところには細かくノットを配置することが多い。例によってtest dataへの当てはまりの良さを用いて次数やノットの数を決定する。
多項式線形回帰との比較
次数を上げることなく近似できるので、splineはpolynomialよりもパフォーマンスが良い。とくにsplineは端点での近似が良い。(収束レートが速い)
平滑化スプライン
平滑化スプラインの概要
我々の目的は\(y\)をよく説明する\(g\)を見つけることだが、
\(g\)の関数形に制約をかけないと
\[RSS=\sum_{i=1}^n(y_i-g(x_i))^2\]
の最小化には自明な解が存在してしまう。
そこで\(g\)に制約がかかるような最適化問題にしたい。しばしば用いられるのが
\[\sum_{i=1}^n(y_i-g(x_i))^2+\lambda\int g^{\prime\prime}(t)^2dt \]
- \(\lambda\)はチューニングパラメタ
- \(\lambda\rightarrow 0\)とすると\(g\)は柔らかくなり
- \(\lambda\rightarrow \infty\)とすると\(g\)はなめらかになる
平滑化パラメータ \(\lambda\)の選び方
\(\lambda\)が関数\(g\)の変化の激しさを決定するが、これはチューニングパラメタなので適切に選択する必要がある。例によってバイアスと分散のバランスを取って決定する必要がある。決定にはクロスバリデーションが役立つ。まず \[\hat{\mathbf{g}}_{\lambda}=\mathbf{S}_{\lambda}\mathbf{y}\] と表現できることに注意する。これは最小2乗法による回帰係数ベクトルが \[(\mathbf{x}^{\prime} \mathbf{x})^{-1}\mathbf{x}^{\prime} y\] と表わせるのを一般化したものと考えればよい。ところで \[df_{\lambda}=\sum_{i=1}^n\left\{\mathbf{S}_{\lambda}\right\}_{ii}\] とすると \[RSS_{cv}(\lambda)=\sum_{i=1}^n\left(y_i-\hat{g}_{\lambda}^{(-i)}\right)^2= \sum_{i=1}^n\left[ \frac{y_i-\hat{g}_{\lambda}(x_i)} {1-\left\{ \mathbf{S}_{\lambda} \right\}_{ii}} \right]^2\] が成り立ち、LOCVの計算コストを大幅に減らせるのでクロスバリデーションが簡単に行える。
局所回帰
\[\sum_{i=1}^nK_{i0}\left(y_i-\beta_0-\beta_1 x_i\right)^2\]
を最小化することで、局所的なデータを使った線形回帰になる。どこを中心にデータを集めるのかによって\(\beta_0,\beta_1\)の値が変化する。\(K_{i0}\)は
\[K_{i0}=K\left(\frac{X_i-x_0}{h}\right)\]
の形の関数\(K(\cdot)\)が用いられることが多い。たとえば標準正規分布の密度関数(ガウシアンカーネル)などが使われる。
\(h\)はチューニングパラメタである。
\[\sum_{i=1}^nK_{i0}\left(y_i-\beta_0-\beta_1 x_i\right)^2\]
は\(\beta_0,~\beta_1\)の関数なので、最小2乗法によって\(x_0\)ごとに推定が行える。
一般化加法モデル
一般化加法モデルの回帰への適用
ここまでは\(x\)の次元が1つの場合を考えてきたがここでは多変数化を考える。単純に重回帰モデル \[y_i=\beta_0+\beta_1x_{i1}+\ldots+\beta_px_{ip}+\epsilon_{i}\] の各項\(\beta_j x_j\)を \[y_i=\beta_0+\sum_{j=1}^p f_j(x_{ij})+\epsilon_{i}\] のように関数\(f_j(x_j)\)とすると線形モデルの自然な拡張になる。推定には、smooth splineで扱った各項のbasis functionを回帰の説明変数にすればよい。一般化加法モデルの分類問題への適用
GAMの考え方は重回帰モデルだけでなく、リンク関数により線形項を変換して\(Y\)を決定するモデルに適用可能である。たとえばロジスティック回帰モデルならば、 \[\log\left(\frac{p(X)}{1-p(X)}\right)=\beta_0+\beta_1 X_1+\ldots+\beta_p X_p\] の各項を \[\log\left(\frac{p(X)}{1-p(X)}\right)=\beta_0+f_1(X_1)+\ldots+f_p(X_p)\] とすればよい。推定には、smooth splineで扱った各項のbasis functionを回帰の説明変数にすればよい。