重回帰を行うときにデータに全て1の列を追加する理由【MATLAB】

Nです.今回は MATLAB の“regress”関数を例に重回帰を行う際に,データの行列に全て1の列を加える理由について説明します.

結論から言うと,データの行列に全て1の列を加えるのはy切片(y-intercept)についても回帰を行うためです.

数式でイメージを書くと

\begin{align}
\left[
\begin{array}{c}
y_1 \\
y_2 \\
\vdots \\
y_N
\end{array}
\right]
=
\left[
\begin{array}{cccc}
x_{11} & x_{12} & \ldots & x_{1M}\\
x_{21} & x_{22} & \ldots & x_{2M}\\
\vdots & \vdots & \ddots & \vdots\\
x_{N1} & x_{N2} & \ldots & x_{NM}
\end{array}
\right]
\left[
\begin{array}{c}
w_{1} \\
w_{2} \\
\vdots \\
w_{M}
\end{array}
\right]+ y_{intercept}
\end{align}

という式を

\begin{align}
\left[
\begin{array}{c}
y_1 \\
y_2 \\
\vdots \\
y_N
\end{array}
\right]
&=
\left[
\begin{array}{ccccc}
x_{11} & x_{12} & \ldots & x_{1M} & 1\\
x_{21} & x_{22} & \ldots & x_{2M} & 1\\
\vdots & \vdots & \ddots & \vdots & \vdots\\
x_{N1} & x_{N2} & \ldots & x_{NM} & 1
\end{array}
\right]
\left[
\begin{array}{c}
w_{1} \\
w_{2} \\
\vdots \\
w_{M} \\
y_{intercept}
\end{array}
\right]\\
\boldsymbol{y} &= X’\boldsymbol{w}’
\end{align}

という式に変形させて,\(\boldsymbol{w}’\)(原点を通るM次元の平面)を求める問題に変化させています.こうすることで一度に回帰の係数とy切片を求めることができるということだと思います.

上記のような理由からMATLABプログラム上では

X = [X ones(size(X,1),1)];
w = regress(y,X);

のようにすべて1の列を追加してからregress関数の引数にしたりするわけです.

コメント

タイトルとURLをコピーしました