REGRESSION VISUALIZER

最小二乗法 (OLS)

データから最適な直線・曲線を学習する、最も基本的な機械学習アルゴリズム

INTERACTIVE CHART
回帰線
残差²
データ点
多項式次数 (degree)1
データに当てはめる線の「曲がり具合」です。1なら定規で引いたまっすぐな線。2にすると山なりやU字のカーブが描けます。3以上はさらにクネクネした線になります。身長→体重のように「片方が増えればもう片方も増える」関係なら1(直線)で十分です。試しに7や8にしてみてください。線がグニャグニャに暴れて、データ点の間で急上昇・急降下します。これが「過学習」です
残差の二乗を表示
各データ点と回帰線のズレ(残差)を正方形で表示します。ピンクの四角形が大きいほどその点での予測が外れています。最小二乗法はこの四角形の面積の合計が最小になる線を見つけます
身長150〜185cmの15人分の体重データをランダムに新しく生成します。ボタンを押すたびに違うデータで試せます
解説

📌
最小二乗法とは

最小二乗法(OLS: Ordinary Least Squares)は、データに最もよく当てはまる直線や曲線を「学習」するための最も基本的な手法です。 与えられたデータから最適なパラメータを求めるプロセスそのものが「学習」であり、最小二乗法は機械学習における学習アルゴリズムの原点ともいえます。 18世紀にガウスとルジャンドルが独立に発見し、200年以上経った今でも統計学・機械学習・工学のあらゆる分野で使われています。

名前の由来は「残差(予測値と実際の値の差)の二乗の合計を最小にする」こと。上のツールでピンクの四角形が残差の二乗を表しています。 OLSは、これらの四角形の面積の合計が一番小さくなる線を自動的に見つけます。

たとえば「身長から体重を予測する」「広告費から売上を予測する」といった場面で使います。 ExcelやGoogleスプレッドシートの「近似曲線」も、内部では最小二乗法を使っています。

最小二乗法の特徴

  • 📚教師あり学習:「入力と正解のペア」から学ぶタイプの機械学習です。たとえば「広告費→売上」のデータを渡すと、広告費からまだ見ぬ売上を予測できる線を学習します。正解データがあるから「教師あり」と呼ばれます。
  • 📈回帰(数値予測):機械学習には「分類(AかBか当てる)」と「回帰(数値を予測する)」の2種類があります。最小二乗法は回帰のほう。「明日の気温は何度?」「この物件は何万円?」のように、連続的な数値を予測するのが得意です。
  • 一発で学習が終わる:ニューラルネットなどは何万回も繰り返し学習しますが、最小二乗法は公式に当てはめるだけで一発で最適な答えが出ます。上のツールでスライダーを動かした瞬間に結果が変わるのはこのためです。
  • 🧠結果が人間に読める:学習の結果は「傾き」と「切片」という2つの数字だけ。「広告費が1万円増えると売上が5万円増える」のように、なぜその予測になったかを人間が理解できます。ディープラーニングにはないメリットです。
  • ⚠️過学習に注意:上のツールで次数を7や8にしてみてください。線がデータに合わせすぎてグニャグニャに暴れます。訓練データには完璧にフィットしても、新しいデータには対応できなくなる状態。これを「過学習」と呼び、機械学習全般で最も注意すべき問題です。

🏢
最小二乗法が最適な場面

機械学習には多くの手法がありますが、以下の条件がそろったとき、最小二乗法が最もシンプルで最適な選択肢になります。

🔬 科学実験の法則発見
物理・化学の実験で「温度と反応速度」「力と加速度」など、理論的に線形関係がわかっているデータに直線を当てはめる場面。背景理論があるのでモデル選択に迷いがなく、OLSの「公式一発で解ける」速さと解釈のしやすさが最大の武器になります。
なぜOLS → 関係が線形だとわかっているなら、複雑なモデルは不要。公式で即座に解ける
📊 係数の意味を説明したいとき
「広告費を1万円増やすと売上が何円増えるか」「薬の投与量を1mg増やすと血圧が何mmHg下がるか」など、係数そのものがビジネスや医療の意思決定に使われる場面。ニューラルネットは精度が高くても「なぜその予測か」を説明できませんが、OLSなら係数がそのまま答えです。
なぜOLS → 「xが1増えるとyがa増える」と明快に説明できる唯一の手法
⚡ データが少ない・すぐ結果がほしいとき
データが数十〜数百件しかない場合、ディープラーニングや決定木は過学習しやすく不安定です。OLSはパラメータが少なく(傾きと切片だけ)、少量データでも安定します。しかも公式で一瞬で解けるので、Excelやスプレッドシートでも実行可能です。
なぜOLS → 少量データ+計算コストゼロ。他の手法が使えない状況でも動く

