名古屋出身ソフトウェアエンジニアのブログ

線形回帰モデルの最小二乗解導出

公開:
更新:

多次元入力 xRD \boldsymbol{x} \in \mathbb{R}^D と出力 yR y \in \mathbb{R} を持つ線形回帰モデルは、次のように定義される。

f(x,w)=w0+d=1Dwdxd=wTx f(\boldsymbol{x}, \boldsymbol{w}) = w_0 + \sum_{d=1}^{D} w_d x_d = \boldsymbol{w}^T \boldsymbol{x}

ここで、 w=(w0,w1,,wD)T \boldsymbol{w} = (w_0, w_1, \dots, w_D)^T はパラメータベクトル、 x=(1,x1,,xD)T \boldsymbol{x} = (1, x_1, \dots, x_D)^T は入力ベクトルである。 NN 個の入出力サンプル xn,yn(n=1,,N) \boldsymbol{x}_n, y_n \: (n = 1, \dots, N) が与えられたとき、二乗誤差を最小化する最適な w \boldsymbol{w} を求めよ。

ただし、二乗誤差 J(w) J(\boldsymbol{w}) は、次のように定義される。

J(w)=12n=1N{f(xn,w)yn}2=12(Xwy)T(Xwy) \begin{split} J(\boldsymbol{w}) &= \frac{1}{2} \sum_{n=1}^{N} \left\{ f(\boldsymbol{x}_n, \boldsymbol{w}) - y_n \right\}^2 \\ &= \frac{1}{2} (\boldsymbol{X}\boldsymbol{w} - \boldsymbol{y})^T (\boldsymbol{X}\boldsymbol{w} - \boldsymbol{y}) \end{split}

ここで、出力データ y=(y1,,yN)T \boldsymbol{y} = (y_1, \dots, y_N)^T であり、入力データ行列 X \boldsymbol{X}

X=(x1Tx2TxNT)=(1x11x1D1x21x2D1xN1xND) \boldsymbol{X} = \begin{pmatrix} \boldsymbol{x}_1^T \\ \boldsymbol{x}_2^T \\ \vdots \\ \boldsymbol{x}_N^T \end{pmatrix} = \begin{pmatrix} 1 & x_{11} & \cdots & x_{1D} \\ 1 & x_{21} & \cdots & x_{2D} \\ \vdots & \vdots & \ddots & \vdots \\ 1 & x_{N1} & \cdots & x_{ND} \end{pmatrix}

である。

解答

便宜上、行列 X \boldsymbol{X} の添字を以下のように表す。

X=(x10x11x1Dx20x21x2DxN0xN1xND)=(1x11x1D1x21x2D1xN1xND) \boldsymbol{X} = \begin{pmatrix} x_{10} & x_{11} & \cdots & x_{1D} \\ x_{20} & x_{21} & \cdots & x_{2D} \\ \vdots & \vdots & \ddots & \vdots \\ x_{N0} & x_{N1} & \cdots & x_{ND} \end{pmatrix} = \begin{pmatrix} 1 & x_{11} & \cdots & x_{1D} \\ 1 & x_{21} & \cdots & x_{2D} \\ \vdots & \vdots & \ddots & \vdots \\ 1 & x_{N1} & \cdots & x_{ND} \end{pmatrix}

誤差を最小化する w \boldsymbol{w} を求めるためには、各 ww に関して次の連立方程式を解く必要がある。

wJ(w)=(0,,0)T \frac{\partial}{\partial \boldsymbol{w}} J(\boldsymbol{w}) = (0, \dots, 0)^T

ゆえに、

wJ(w)=w[12(Xwy)T(Xwy)]=(w0[12(Xwy)T(Xwy)],,wD[12(Xwy)T(Xwy)])T=(i=1Nxi0(j=0Dwjxijyi),,i=1NxiD(j=0Dwjxijyi))T=(0,,0)T \begin{split} & \frac{\partial}{\partial \boldsymbol{w}} J(\boldsymbol{w}) = \frac{\partial}{\partial \boldsymbol{w}} \left[ \frac{1}{2} (\boldsymbol{X}\boldsymbol{w} - \boldsymbol{y})^T (\boldsymbol{X}\boldsymbol{w} - \boldsymbol{y}) \right] \\ =& \left( \frac{\partial}{\partial w_0} \left[ \frac{1}{2} (\boldsymbol{X}\boldsymbol{w} - \boldsymbol{y})^T (\boldsymbol{X}\boldsymbol{w} - \boldsymbol{y}) \right], \dots, \frac{\partial}{\partial w_D} \left[ \frac{1}{2} (\boldsymbol{X}\boldsymbol{w} - \boldsymbol{y})^T (\boldsymbol{X}\boldsymbol{w} - \boldsymbol{y}) \right] \right)^T \\ =& \left( \sum_{i=1}^{N} x_{i0} \Bigl( \sum_{j=0}^{D} w_j x_{ij} - y_i \Bigr), \dots, \sum_{i=1}^{N} x_{iD} \Bigl( \sum_{j=0}^{D} w_j x_{ij} - y_i \Bigr) \right)^T = (0, \dots, 0)^T \end{split}

したがって、

(i=1Nxi0(j=0Dwjxij)i=1NxiD(j=0Dwjxij))=(i=1Nxi0yii=1NxiDyi) \begin{pmatrix} \sum_{i=1}^{N} x_{i0} \Bigl( \sum_{j=0}^{D} w_j x_{ij} \Bigr) \\ \vdots \\ \sum_{i=1}^{N} x_{iD} \Bigl( \sum_{j=0}^{D} w_j x_{ij} \Bigr) \end{pmatrix} = \begin{pmatrix} \sum_{i=1}^{N} x_{i0} y_i \\ \vdots \\ \sum_{i=1}^{N} x_{iD} y_i \end{pmatrix}

これを行列形式で表すと、

(x10xN0x1DxND)(x10x1DxN0xND)(w0wD)=(x10xN0x1DxND)(y1yN) \begin{pmatrix} x_{10} & \cdots & x_{N0} \\ \vdots & \ddots & \vdots \\ x_{1D} & \cdots & x_{ND} \end{pmatrix} \begin{pmatrix} x_{10} & \cdots & x_{1D} \\ \vdots & \ddots & \vdots \\ x_{N0} & \cdots & x_{ND} \end{pmatrix} \begin{pmatrix} w_0 \\ \vdots \\ w_D \end{pmatrix} = \begin{pmatrix} x_{10} & \cdots & x_{N0} \\ \vdots & \ddots & \vdots \\ x_{1D} & \cdots & x_{ND} \end{pmatrix} \begin{pmatrix} y_1 \\ \vdots \\ y_N \end{pmatrix}

すなわち、

XTXw=XTy \boldsymbol{X}^T \boldsymbol{X} \boldsymbol{w} = \boldsymbol{X}^T \boldsymbol{y}

よって、最適なパラメータは

w=(XTX)1XTy \boldsymbol{w} = (\boldsymbol{X}^T \boldsymbol{X})^{-1} \boldsymbol{X}^T \boldsymbol{y}

と求まる。