【2通りの方法】最小二乗法をExcelを使った行列演算で解析的に解いてみた

2021年11月1日

下記のデータが得られた時に、2次関数で近似したいとします。

 

この最小二乗法の問題を、行列を使った2通りの方法で解いてみました。

係数を微分する方法と、変数を微分する方法です。

尚、今回は簡単のため2次関数で近似しますが、もっと複雑な高次関数になってもこれらの方法は使えます。

 

係数を微分する方法

xからyを推定する式を

f(x) = ax2+bx+c

と置きます。

すると、実測値yと推定値f(x)との誤差は

y-f(x)

なので、二乗誤差

e = {y-f(x)}2

が最小となるような係数a、b、cを求めることになります。

しかし、1点だけについて誤差を小さくしても仕方ないので、10点すべてについての合計誤差

E = Σ{y-f(x)}2

が最小となるような係数a、b、cを求めます。

 

この二乗誤差Eを書き直すと

E = Σ{y-f(x)}2

= Σ(y- ax2-bx-c)2

となります。

このEは各係数で偏微分した式がすべてゼロとなる時に最小値を取ります。

すなわち、

∂E/∂a = 0

∂E/∂b = 0

∂E/∂c = 0

をすべて満たすようなa、b、cを求める問題に帰着します。

 

一見、難しそうに思えますが、例えばaで偏微分する時にはその他の変数はすべて定数と見なせるので簡単です。

∂E/∂a = -2Σx2(y- ax2-bx-c) = 0

この時、高校で習った合成関数の微分の技を使っています。

{g(f(x))}’=g’(f(x))f’(x)

詳しくは、下記サイトを参照して下さい。

>> 【基本】合成関数の微分 | なかけんの数学ノート

 

bやcでの偏微分も同じようにできます。

∂E/∂b = -2Σx(y- ax2-bx-c) = 0

∂E/∂c = -2Σ(y- ax2-bx-c) = 0

 

これらの3式は、次のように規則的な形に書き直せます。

∂E/∂a = -2Σx2(y- ax2-bx-c) = 0

aΣx4+bΣx3+cΣx2=Σx2y

 

∂E/∂b = -2Σx(y- ax2-bx-c) = 0

aΣx3+bΣx2+cΣx1=Σx1y

 

∂E/∂c = -2Σ(y- ax2-bx-c) = 0

aΣx2+bΣx1+cΣx0=Σx0y

 

そして行列を使うと、更にきれいな形になります。

これを

と置くと

Ax = b

と書けます。

そして、行列Aとbは観測した10組のデータがあるので、次にように計算できて定数行列になります。

 

後は、x=A-1bを解くだけです。

これもExcelで次のように計算できます。

 

これで誤差Eを最小化する係数a、b、cが求まりました。

yを推定する近似式(回帰式)は

f(x) = 1.8x2-5.7x+6.7

です。

 

変数を微分する方法

もう一つの方法でもxからyを推定する式を

f(x) = ax2+bx+c

と置きます。

すると誤差は

f(x)-y

と表せます。

観察データは10組ありますので、10個の誤差が計算できます。

そして、これをまとめて次のように行列で表すことができます。

 

すると、二乗誤差である

||Ax – b||2

を最小にするようなa、b、cを求める問題に帰着します。

 

これは次のように式変形できます。

||Ax – b||2

= (Ax – b) T (Ax – b)

= (x TA T – b T)(Ax – b)

= xTATAx – xTATb – bTAx + bTb

= xTATAx – 2xTATb + bTb

 

これを最小化するxは、xで微分してゼロと置いた式を解けば求まります。

行列の微分で一見難しそうですが、すべての項はスカラーですので簡単です。

第一項は対称行列であるATAの各成分にx行列の各成分の二乗を掛けているので、x2の微分が2xになるように2ATAxになります。

また第二項は、ATbの各成分に2xTの各成分を掛けているので、2xの微分が2になるように2ATbになります。

第三項は定数で微分するとゼロなので、整理すると

ATAx = ATb

となります。

これをxについて解くと、

x = (ATA)-1ATb

です。

 

後は数字を入れて計算するだけです。

Excelで次のように計算できます。

 

 

yを推定する近似式(回帰式)は

f(x) = 1.8x2-5.7x+6.7

になりました。

これは、一番目の方法で計算した結果と同じです。

 

両方法とも勾配降下法などのような近似解を求める数値的解法ではなく、ズバリの解を求める解析的解法です。

4次や5次などの高次の回帰式でも同じやり方で解析的に求められるので、大変便利な方法だと思います。