📖
用語解説

残差(Residual)
= 実際の値と予測値のずれ
各データ点について eᵢ = yᵢ − ŷᵢ で計算します。グラフのピンクの縦線がこれです。 残差が正ならデータが回帰線より上、負なら下にあります。
eᵢ
残差平方和(RSS)
= 残差の二乗をすべて足した値
RSS = Σ(yᵢ − ŷᵢ)² で計算します。グラフのピンクの四角形の面積の合計です。 OLSはこの値が最小になる係数を見つけます。ツール右側の「RSS」の値がこれに対応しています。
例: 残差が [0.5, -0.3, 0.8] → RSS = 0.25 + 0.09 + 0.64 = 0.98
全変動平方和(TSS)
= データ全体のばらつきの大きさ
TSS = Σ(yᵢ − ȳ)² で計算します。各データ点が平均値からどれだけ離れているかの二乗の合計です。 モデルを使わずに「全部平均値で予測する」場合の誤差に相当します。ツール右側の「TSS」がこの値です。
例: データ [3, 5, 7]、平均 5 → TSS = (3-5)² + (5-5)² + (7-5)² = 8
ȳ平均からの距離²の合計
決定係数(R²)
= モデルの当てはまりの良さ
R² = 1 − RSS/TSS で計算します。1に近いほどモデルが良く当てはまっています。 ツール右側の紫色の「R²」がこの値です。0なら平均値で予測するのと同じ精度です。
例: R²=0.85 → データの変動の85%をモデルが説明できている
R²=0.8585% 説明15%
平均二乗誤差(MSE)
= 残差²の平均値
MSE = RSS / n で計算します。データ点の数で割ることで、データ数に依存しない比較ができます。 ツール右側のピンク色の「MSE」がこの値です。
e₁²e₂²e₃²÷ n = MSE
多項式次数(Degree)
= 曲線の複雑さを決めるパラメータ
次数1は直線(y=ax+b)、次数2は放物線(y=ax²+bx+c)、次数3は三次曲線…と複雑になっていきます。 上のツールの「多項式次数」スライダーで変化を確認できます。
d=1d=2d=3
残差プロット(Residual Plot)
= モデルの妥当性を確認するグラフ
横軸に予測値、縦軸に残差をプロットします。ツール下部のピンクの点のグラフがこれです。 残差がゼロ付近にランダムに散らばっていればモデルは適切。U字型やパターンが見えたら次数を上げるべきサインです。
ランダム = 良い

🪜
学習の流れ

最小二乗法がデータからどうやって学習するのか、「身長から体重を予測する式」を例にステップごとに見ていきましょう。

1
訓練データを用意する
学習に使うデータ(訓練データ)を集めます。5人の身長と体重を測り、グラフに点として打ちます。
Aさん(150cm, 45kg) Bさん(160cm, 55kg) Cさん(170cm, 62kg)…
ABCDE
2
パラメータを学習する(a と b を求める)
モデルの式「体重 = a × 身長 + b」の中の a(傾き)と b(切片)が学習すべきパラメータです。ピンクの四角形の面積の合計が最小になる a と b を、正規方程式という公式で一発で求めます。 まず残差²の合計 S(損失関数)を式にします:
S = Σ(yᵢ − a·xᵢ − b)²
この S を a と b それぞれで微分して = 0 とおくと、正規方程式(連立方程式)が得られます:
a = (nΣxᵢyᵢ − ΣxᵢΣyᵢ) / (nΣxᵢ² − (Σxᵢ)²) b = ȳ − a·x̄
x̄ は身長の平均、ȳ は体重の平均です。この公式にA〜Eさんのデータを代入すると:
a ≈ 0.97(身長1cmあたり体重+0.97kg) b ≈ −100.7(切片)
3
学習済みモデルで予測する
学習で求まった a, b を代入すると、予測モデルが完成します:
体重 ≈ 0.97 × 身長 − 100.7
訓練データにない身長172cmの人でも → 0.97 × 172 − 100.7 ≈ 66.1kg と予測できます。
a = 0.97 は「身長が1cm増えると体重は約1kg増える」という学習結果の意味です。
172cm→66.1kg

