カテゴリー: 一般向け数学・統計学

線形代数と統計学(最小2乗法)

前の記事→https://etudepeople.com/what-is-linear-algebla/

こんにちは、マロンです。前回の記事では連立方程式が行列を使って書くことができ、逆行列の計算に帰着できることを説明しました。今回は、その行列計算が統計学にも応用できることを説明したいと思います。

線形回帰

あるトレーニングを日々実施している人たちの身長と体重を図ったところ、以下のようなデータが得られたとしましょう。

身長(cm)166172182183152160
体重(kg)60.564.965.064.856.959.3

このデータをグラフ(散布図)にプロットしてみると、以下のようになります。

図1:身長と体重の関係

この図を見ると、プロットされた点はだいたい一直線上になっていそうだと予想できます。言い換えると、身長をx(cm)、体重をy(kg)とおくとき、xyの関係はy=ax+bという1次関数で近似できそうだということです。このabをうまいこと設定して、上図の点線のような直線が引ければ、y=ax+bの式を使って、身長xから体重yの値を予測できそうです。

このように、データや自然現象の中に構造を設定して分析することを、モデル化といいます。今回は「体重が身長の1次関数になっている」という構造を設定しているわけですね。機械学習でも、(1次関数よりももっと複雑な)構造を設定し、たくさんのデータから必要な値(上の例でいうabのような)を算出しているわけです。

それでは、abの値はどのようにしたらよいでしょうか?実際の体重と、y=ax+bという関係から予想される理論的な体重とのズレ(誤差)がなるべく小さいほうがよいわけですので、次のような表を作ってみます。

身長(x)166172182
実際の体重(y)60.564.965.0
体重予想値
(y=ax+b)
166a+b177a+b182a+b
誤差166a+b60.5177a+b64.9182a+b65.0

この誤差というのは、予想値が実際の体重より10大きければ+10になり、10小さければ10となります。誤差+1010もズレの大きさとしては10なので、同じように扱いたいわけです。「じゃあ誤差の絶対値をとればいいのでは?」と思うかもしれませんが、後々の計算で絶対値が出てくると場合分けが必要になり厄介です。そこで絶対値をとる代わりに、誤差の値を2乗したものを考えます。2乗すれば誤差+1010も同じ+100となります。そして誤差を2乗したものの合計
(166a+b60.5)2+(177a+b64.9)2+(182a+b65.0)2+
が最小になるabを考えます。このような方法を最小2乗法といいます。やってることをそのまま名前にした感じですね。

行列計算の復習

ここで、行列の計算を復習しておきましょう。(4x+7yx+2y)というベクトルは、係数と文字の部分を分けて
(1)  (4x+7yx+2y)=(4712)(xy)
と書く約束でした。これを1つだけの式に適用すると、
(2)  4x+7y=(47)(xy)
という式が作れることも覚えておきましょう。

ここで、後で使う用語を説明しておきます。行列A=(1234)に対し、その縦と横をひっくり返した行列(1324)A転置行列といい、ATで表します。ベクトルについても同様で、例えばx=(12)の転置ベクトルはxT=(12)です。
縦横を逆にすることに何の意味があるのか?と思うかもしれませんが、それは次の計算を見ればわかります。

実際にやってみる

問題を簡単にして、
S=(3a+b5)2+(2a+b1)2+(4a+b3)2
を最小にするa,bの求め方を考えてみましょう。数字を簡単にして足す数を減らしただけなので、基本的なやり方は同じです。
まずSを展開していきますが、(3a+b5)2の部分は、
{(3a+b)5}2=(3a+b)210(3a+b)+25
と展開できます。ほかの2つも同じように展開して順番を入れ替えると、
S=(3a+b)2+(2a+b)2+(4a+b)210(3a+b)2(2a+b)6(4a+b)+25+1+9
という式ができます。少し複雑なので、
=(3a+b)2+(2a+b)2+(4a+b)2=10(3a+b)2(2a+b)6(4a+b)
と分けて考えていきましょう。①の部分を展開すると、
=9a2+6ab+b2+4a2+4ab+b2+16a2+8ab+b2=29a2+18ab+3b2
さらにこれを行列で表現していきます。
=29a2+9ab+9ab+3b2=a(29a+9b)+b(9a+3b)=(ab)(29a+9b9a+3b)  ((2)使)=(ab)(29993)(ab)  ((1)使)
「!?」と思うかもしれませんが、使ったのは先ほど述べたルールだけです。このように2次式を行列で表すというのはよくあるので、見ておいて損はないでしょう。今出てきた行列やベクトルを
A=(29993),  x=(ab)
とおくと、
=xTAx
と書くことができます。ここで転置ベクトルの記号が役に立ちました!

