社内se × プログラマ × ビッグデータ

プログラミングなどITに興味があります。

単回帰分析の回帰直線の傾きと切片を求める式

実験データのような誤差を含む値から、 それにフィットするような関数を求めるために最小二乗法が使われるようです。
blueskyarea.hatenablog.com

ついては、以下の数式の J を最小にする直線の a (傾き) と b(切片) を求めれば良いことになると思われます。

\displaystyle{
J=\sum_{i=1}^n (y _ i-ax _ i-b)^ 2
}

言い換えると、Jを最小化することが最小二乗法の目標になりそうです。
Jを最小にするには「極値となる点では、微分した結果が0になる」ということを利用して求めます。

ax^ 2
a > 0 の時、下に凸な二次関数
a < 0 の時、上に凸な二次関数
Jは下に凸な二次関数なのでこれで最小値が求まるはずです。

f:id:blueskyarea:20200111171646p:plain

今具体的に求めたいのはaとbの値なので、それぞれについて偏微分していきます。
偏微分とは、「特定の文字以外定数だとみなして」微分していくことです。

a に対する偏微分

\displaystyle{
\frac{∂J}{∂a}=\sum_{i=1}^n (y _ i-ax _ i-b)^ 2
}

\displaystyle{
\frac{∂J}{∂a}=-2\sum_{i=1}^n x(y _ i-ax _ i-b)
}

b に対する偏微分

\displaystyle{
\frac{∂J}{∂b}=\sum_{i=1}^n (y _ i-ax _ i-b)^ 2
}

\displaystyle{
\frac{∂J}{∂b}=-2\sum_{i=1}^n (y _ i-ax _ i-b)
}

それぞれをイコール0として、以下の連立方程式を解く。

\displaystyle{
\frac{∂J}{∂a}=-2\sum_{i=1}^n x(y _ i-ax _ i-b)=0
}

\displaystyle{
\frac{∂J}{∂b}=-2\sum_{i=1}^n (y _ i-ax _ i-b)=0
}

結論を書くと、a(傾き)については、以下のような式で求められるはずです。

\displaystyle{
a=\frac{Sxy}{Sxx}
}

\displaystyle{
Sxx=\sum_{i=1}^n (x _ i-ave(x))^ 2
}

\displaystyle{
Sxy=\sum_{i=1}^n (x _ i-ave(x))(y _ i-ave(y))
}

ここで Sxx は x の分散で、Sxy は x,y の共分散のことになります。
あとは、 b(切片) については

\displaystyle{
y = ax + b
}

\displaystyle{
b = y - \frac{Sxy}{Sxx}x
}

ブログで少し複雑な数式を書くのかなり大変です。。