yProcessingClub

すみません、許してください

線形回帰メモ

線形回帰について勉強中である.
講義ノートとして記事を書くことにする.

1変数の線形回帰

以下のように回帰直線を設定する.
h_\theta (x) = \theta _0 + \theta _1  x

Cost Function

 J(\theta _0 , \theta _1) = \frac{1}{2m} \sum ^m _{i=1}{( h_\theta (x^{(i)}) -y^{(i)} )^2}

(h_\theta (x^{(i)}) -y^{(i)})^2の部分が回帰直線で予測した値と実際の値との誤差(の2乗)であり,全ての点における誤差2乗の和の平均値(の割る2)がCost Functionとなる.
割る2したのは後の計算が楽になるからである.

Gradient descent

 J(\theta _0 , \theta _1)を最小化するような組(\hat{\theta _0 }, \hat{\theta _1 })をGradient descentで求める.
まず偏微分を行う.


\begin{eqnarray*}
\frac{\partial}{\partial\theta _j}J(\theta _0, \theta _1)
&=& \frac{\partial}{\partial\theta _j} \frac{1}{2m} \sum ^m _{i=1}{( h_\theta (x^{(i)}) -y^{(i)} )^2}\\
&=&\frac{\partial}{\partial\theta _j} \frac{1}{2m} \sum ^m _{i=1}{( \theta _0 + \theta _1  x^{(i)} -y^{(i)} )^2}\\
\end{eqnarray*}

上式をj=0, 1について求める.
\frac{d}{dx}( f(x) )^2 = 2(f(x)) \cdot f^{'}(x)なので,
\frac{\partial}{\partial\theta _0}( \theta _0 + \theta _1  x )^2 = 2(\theta _0 + \theta _1  x)
\frac{\partial}{\partial\theta _1}( \theta _0 + \theta _1  x )^2 = 2(\theta _0 + \theta _1  x)x
となることから,


\begin{eqnarray*}
\frac{\partial}{\partial\theta _0}J(\theta _0, \theta _1)&=&\frac{\partial}{\partial\theta _0}\frac{1}{2m} \sum ^m _{i=1}{( \theta _0 + \theta _1  x^{(i)} -y^{(i)} )^2}\\
&=& \frac{1}{m} \sum ^m _{i=1}{( \theta _0 + \theta _1  x^{(i)} -y^{(i)} )}\\
&=& \frac{1}{m} \sum ^m _{i=1}{( h_\theta (x^{(i)}) -y^{(i)} )}
\end{eqnarray*}

\begin{eqnarray*}
\frac{\partial}{\partial\theta _1}J(\theta _0, \theta _1)&=&\frac{\partial}{\partial\theta _1}\frac{1}{2m} \sum ^m _{i=1}{( \theta _0 + \theta _1  x^{(i)} -y^{(i)} )^2}\\
&=& \frac{1}{m} \sum ^m _{i=1}{( \theta _0 + \theta _1  x^{(i)} -y^{(i)} )x^{(i)} }\\
&=& \frac{1}{m} \sum ^m _{i=1}{( h_\theta (x^{(i)}) -y^{(i)} )x^{(i)} }
\end{eqnarray*}

Gradient descent algorithmは以下のようになる.
repeat{
\theta _0 \mathrel{\mathop:}= \theta _0 - \alpha \frac{1}{m} \sum ^m _{i=1}{( h_\theta (x^{(i)}) -y^{(i)} )}
\theta _1 \mathrel{\mathop:}= \theta _1 - \alpha \frac{1}{m} \sum ^m _{i=1}{( h_\theta (x^{(i)}) -y^{(i)} )x^{(i)} }
}
ここで\alphaは学習率であり,大きいほど更新量が大きくなる.

上式を値が変化しなくなるまで繰り返し更新することで最適な組(\hat{\theta _0 }, \hat{\theta _1 })が求められる.

多変数の線形回帰

重回帰は以下となる.
h_\theta (x) = \theta _0 + \theta _1  x_1 + \theta _2 x_2 + \cdots +  \theta _n x_n
これはベクトル\boldsymbol \theta = (\theta _0 , \theta _1 , \cdots , \theta _n)^{\mathsf T}\boldsymbol x = (x _0 , x _1 , \cdots , x _n)^{\mathsf T}x_0=1と表記することで以下のように書ける.
h_\theta (x) = \boldsymbol \theta ^{\mathsf T} \boldsymbol x


重回帰の例としてワイン方程式を出そう.
統計と予測 - ワインの方程式 - : 発想法 - 情報処理と問題解決 -
から引用させていただき,イコールや定数項の位置を入れ替えて書くと,
ワインの価格 =
ー 12.145
+ 〔前年の10月〜3月の雨の量〕× 0.00117
ー〔8,9月の雨の量〕× 0.00386
+〔4〜9月の平均気温〕× 0.616
+〔ワインの年齢〕× 0.02358
となるそうである.

これを\thetaで表すと,

\boldsymbol \theta =
\begin{bmatrix}
\theta _0 \\
\theta _1 \\
\theta _2 \\
\theta _3 \\
\theta _4 \\
\end{bmatrix}
=
\begin{bmatrix}
{-}12.145 \\
0.00117 \\
{-}0.00386\\
0.616\\
0.02358\\
\end{bmatrix}
となる.
このような\boldsymbol \thetaを探すのが重回帰分析である.

Cost Function

1変数と同様に,Cost Functionを定義する.
 J(\theta _0 , \theta _1 , \cdots , \theta _n) = \frac{1}{2m} \sum ^m _{i=1}{( h_\theta (x^{(i)}) -y^{(i)} )^2}
回帰によって求めた値と実際の値との差分を二乗して総和を求めるという話なので,1変数でも多変数でも同じである.

Gradient descent

j=0, \cdots, nについて偏微分を行う.

\begin{eqnarray*}
\frac{\partial}{\partial\theta _j}J(\theta _0, \theta _1, \cdots , \theta _n)&=&\frac{\partial}{\partial\theta _j}\frac{1}{2m} \sum ^m _{i=1}{( h_\theta (x^{(i)}) -y^{(i)} )^2}\\
&=& \frac{1}{m} \sum ^m _{i=1}{( h_\theta (x^{(i)}) -y^{(i)} )x_j^{(i)} }
\end{eqnarray*}

Gradient descent algorithmは以下のようになる.
repeat{
\theta _j \mathrel{\mathop:}= \theta _j - \alpha \frac{1}{m} \sum ^m _{i=1}{( h_\theta (x^{(i)}) -y^{(i)} )x_j^{(i)} }
}

こうして書くと分かるが,重回帰は単回帰の一般化である.