ちなみに、上のAは縦横を入れ替えても変化しない、つまりA=ATとなることを心にとめておきましょう(これは後で使います)。

さて、残る②の部分も、
=10(3a+b)2(2a+b)6(4a+b)=58a18b=(5818)(ab)  ((2)使)
となるので、b=(5818)とおくと、
=bTx
と書けます。以上より、
S=++25+1+9=xTAxbTx+35
と書けることがわかります。あとはこれを最小にするx=(ab)を求めることになります。

じゃあどうやってそれを求めるか?ということですが、ここで想像力を働かせます。もし上の行列やベクトルが普通の数だったらどうでしょう?上についてる「→」や「T」を取り払った式を書いてみると、
xAxbx+30=Ax2bx+35
これだったら、
Ax2bx+30=A(xb2A)214Ab2+35  ()
という「平方完成」によって、x=b2Aで最小になることがわかります。
では行列でも似たようなことができないでしょうか?いまの想像では、xTAxの「→」や「T」を取り払うとAx2にになったのでした。同じようにして、

行列普通の数
xTAxAx2
(xb2A)TA(xb2A)A(xb2A)2
bT14Ab14Ab2

という対応関係を想像してみます。ただし、行列の世界で1Aというのは逆行列A1のことです。本当はA1と書くべきなのですが、今はわかりやすくするためにあえて1Aという書きかたをしています。
上の表とさっきの式(★)をみると、行列の世界では、
S=(xb2A)TA(xb2A)bT14Ab+35  ()
と変形できるのでは?と考えてみたくなります。
では(★★)を展開してみて、本当に最初の式
S=xTAxbTx+35  ()
一致するのかを確認してみましょう。
(★★)式の最初の部分を展開すると、
(xb2A)TA(xb2A)=(xTbT2AT)A(xb2A)=(xTbT2A)A(xb2A)  (AT=A)=(xTbT2A)(Axb2)=xTAx12xTb12bTx+bT14Ab
ここで出てくるxTbbTxは、(2)を思い出すと、
xTb=(ab)(5818)=58a+18bbTx=(5818)(ab)=58a+18b
でどちらも同じなので、bTxで統一しておくと、さっきの式は、
=xTAx12bTx12bTx+bT14Ab=xTAxbTx+bT14Ab
となります。これを(★★)式の最初の部分に入れると、
()=xTAxbTx+bT14AbbT14Ab+35=xTAxbTx+35
で(★★★)にちゃんとなりました!世の中うまいことできているものですね。

あとは(★★)が最小になるのはどういう場合か?が問題ですが、さっき
=(3a+b)2+(2a+b)2+(4a+b)2=xTAx
と変形したことを思い出してください。(★★)の最初の部分は、このxのところをxb2Aに変えただけなので、
(xb2A)TA(xb2Ab)=(???)2+(???)2+(???)2
という形になるはずです。これは2乗の和なので0より小さくはならず、x=b2A=12A1bのとき0になってくれます。つまりこの時Sが最小になるということです。

結局Aの逆行列さえ求まれば、知りたかったx=(ab)がわかるというわけですね。

まとめ

最小2乗法の問題も逆行列の話になる!ということを見ていただくことで、線形代数がどのように役立つかということをなんとなくでもわかってもらえたらと思います。「普通に展開したほうが良いのでは?」と思う方もいるかもしれませんが、このように行列の記号を使うことで、文字の数が増えても同じように対処できるということが、行列で話を進めていくメリットなのです。

数学になれていない方にとって後半部分は少し難しくなってしまったかもしれませんが、「普通の数で平方完成があるんだから、行列の世界でも似たようなことができないかな?」と想像して試してみるという、数学の発想を楽しんでいただけたらと思います。

+1

作成者:

数学科の学生で、確率論、統計学を専攻しています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です