前回の記事「データから線を引く 1:ピアソンの相関係数」では線形相関の有無をどのように確認するのかを解説しました。今回は具体的に線形関係:\[y(x; a, b) = a x + b\]のaとbをどのように推定したらいいのかを解説します。

まだコンピュータが発達していない昔々、実験系の研究室にはデータに線を引く“名人”がいたという伝説があります。“名人”は実験データがプロットされたグラフ用紙を一瞥してサッと定規で線を引きます。その線は不思議なことにこれから解説する手法で計算された線とほぼ一致したそうです。昔はいちいち手で計算するのが大変だったので、そういう“名人”がいると非常に重宝することになります。今ならコンピュータで手間もかかりませんので、ロストテクノロジー伝説の一つという事になるのでしょうか。むしろ今やったら、研究不正がどうのと面倒なことになるかもしれません。

余談はさておき、統計学で推定する場合には、aとbがどんな値であれば、現在のサンプルデータが得られる可能性(尤度=もっともらしいさ)が最大になるのかを計算して線を引くことになります(最尤法と言う)。

データの誤差が標準偏差sの正規分布であると仮定すると、サンプルデータ\[\{ (x_1, y_1), (x_2, y_2), \cdots, (x_n, y_n) \}\]が得られる確率P(尤度)は\[P = \prod_{i = 1}^{n} \frac{1}{s \sqrt{2 \pi}} \exp{(- \frac{[ y_{i} - y(x_{i}; a, b) ]^{2}}{2 s^{2}}~)}\]となります。ここで、標準偏差sがデータ毎に違うと考えて一般化して議論することも可能ですが、今回は簡単のために誤差の標準偏差は一定であるという場合に限定します。

aとbを変数として尤度Pを最大にするには、数学的に書き換えると、\[\chi^{2}(a, b) = \sum_{i = 1}^{n} \frac{[ y_{i} - y(x_{i}; a, b) ]^{2}}{s^{2}}\]という量を最小にすればよいという事になります(カイ二乗の表記は自由度n - 2のカイ二乗分布に従うため、ここの2は変数の数)。これは標準偏差sが定数であることを鑑みると、線とデータとの差の二乗の和(残差の二乗和)を最小化するということに対応しています。なので、これを最小二乗法と言います。

ここで、最初にデータの誤差について正規分布を仮定していることに注意してください。例えば、サンプルデータ自身が各測定点における複数回の測定の平均値であるような場合には中心極限定理により正規分布が期待されます。他にも中心極限定理を活用して理論的に正規分布を導いて、この仮定の正当性を主張することは多々あります。しかしながら、現実のサンプルデータにおいては、この仮定が成立していないことは珍しくありません。中心極限定理が成立するには数が足りなかったり、近くを走る電車の振動など、無作為ではない誤差要素が関与していたりするからです。それでは仮定が成立しなければ最小二乗法は使えないのかというと、必ずしもそうではなく、統計学的な妥当性を失ったとしても、実際の科学研究において最小二乗法はプラグマティックに有用な手法になっています。この辺の事情はいささか複雑ですので、ここでは記しません。

具体的に残差の二乗和を最小にするaとbを計算すると、aとbについての偏微分がそれぞれ0となる連立方程式を解けばよいので、\[a = \frac{S_{uv}}{S_{uu}},~~ b = \bar{y} - a \bar{x}\]となります。ここで、\[S_{uv} = \sum_{i = 1}^{n} \frac{u_{i} v_{i}}{n},~~ S_{uu} = \sum_{i = 1}^{n} \frac{u_{i}^{2}}{n}\]と\[u_{i} = x_{i} - \bar{x},~~ v_{i} = y_{i} - \bar{y}\]は前回の記事で導入したものと同じであり、\[\bar{x},~~ \bar{y}\]は、それぞれxとyの平均です。データに線を引くには、これらの量を計算すればよいという事になります。

最小点における残差の二乗和は前回の記事で解説したピアソンの相関係数rと関係しており、\[\chi^{2} = \frac{n}{s^{2}} (1 - r^{2}) S_{vv} \approx n (1 - r^{2})\]となります。ここで、\[S_{vv} = \sum_{i = 1}^{n} \frac{v_{i}^{2}}{n}\]も前回の記事で導入したものと同じです。つまり、rの絶対値が1に近いほど、線形回帰の当てはまりが良いということが分かります。

さて、以上の議論は多変数の場合や非線形の場合にも同様に展開することができます。その一つの応用例は、コンピュータ将棋においてBonanzaメソッドで有名になった機械学習です。

Bonanza等のコンピュータ将棋の評価関数には大量の変数が含まれています。それらの変数は、棋譜等の教師データを再現する可能性が高くなるように、メリット関数(例えば、残差の二乗和)を作成して、それを最小化することで決定されます(メリット関数のことを評価関数と翻訳する場合もあるので注意)。そのように決定された数値が、例えば、Bonanzaの場合にはfv.binに記されて、局面の評価に利用されるわけです。この仕組みは今回の記事で解説したものと類似しています。変数を決める際の多変数の最小化問題は簡単ではありませんが、そこはコンピュータの計算力で乗り越えます。また同時に、教師データに過剰適応(過学習と言う)しないように変数の取り得る値に制限を付けること(正則化と言う)も行います。こういう人為的な操作の部分は今回解説した統計処理にはない違いの部分ということになります。

以上、今回はデータから線を引く方法を解説しました。上記の方法でコンピュータを用いれば、“名人”でなくても誰でも簡単に線を引くことができます。この辺り、コンピュータ将棋に通じているものがあるのでしょうか……