【初心者向け】最小二乗法とは?数式の意味から求め方まで新人エンジニアのために徹底解説

こんにちは。ゆうせいです。

新人エンジニアのみなさん、データの分析や機械学習の勉強を始めたときに、最初にぶつかる壁は何でしょうか。そう、数式ですよね。とくに、回帰分析などの基礎として登場する最小二乗法という言葉を聞いて、教科書をそっと閉じてしまった経験はありませんか。

でも、安心してください。この考え方は、実はとても直感的で、私たちの日常の感覚に近いものなのです。今日は、数式アレルギーの方でも理解できるように、最小二乗法の仕組みと計算手順を、一切省略せずに丁寧にお話しします。一緒にデータの海に一本のきれいな直線を引いてみましょう。

最小二乗法ってなに?

まずはイメージから掴んでいきましょう。

あなたが方眼紙の上に、適当に点をポツポツと打ったとします。その点の集まりを見て、なんとなく右上がりに並んでいるなとか、真ん中あたりを通る直線を引けそうだなと思ったことはありませんか。

最小二乗法とは、バラバラに散らばったデータたちの真ん中を貫く、もっともそれらしい直線を数学的に計算して決める方法のことです。専門用語では、この直線のことを回帰直線と呼びます。

なぜ、そんな線を引く必要があるのでしょうか。それは、未来を予測するためです。たとえば、気温とアイスクリームの売上のデータから直線を引ければ、明日の気温がわかった時点で、アイスがどれくらい売れるか予測できますよね。

なぜ「最小」の「二乗」なのか

ここで多くの人が疑問に思うのが、この名前です。なぜ二乗するのでしょうか。

直線を引くとき、すべての点の上を完璧に通ることは不可能です。どうしても直線と実際の点の間にはズレが生じます。このズレのことを残差と呼びます。

私たちがやりたいのは、このズレの合計をできるだけ小さくすることです。でも、ズレにはプラスもあればマイナスもあります。単純に足し算をしてしまうと、プラスとマイナスが打ち消し合って、見た目のズレがゼロになってしまうかもしれません。

そこで、すべてのズレを二乗してプラスの値に変えてから合計するのです。このズレを二乗したものの合計(二乗和)を、最小にするように直線を決める。だから、最小二乗法というわけです。

数式で解き明かす最小二乗法の手順

さて、ここからはいよいよ数式の出番です。高校数学レベルの知識があれば大丈夫ですので、ゆっくりついてきてくださいね。

私たちが求めたい直線の式を、次のように置きます。ここで求めたいのは、傾きを表す a と、切片を表す b です。

y = ax + b

データの個数を n 個とし、それぞれのデータの点を (x_1, y_1), (x_2, y_2), \dots, (x_n, y_n) とします。

あるデータ x_i をこの式に入れたときの予測値は ax_i + b ですが、実際の値は y_i です。このときのズレ、つまり残差 \varepsilon_i は引き算で求められます。

\varepsilon_i = y_i - (ax_i + b)

最小二乗法の目的は、この残差を二乗したものの合計 E を最小にすることでしたね。これを式で書くとこうなります。記号 \sum (シグマ)は、全部足し合わせるという意味です。

E = \sum_{i=1}^{n} \varepsilon_i^2 = \sum_{i=1}^{n} \{y_i - (ax_i + b)\}^2

さあ、ここからが一番の山場です。この E が最小になるような ab を見つけるにはどうすればよいでしょうか。

ここで使うのが偏微分というテクニックです。難しそうな名前ですが、要するに a だけを変数だと思って微分する、あるいは b だけを変数だと思って微分するということです。関数の底(最小値)では、傾きがゼロになるという性質を使います。

つまり、 Ea で微分したものと、 b で微分したものが、どちらも 0 になればいいのです。

まずは、 a について偏微分してみましょう。合成関数の微分の公式を使います。中身の -ax が外に出てくるイメージを持ってください。

\frac{\partial E}{\partial a} = \sum_{i=1}^{n} 2(y_i - ax_i - b) \times (-x_i)

= -2 \sum_{i=1}^{n} (x_iy_i - ax_i^2 - bx_i)

これが 0 になるので、両辺を -2 で割って整理すると、次のようになります。

\sum x_iy_i - a \sum x_i^2 - b \sum x_i = 0

これを移項して整理すると、最初の重要な式ができあがります。

式1: a \sum x_i^2 + b \sum x_i = \sum x_iy_i

次に、同じように b について偏微分します。今度は中身の -b の係数である -1 が出てきます。

\frac{\partial E}{\partial b} = \sum_{i=1}^{n} 2(y_i - ax_i - b) \times (-1)

= -2 \sum_{i=1}^{n} (y_i - ax_i - b)

これも 0 になるので、 -2 で割ります。ここで注意してほしいのは、定数である bn 回足し合わせると nb になるということです。

\sum y_i - a \sum x_i - nb = 0

これを整理すると、二つ目の重要な式になります。

式2: a \sum x_i + nb = \sum y_i

この式1と式2を正規方程式と呼びます。あとは、この二つの式を連立方程式として解けば、求めたかった ab が手に入るのです。

少し長い道のりでしたが、やっていることは単純な足し算と掛け算、そして連立方程式を解くことだけです。プログラムで実装するときも、この手順通りに計算させるだけで直線を求めることができます。

最小二乗法のメリットとデメリット

この手法は万能に見えますが、道具には必ず良い面と悪い面があります。エンジニアとして、ここを理解しておくことが大切です。

まずメリットから見てみましょう。

ひとつ目は、計算がシンプルで答えがただ一つに決まることです。複雑なシミュレーションをしなくても、数式一発で最適な直線を導き出せます。これはコンピュータにとっても計算コストが低いという利点があります。

ふたつ目は、数学的な根拠がしっかりしていることです。なんとなく引いた線ではなく、誤差を最小にするという明確な定義があるので、他人への説明や説得力が必要な場面で非常に強力です。

一方で、デメリットも確実に存在します。

最大の問題点は、外れ値に弱いことです。たとえば、データのなかに計測ミスなどでひとつだけとんでもなく大きな値が混じっていたとします。最小二乗法はすべての誤差を二乗して評価するため、そのひとつの大きなズレを解消しようとして、直線が大きく引っ張られてしまうのです。たった一つのゴミデータが、分析全体を台無しにしてしまう可能性があります。

エンジニアとしての次のステップ

ここまで読んでくれてありがとうございます。数式への恐怖心が少しは薄れたでしょうか。

最小二乗法は、データ分析の最初の一歩に過ぎません。しかし、この考え方は機械学習のディープラーニングなど、最先端技術の基礎にもなっています。誤差を定義し、それを最小化するというプロセスは、エンジニアリングのあらゆる場面で応用できる普遍的なアプローチです。

ここからさらに学びを深めたいあなたへ。次は実際に手を動かしてみましょう。Pythonというプログラミング言語には、NumPyやscikit-learnといったライブラリがあり、今日解説した計算を一瞬で行ってくれます。

まずは手元のExcelデータなどを読み込んで、プログラムで回帰直線を引いてみてください。数式の意味を知っているあなたなら、ただライブラリを使うだけの人とは違う、深い洞察が得られるはずですよ。

それでは、また次の記事でお会いしましょう。

セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。

学生時代は趣味と実益を兼ねてリゾートバイトにいそしむ。長野県白馬村に始まり、志賀高原でのスキーインストラクター、沖縄石垣島、北海道トマム。高じてオーストラリアのゴールドコーストでツアーガイドなど。現在は野菜作りにはまっている。