Zenn
🤖

最小二乗法の話

2023/07/13に公開

はじめに

最小二乗法はデータ解析の基本ですが、意外にその内容の理解が難しかったりします。特に、入力データと出力データの積の和が出てくる理由があいまいな人も多いんじゃないでしょうか。以下では、最小二乗法の公式の意味をちょっと考えてみたいと思います。

最小二乗法

何か実験をして、観測値を得ることを考えます。例えば抵抗値のわからないものに、様々な電圧をかけて、流れる電流を測ったとしましょう。
この時、入力電圧をxx、出力電流をyyとすると

y=ax y = a x

という比例関係が期待されます。この比例定数aaを実験から精度よく求めたい時、どうすればよいでしょうか?

実験をNN回繰り返すことにして、ii番目の実験の入力電圧xix_iに対し、出力電流yiy_iを得たとしましょう。このデータセット(xi,yi)(x_i, y_i)を使って、最もよくaaを推定したい、というのが本稿の目的です。

ここで考えなくてはいけないのが「最も良くaaを推定する」の「良い推定」とはどういうものか、ということです。そこで、予測値と、実際の値の差を考えます。入力電圧がxix_iである時、我々はy=axy=axという形を期待しているので、予測値はaxia x_iになります。しかし、実際の値はyiy_iなので、その差

εi=yiaxi \varepsilon_i = y_i - a x_i

を考えます。これを残差と呼びます。この残差は正にも負にもなるため、この二乗和を全体の誤差ということにしましょう。

EiN(εi)2=iN(yiaxi)2=a2iNxi22aiNxiyi+iNyi2 \begin{align} E &\equiv \sum_i^N (\varepsilon_i)^2 \\ &= \sum_i^N(y_i - a x_i)^2 \\ &= a^2 \sum_i^N x_i^2 - 2a \sum_i^N x_i y_i + \sum_i^N y_i^2 \end{align}

さて、この誤差は、比例定数aaの関数です。aaが大きすぎても小さすぎても誤差が大きくなるので、どこかにちょうど良いaaの値があるでしょう。その「ちょうど良い」値のとき、aaを増やしても減らしてもEEの値は大きくなるはずです。したがって、EEaaで微分してゼロとなる点が、EEを最小にするaaです。EEaaで微分すると、

dEda=2aiNxi22iNxiyi \frac{dE}{da} = 2a \sum_i^N x_i^2 - 2 \sum_i^N x_i y_i

これがゼロとなるのですから、最終的にaaの推定値は

a=iNxiyiiNxi2 a = \frac{\sum_i^N x_i y_i }{\sum_i^N x_i^2 }

となります。これは、よく知られた最小二乗法となります。y=axy=axでフィッティングするタイプの最小二乗法では、分母に入力データの分散、分子に入力データと出力データの共分散が現れます。その意味をもう少し考えてみましょう。

最小二乗法の意味

もともと、我々が欲しいのは、y=axy=axの傾きでした。もし、データが一つしかなければ、その傾きは

a=y1x1 a = \frac{y_1}{x_1}

と、入力と出力の比で表すしかありません。これを、データ1によるaaの推定値a1a_1としましょう。同様にa2,a3,a_2, a_3, \cdotsが定義されるので、その平均、すなわち

a~=1NiNyixi \tilde{a} = \frac{1}{N} \sum_i^N \frac{y_i}{x_i}

aaを推定しても良さそうです。先程の推定値

a=iNxiyiiNxi2 a = \frac{\sum_i^N x_i y_i }{\sum_i^N x_i^2 }

とは何が違うのでしょうか?

実は、最小二乗法によるaaの推定値は、入力データxix_iの値が大きいほど、大きな重みを持って足していることに対応しています。

y=axy=axという形で、xxyyから傾きaaを推定したい時、(x,y)=(1.1,0.9)(x, y) = (1.1, 0.9)のデータよりも、(x,y)=(9.9,10.1)(x, y) = (9.9, 10.1)のデータの方が信頼できます。そこで、原点から遠いほど、それに比例した重みをつけて足すことにします。ここから分子の

iNxiyi \sum_i^N x_i y_i

の項が出てきます。同様に、分母も同じ重みを考慮しなければならないため、最終的に

a=iNxiyiiNxi2 a = \frac{\sum_i^N x_i y_i }{\sum_i^N x_i^2 }

が出てきます。つまり、最小二乗法は「y=axy=ax型のフィッティングをするなら、我々は原点から遠いデータほど重視するよ」というポリシーを含意します。

異なる誤差による定義

逆に、各データセットによる傾きの推定値の単純平均、すなわち

a~=1NiNyixi \tilde{a} = \frac{1}{N} \sum_i^N \frac{y_i}{x_i}

を与える誤差を考えることができます。以下のような残差を考えましょう。

ε~iayixi \tilde{\varepsilon}_i \equiv a - \frac{y_i}{x_i}

すなわち、データから求めた傾きがどれだけ正しいかを示すものです。この二乗和を全体の誤差と定義します。

E~iNε~i2=iN(ayixi)=Na22aiNyixi+iN(yixi)2 \begin{align} \tilde{E} &\equiv \sum_i^N \tilde{\varepsilon}_i^2\\ &= \sum_i^N \left(a - \frac{y_i}{x_i} \right) \\ &= N a^2 - 2 a \sum_i^N\frac{y_i}{x_i} + \sum_i^N \left(\frac{y_i}{x_i}\right)^2 \end{align}

aaで微分すると

dE~da=2Na2iNyixi \frac{d\tilde{E}}{da} = 2N a - 2 \sum_i^N\frac{y_i}{x_i}

これがゼロとなるようなaaは、先程考えた、傾きの単純平均による推定値

a~=1NiNyixi \tilde{a} = \frac{1}{N} \sum_i^N \frac{y_i}{x_i}

となります。

まとめ

データセット(xi,yi)(x_i, y_i)が与えられた時、y=axy=axの形でフィッティングし、aaを求めたい時、「測定値と推定値の差」を残差として、その二乗和を最小にするaaを求めることで、いわゆる最小二乗法の公式

a=iNxiyiiNxi2 a = \frac{\sum_i^N x_i y_i }{\sum_i^N x_i^2 }

が出てきます。この式には「原点から離れているデータほど大きい重みを持って考慮する」という意味があります。

逆に、「傾きの測定値と推定値の差」を残差とし、その二乗和を最小にしようとすると、傾きの推定値として各データセットから求まる傾きの単純平均の形

a=1NiNyixi a = \frac{1}{N} \sum_i^N \frac{y_i}{x_i}

が出てきます。こちらは分散や共分散が出てこない簡単な式になり、「原点からの距離に対して重みをかけたりせず、全てのデータを平等に扱う」というポリシーを採用したことになります。

ここで注意すべきは「残差の二乗和を最小にする」という意味でどちらも「最小二乗法」になっていることです。一般に最小二乗法というと前者を指しますが、後者を排除する理由は全くありません。我々が普段「推定の良さとして前者を選ぶ」という選択をしている、ということです。

一般に何かを推定する際には、「何が良い推定であるか」を定義する必要があり、そこにはなんらかの意思決定があります。最も簡単なy=axy=ax型の最小二乗法によりフィッティングでそれがわかりやすい見られる例なので挙げてみました。参考になれば幸いです。

GitHubで編集を提案

Discussion

ログインするとコメントできます