🎯
具体例で理解する:勉強時間からテストの点数を予測

12人の勉強時間(時間)とテストの点数(100点満点)のデータがあります。「たくさん勉強するほど点数が上がる」という関係を、最小二乗法で直線にしてみましょう。

グラフの読み方
  • 紫の実線が最小二乗法で求めた回帰直線。すべてのピンクの四角形の面積の合計が最小になるように引かれています。
  • ピンクの四角形が各データ点の残差の二乗。大きい四角形ほど、その点での予測がずれていることを意味します。
  • 緑の点が実際のデータ(12人の勉強時間と点数)。
この例の回帰結果
「学習の流れ」で紹介した正規方程式に12人のデータを代入すると、傾き a = 6.33、切片 b = 27.52 が求まります。これを式にすると:
点数 = 6.33 × 勉強時間 + 27.52
つまり勉強時間が1時間増えるごとに、点数が約6.3点上がるという関係です。
R² = 0.97 (100点中97点)
MSE = 7.8
R²の求め方
R² は「回帰直線がデータのばらつきをどれだけ説明できているか」を示す指標で、次の手順で求めます:
全体のばらつき(TSS)を計算する。12人の点数の平均を求め、各人の点数が平均からどれだけ離れているかの二乗を合計する。
TSS = Σ(実際の点数 − 平均点)² = 3752.3
残差のばらつき(RSS)を計算する。回帰直線の予測値と実際の点数のずれの二乗を合計する。これがピンクの四角形の面積の合計です。
RSS = Σ(実際の点数 − 予測値)² = 94.0
R² = 1 − RSS / TSS で求める。「全体のばらつきのうち、直線で説明できなかった割合」を1から引いた値です。
R² = 1 − 94.0 / 3752.3 = 0.97
MSEの求め方
MSE(平均二乗誤差)は「予測がどれくらいずれているか」を1人あたりの平均で表した数値です。
各データ点で「実際の点数 − 予測値」の二乗を計算する。これはピンクの四角形1つ1つの面積です。
その合計(RSS)をデータの個数(12人)で割る
MSE = RSS / n = 94.0 / 12 = 7.8
MSE = 7.8 ということは、1人あたり平均で √7.82.8点ほどずれているという意味です(√MSE を RMSE と呼びます)。
ポイントR² ≈ 0.97 ということは、12人の点数のばらつきのうち97%は「勉強時間の違い」で説明できるということです。 残りの3%は勉強時間では説明できない要因(授業の理解度・睡眠・集中力など)によるばらつきです。 この3%を減らしたいなら、勉強時間以外の情報も使う「重回帰」に拡張します。

🤔
なぜ「二乗」なのか?

ここまで「残差の二乗の合計を最小にする」と繰り返してきましたが、なぜわざわざ二乗するのでしょうか? 残差をそのまま足すだけではダメなのか、具体例で考えてみましょう。

たとえば3人のテストの残差が +5点、−3点、−2点 だったとします。

×
方法① そのまま足す
(+5) + (−3) + (−2) = 0
合計がゼロ! 実際にはズレているのに、プラスとマイナスが打ち消し合って「ズレなし」に見えてしまいます。どんなデタラメな線を引いても合計がゼロに近くなりうるので、良い線を選ぶ基準になりません。
方法② 絶対値を足す
|+5| + |−3| + |−2| = 5 + 3 + 2 = 10
打ち消しは防げます。しかし絶対値は「角」がある関数なので、微分して公式で解くことができません。コンピュータで近似的に解く必要があり、手計算が難しいです。
方法③ 二乗して足す(← 最小二乗法)
5² + 3² + 2² = 25 + 9 + 4 = 38
二乗すれば必ず正の数になるので打ち消しが起きません。しかも滑らかな関数なので微分でき、「学習の流れ」で紹介した正規方程式で一発で解けます。上のツールのピンクの四角形の面積がまさにこの二乗の値です。
補足二乗にはもう一つ特徴があります。ズレが2倍になるとペナルティは4倍(2²)になるので、大きくずれた点ほど強く罰せられます。 これは「極端に外れた1点に引っ張られやすい」という弱点にもなります。外れ値が多いデータにはロバスト回帰(Huber損失など)が使われます。

関連コンテンツ