Python入門トップページ
- データを眺める
- 重回帰分析
- 重回帰分析とリッジ回帰
- リッジ回帰を自作してみよう
- scikit-learnでリッジ回帰をしてみよう
リッジ回帰をしてみよう
重回帰分析とリッジ回帰
重回帰分析
重回帰分析の定式化
前のページで考えた入力が \(x_1\) と \(x_2\) であるような 2 次元の重回帰分析を考えます.切片にあたるバイアスを \(w_0\) とし,\(x_1\),\(x_2\) に対する重み(係数)パラメータをそれぞれ \(w_1\),\(w_2\) とすると,重回帰分析の回帰式は
\[
\hat{y} = w_0 + w_1 x_1 + w_2 x_2
\]
となります.
今は2次元ですが,次元が大きくなると見通しが悪くなることからベクトルを使って表記してみよう.まず,
入力ベクトルは先頭に1を付加して,
\[
{\bf{x}}^{\rm T} = \left(1,~ x_1,~ x_2 \right)
\]
と書くことにします.なお,\(\rm T\) は転置を意味するので,
\[
{\bf{x}} = \left(
\begin{array}{c}
1 \\ x_1 \\ x_2
\end{array}
\right)
\]
です.一方で係数ベクトルを
\[
{\bf{w}}^{\rm T} = \left(w_0,~ w_1,~ w_2 \right)
\]
と書くことにします.ベクトル表記を利用すれば,回帰式は次の通り書くことができます.
\begin{eqnarray}
\hat{y}
&=& w_0 + w_1 x_1 + w_2 x_2
\\
&=& \left( \begin{array}{ccc} w_0 & w_1 & w_2 \end{array} \right)
\left(
\begin{array}{c}
1 \\ x_1 \\ x_2
\end{array}
\right)
\\
&=&
{\bf{w}}^{\rm T} {\bf{x}}
\end{eqnarray}
もちろん,次のように書き換えることもできます.
\begin{eqnarray}
\hat{y}
&=&
{\bf{x}}^{\rm T} {\bf{w}}
\end{eqnarray}
前のページのデータでは10個のデータがあったが,データ数を \(N\) とし,\(i ~(=1,\cdots,N)\) 番目の入力データを \({\bf{x}}_i\),\(i ~(=1,\cdots,N)\) 番目の予測値を \(\hat{y}_i\) と書きます.このとき,上の式を次のように書き並べることができます.
\[
\left( \begin{array}{c}
\hat{y}_1 \\ \hat{y}_2 \\ \vdots \\ \hat{y}_N
\end{array} \right)
=
\left( \begin{array}{c}
{\bf{x}}^{\rm T}_1 {\bf{w}} \\
{\bf{x}}^{\rm T}_2 {\bf{w}} \\
\vdots \\
{\bf{x}}^{\rm T}_N {\bf{w}}
\end{array} \right)
=
\left( \begin{array}{c}
{\bf{x}}^{\rm T}_1 \\
{\bf{x}}^{\rm T}_2 \\
\vdots \\
{\bf{x}}^{\rm T}_N
\end{array} \right) {\bf{w}}
\]
さらに,これは次のように書くことができます.
\[
\left( \begin{array}{c}
\hat{y}_1 \\ \hat{y}_2 \\ \vdots \\ \hat{y}_N
\end{array} \right)
=
\left( \begin{array}{ccc}
1 & x_{11} & x_{12} \\
1 & x_{21} & x_{22} \\
\vdots & \vdots & \vdots \\
1 & x_{N1} & x_{N2}
\end{array} \right)
\left(
\begin{array}{c}
w_0 \\ w_1 \\ w_2
\end{array}
\right)
\]
上の式において,予測値のベクトルを \(\hat{\bf y} = (\hat{y}_1, ~\hat{y}_2, \cdots, \hat{y}_N )\)とし,入力データの行列を \({\bf X} \) とすると,\(\hat{\bf y} \) は次のように書くことができます.
\[
\hat{{\bf y}} = {\bf X}{\bf w}
\]
重回帰の二乗誤差
重回帰分析では二乗誤差を最小にするような係数パラメータ \(\bf w\) を決めることになります.ここではその二乗誤差を定式化します.
データ数を \(N\),\(i ~(= 1, 2, \cdots, N)\) 番目の出力データを \(y_i\),回帰式 \({\bf{x}}^{\rm T}_i {\bf{w}}\) から得られた予測値を \(\hat{y}_i\) とします.このとき,\(i ~(= 1, 2, \cdots, N)\) 番目のデータに対する二乗誤差は
\[
\left( y_i - \hat{y}_i \right)^2
\]
と書けるので,すべてのデータに対する二乗誤差の合計\(E\)は
\begin{eqnarray}
E &=& \left( y_1 - \hat{y}_1 \right)^2
+ \left( y_2 - \hat{y}_2 \right)^2
+ \cdots
+ \left( y_N - \hat{y}_N \right)^2
\\
&=&
\sum_{i=1}^{N} \left( y_i - \hat{y}_i \right)^2
\end{eqnarray}
となります.
さらに上の式はベクトルと行列を使って次のように書き換えることも可能です.
\begin{eqnarray}
E &=& \sum_{i=1}^{N} \left( y_i - \hat{y}_i \right)^2
\\
&=&
\sum_{i=1}^{N} \left( y_i - {\bf x}_i^{\rm T} {\bf w} \right)^2
\\
&=&
\left( {\bf y} - {\bf X} {\bf w} \right)^2
\end{eqnarray}
準ニュートン法などの任意の最適化アルゴリズムを使って上式の
\(\bf E\)
を最小化する
\(\bf w\) を求めればよいが,
\( E\) を最小にする解は次のようになります.
\[
{\bf w} = \left( {\bf X}^{\rm T} {\bf X} \right)^{-1} {\bf X}^{\rm T} {\bf y}
\]
リッジ回帰
リッジ回帰では,係数が極端に大きくなりすぎないように,重回帰の二乗誤差の式(上の式)に係数のペナルティとなる項を付け加えます.これを正則化 (regularization) といいます.係数のペナルティは係数の二乗和にさらに重み \(\alpha ~(\geq 0)\) をかけ合わせたものになります.
まず,係数の二乗和は
\begin{eqnarray}
w_0^2 + w_1^2 + w_2^2
\end{eqnarray}
です.ベクトル \( \bf w \) を使って次のように書くこともできます.
\begin{eqnarray}
{\bf w}^{\rm T} {\bf w}
\end{eqnarray}
上の \( {\bf w}^{\rm T} {\bf w} = w_0^2 + w_1^2 + w_2^2 \) という関係が成り立つことを念の為に確かめておきます.
\begin{eqnarray}
{\bf w}^{\rm T} {\bf w}
&=&
\left(
\begin{array}{ccc}
w_0 & w_1 & w_2
\end{array}
\right)
\left(
\begin{array}{c}
w_0 \\ w_1 \\ w_2
\end{array}
\right)
\\
&=&
w_0^2 + w_1^2 + w_2^2
\end{eqnarray}
確かに,\( {\bf w}^{\rm T} {\bf w} \) が係数の二乗和を意味していることがわかりました.
リッジ回帰では係数の二乗和 \( {\bf w}^{\rm T} {\bf w} \) に重み \(\alpha ~(\geq 0)\) をかけた項を重回帰の \(E\) に加えて
\begin{eqnarray}
E &=&
\left( {\bf y} - {\bf X} {\bf w} \right)^2
+ \alpha {\bf w}^{\rm T} {\bf w}
\end{eqnarray}
を最小化するような係数 \( {\bf w} \) を求めることになります.これによって,係数が極端に大きくなりすぎないようにすることができます.
なお,上の \( E \) を最小にする解は次のようになります.
\[
{\bf w} =
\left( {\bf X}^{\rm T} {\bf X} + \alpha {\bf I} \right)^{-1}
{\bf X}^{\rm T} {\bf y}
\]
ここで,\( {\bf I} \) は単位行列です.
目次に戻る