前の記事→https://etudepeople.com/what-is-linear-algebla/
こんにちは、マロンです。前回の記事では連立方程式が行列を使って書くことができ、逆行列の計算に帰着できることを説明しました。今回は、その行列計算が統計学にも応用できることを説明したいと思います。
線形回帰
あるトレーニングを日々実施している人たちの身長と体重を図ったところ、以下のようなデータが得られたとしましょう。
身長(cm) | 166 | 172 | 182 | 183 | 152 | 160 |
体重(kg) | 60.5 | 64.9 | 65.0 | 64.8 | 56.9 | 59.3 |
このデータをグラフ(散布図)にプロットしてみると、以下のようになります。
この図を見ると、プロットされた点はだいたい一直線上になっていそうだと予想できます。言い換えると、身長を\(x\)(cm)、体重を\(y\)(kg)とおくとき、\(x\)と\(y\)の関係は\(y=ax+b\)という1次関数で近似できそうだということです。この\(a\)と\(b\)をうまいこと設定して、上図の点線のような直線が引ければ、\(y=ax+b\)の式を使って、身長\(x\)から体重\(y\)の値を予測できそうです。
このように、データや自然現象の中に構造を設定して分析することを、モデル化といいます。今回は「体重が身長の1次関数になっている」という構造を設定しているわけですね。機械学習でも、(1次関数よりももっと複雑な)構造を設定し、たくさんのデータから必要な値(上の例でいう\(a\)と\(b\)のような)を算出しているわけです。
それでは、\(a\)と\(b\)の値はどのようにしたらよいでしょうか?実際の体重と、\(y=ax+b\)という関係から予想される理論的な体重とのズレ(誤差)がなるべく小さいほうがよいわけですので、次のような表を作ってみます。
身長(\(x\)) | 166 | 172 | 182 | … |
実際の体重(\(y\)) | 60.5 | 64.9 | 65.0 | … |
体重予想値 (\(y=ax+b\)) | \(166a+b\) | \(177a+b\) | \(182a+b\) | … |
誤差 | \(166a+b-60.5\) | \(177a+b-64.9\) | \(182a+b-65.0\) | … |
この誤差というのは、予想値が実際の体重より10大きければ\(+10\)になり、10小さければ\(-10\)となります。誤差\(+10\)も\(-10\)もズレの大きさとしては10なので、同じように扱いたいわけです。「じゃあ誤差の絶対値をとればいいのでは?」と思うかもしれませんが、後々の計算で絶対値が出てくると場合分けが必要になり厄介です。そこで絶対値をとる代わりに、誤差の値を2乗したものを考えます。2乗すれば誤差\(+10\)も\(-10\)も同じ+100となります。そして誤差を2乗したものの合計
$$
(166a+b-60.5)^2+(177a+b-64.9)^2+(182a+b-65.0)^2+\cdots
$$
が最小になる\(a\)と\(b\)を考えます。このような方法を最小2乗法といいます。やってることをそのまま名前にした感じですね。
行列計算の復習
ここで、行列の計算を復習しておきましょう。\(\begin{pmatrix}
4x+7y\\ x+2y
\end{pmatrix}\)というベクトルは、係数と文字の部分を分けて
$$
(*1)~~\begin{pmatrix}
4x+7y\\ x+2y
\end{pmatrix}=\begin{pmatrix}
4&7\\ 1&2
\end{pmatrix}\begin{pmatrix}
x\\ y
\end{pmatrix}
$$
と書く約束でした。これを1つだけの式に適用すると、
$$
(*2)~~4x+7y=\begin{pmatrix}
4&7
\end{pmatrix}\begin{pmatrix}
x\\ y
\end{pmatrix}
$$
という式が作れることも覚えておきましょう。
ここで、後で使う用語を説明しておきます。行列\(A=\begin{pmatrix}
1&2\\ 3&4
\end{pmatrix}\)に対し、その縦と横をひっくり返した行列\(\begin{pmatrix}
1&3\\ 2&4
\end{pmatrix}\)を\(A\)の転置行列といい、\(A^T\)で表します。ベクトルについても同様で、例えば\(\vec{x}=\begin{pmatrix}
1\\ 2
\end{pmatrix}\)の転置ベクトルは\(\vec{x}^T=\begin{pmatrix}
1& 2
\end{pmatrix}\)です。
縦横を逆にすることに何の意味があるのか?と思うかもしれませんが、それは次の計算を見ればわかります。
実際にやってみる
問題を簡単にして、
$$S=(3a+b-5)^2+(2a+b-1)^2+(4a+b-3)^2$$
を最小にする\(a,b\)の求め方を考えてみましょう。数字を簡単にして足す数を減らしただけなので、基本的なやり方は同じです。
まず\(S\)を展開していきますが、\((3a+b-5)^2\)の部分は、
\begin{align*}
\{(3a+b)-5\}^2=(3a+b)^2-10(3a+b)+25
\end{align*}
と展開できます。ほかの2つも同じように展開して順番を入れ替えると、
\begin{align*}
S=&(3a+b)^2+(2a+b)^2+(4a+b)^2\\
&-10(3a+b)-2(2a+b)-6(4a+b)+25+1+9
\end{align*}
という式ができます。少し複雑なので、
\begin{align*}
①=&(3a+b)^2+(2a+b)^2+(4a+b)^2\\
②=&-10(3a+b)-2(2a+b)-6(4a+b)
\end{align*}
と分けて考えていきましょう。①の部分を展開すると、
\begin{align*}
①&=9a^2+6ab+b^2+4a^2+4ab+b^2+16a^2+8ab+b^2\\
&=29a^2+18ab+3b^2
\end{align*}
さらにこれを行列で表現していきます。
\begin{align*}
&=29a^2+9ab+9ab+3b^2=a(29a+9b)+b(9a+3b)\\
&=\begin{pmatrix}a&b\end{pmatrix}\begin{pmatrix}29a+9b\\9a+3b\end{pmatrix}~~(←(*2)を使った)\\
&=\begin{pmatrix}a&b\end{pmatrix}\begin{pmatrix}29&9\\9&3\end{pmatrix}\begin{pmatrix}a\\b\end{pmatrix}~~(←(*1)を使った)
\end{align*}
「!?」と思うかもしれませんが、使ったのは先ほど述べたルールだけです。このように2次式を行列で表すというのはよくあるので、見ておいて損はないでしょう。今出てきた行列やベクトルを
$$
A=\begin{pmatrix}29&9\\9&3\end{pmatrix},~~\vec{x}=\begin{pmatrix}a\\b\end{pmatrix}
$$
とおくと、
$$
①=\vec{x}^TA\vec{x}
$$
と書くことができます。ここで転置ベクトルの記号が役に立ちました!
ちなみに、上の\(A\)は縦横を入れ替えても変化しない、つまり\(A=A^T\)となることを心にとめておきましょう(これは後で使います)。
さて、残る②の部分も、
\begin{align*}
②=&-10(3a+b)-2(2a+b)-6(4a+b)=-58a-18b\\
&=-\begin{pmatrix}58&18\end{pmatrix}\begin{pmatrix}a\\b\end{pmatrix}~~(←(*2)を使った)
\end{align*}
となるので、\(\vec{b}=\begin{pmatrix}58\\18\end{pmatrix}\)とおくと、
$$
②=-\vec{b}^T\vec{x}
$$
と書けます。以上より、
$$
S=①+②+25+1+9=\vec{x}^TA\vec{x}-\vec{b}^T\vec{x}+35
$$
と書けることがわかります。あとはこれを最小にする\(\vec{x}=\begin{pmatrix}a\\b\end{pmatrix}\)を求めることになります。
じゃあどうやってそれを求めるか?ということですが、ここで想像力を働かせます。もし上の行列やベクトルが普通の数だったらどうでしょう?上についてる「→」や「T」を取り払った式を書いてみると、
$$
xAx-bx+30=Ax^2-bx+35
$$
これだったら、
$$
Ax^2-bx+30=A\left(x-\frac{b}{2A}\right)^2-\frac{1}{4A}b^2+35~~(★)
$$
という「平方完成」によって、\(x=\frac{b}{2A}\)で最小になることがわかります。
では行列でも似たようなことができないでしょうか?いまの想像では、\(\vec{x}^TA\vec{x}\)の「→」や「T」を取り払うと\(Ax^2\)にになったのでした。同じようにして、
行列 | 普通の数 |
\(\vec{x}^TA\vec{x}\) | \(Ax^2\) |
\(\left(\vec{x}-\frac{\vec{b}}{2A}\right)^TA\left(\vec{x}-\frac{\vec{b}}{2A}\right)\) | \(A\left(x-\frac{b}{2A}\right)^2\) |
\(\vec{b}^T\frac{1}{4A}\vec{b}\) | \(\frac{1}{4A}b^2\) |
という対応関係を想像してみます。ただし、行列の世界で\(\frac{1}{A}\)というのは逆行列\(A^{-1}\)のことです。本当は\(A^{-1}\)と書くべきなのですが、今はわかりやすくするためにあえて\(\frac{1}{A}\)という書きかたをしています。
上の表とさっきの式(★)をみると、行列の世界では、
$$
S=\left(\vec{x}-\frac{\vec{b}}{2A}\right)^TA\left(\vec{x}-\frac{\vec{b}}{2A}\right)-\vec{b}^T\frac{1}{4A}\vec{b}+35~~(★★)
$$
と変形できるのでは?と考えてみたくなります。
では(★★)を展開してみて、本当に最初の式
$$S=\vec{x}^TA\vec{x}-\vec{b}^T\vec{x}+35~~(★★★)$$
一致するのかを確認してみましょう。
(★★)式の最初の部分を展開すると、
\begin{align*}
&\left(\vec{x}-\frac{\vec{b}}{2A}\right)^TA\left(\vec{x}-\frac{\vec{b}}{2A}\right)
=\left(\vec{x}^T-\frac{\vec{b}^T}{2A^T}\right)A\left(\vec{x}-\frac{\vec{b}}{2A}\right)\\
=&\left(\vec{x}^T-\frac{\vec{b}^T}{2A}\right)A\left(\vec{x}-\frac{\vec{b}}{2A}\right)~~(←A^T=Aだったことを思い出す)\\
=&\left(\vec{x}^T-\frac{\vec{b}^T}{2A}\right)\left(A\vec{x}-\frac{\vec{b}}{2}\right)\\
=&\vec{x}^TA\vec{x}-\frac{1}{2}\vec{x}^T\vec{b}-\frac{1}{2}\vec{b}^T\vec{x}+\vec{b}^T\frac{1}{4A}\vec{b}
\end{align*}
ここで出てくる\(\vec{x}^T\vec{b}\)と\(\vec{b}^T\vec{x}\)は、\((*2)\)を思い出すと、
\begin{align*}
&\vec{x}^T\vec{b}=\begin{pmatrix}a&b\end{pmatrix}\begin{pmatrix}58\\18\end{pmatrix}=58a+18b\\
&\vec{b}^T\vec{x}=\begin{pmatrix}58&18\end{pmatrix}\begin{pmatrix}a\\b\end{pmatrix}=58a+18b
\end{align*}
でどちらも同じなので、\(\vec{b}^T\vec{x}\)で統一しておくと、さっきの式は、
\begin{align*}
=\vec{x}^TA\vec{x}-\frac{1}{2}\vec{b}^T\vec{x}-\frac{1}{2}\vec{b}^T\vec{x}+\vec{b}^T\frac{1}{4A}\vec{b}
=\vec{x}^TA\vec{x}-\vec{b}^T\vec{x}+\vec{b}^T\frac{1}{4A}\vec{b}
\end{align*}
となります。これを(★★)式の最初の部分に入れると、
$$
(★★)=\vec{x}^TA\vec{x}-\vec{b}^T\vec{x}+\vec{b}^T\frac{1}{4A}\vec{b}-\vec{b}^T\frac{1}{4A}\vec{b}+35=\vec{x}^TA\vec{x}-\vec{b}^T\vec{x}+35
$$
で(★★★)にちゃんとなりました!世の中うまいことできているものですね。
あとは(★★)が最小になるのはどういう場合か?が問題ですが、さっき
$$①=(3a+b)^2+(2a+b)^2+(4a+b)^2=\vec{x}^TA\vec{x}$$
と変形したことを思い出してください。(★★)の最初の部分は、この\(\vec{x}\)のところを\(\vec{x}-\frac{\vec{b}}{2A}\)に変えただけなので、
$$
\left(\vec{x}-\frac{\vec{b}}{2A}\right)^TA\left(\vec{x}-\frac{\vec{b}}{2A}\vec{b}\right)=(???)^2+(???)^2+(???)^2
$$
という形になるはずです。これは2乗の和なので0より小さくはならず、\(\vec{x}=\frac{\vec{b}}{2A}=\frac{1}{2}A^{-1}\vec{b}\)のとき0になってくれます。つまりこの時\(S\)が最小になるということです。
結局\(A\)の逆行列さえ求まれば、知りたかった\(\vec{x}=\begin{pmatrix}a\\b\end{pmatrix}\)がわかるというわけですね。
まとめ
最小2乗法の問題も逆行列の話になる!ということを見ていただくことで、線形代数がどのように役立つかということをなんとなくでもわかってもらえたらと思います。「普通に展開したほうが良いのでは?」と思う方もいるかもしれませんが、このように行列の記号を使うことで、文字の数が増えても同じように対処できるということが、行列で話を進めていくメリットなのです。
数学になれていない方にとって後半部分は少し難しくなってしまったかもしれませんが、「普通の数で平方完成があるんだから、行列の世界でも似たようなことができないかな?」と想像して試してみるという、数学の発想を楽しんでいただけたらと思います。