【2通りの方法】最小二乗法を行列を使って解く方法をわかりやすく解説
高次式に最小二乗法を適用するには「行列」を使うのが便利
下記のデータが得られた時に、xからyを予測する回帰式を求めたいとします。
【6つもあった!】Excelで単回帰分析の最小二乗法を解く方法をすべて実演
で回帰式をExcelで求める6通りの方法を紹介しましたが、この方法では直線の回帰式しか求められません。
つまり
y=ax+b
のようなxの1次式の回帰式しか求められません。
そこで今回は、2次式や3次式などの高次の回帰式を求める方法を紹介します。
行列演算を使うのですが、2通りの方法があります。
係数を微分する方法と、変数を微分する方法です。
今回の例題は2次式で十分に近似できますが、3次式や4次式などの複雑な回帰式であっても、この方法は使えます。
尚、このように高次式による回帰式は多項式回帰とも呼ばれます。
最小二乗法を行列で解く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組のデータがあるので、次にように計算できて定数行列になります。
![](https://i0.wp.com/rikei-logistics.com/wp-content/uploads/2021/10/1-4-5.png?resize=894%2C493&ssl=1)
後は、x=A-1bを解くだけです。
これもExcelで次のように計算できます。
![](https://i0.wp.com/rikei-logistics.com/wp-content/uploads/2021/10/1-5-4.png?resize=1035%2C465&ssl=1)
これで誤差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個の誤差が計算できます。
そして、これをまとめて次のように行列で表すことができます。
![](https://i0.wp.com/rikei-logistics.com/wp-content/uploads/2021/10/1-6-5.png?resize=1040%2C460&ssl=1)
すると、二乗誤差である
||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で次のように計算できます。
![](https://i0.wp.com/rikei-logistics.com/wp-content/uploads/2021/10/1-7-3.png?resize=1117%2C510&ssl=1)
![](https://i0.wp.com/rikei-logistics.com/wp-content/uploads/2021/10/1-8-2.png?resize=980%2C485&ssl=1)
yを推定する近似式(回帰式)は
f(x) = 1.8x2-5.7x+6.7
になりました。
これは、一番目の方法で計算した結果と同じです。
補足
ここで紹介した2つの方法は勾配降下法などのような近似解を求める数値的解法ではなく、ズバリの解を求める解析的解法です。
4次や5次などの高次の回帰式でも同じやり方で解析的に求められるので、大変便利な方法だと思います。