機械学習や統計を学び始めると、パラメータ推定の方法として最小二乗法について学ぶと思います。そしてさらに勉強を進めていくと、最尤推定法に遭遇するでしょう。
最初の頃は「最小二乗法と最尤推定法って何が違うの?」と疑問に持つ人も多いかと思います。実際には考え方が全く違うようでいて共通点も多く、ある仮定のもとでは両者は数学的に等しい手法であることが知られています。
今回は、最小二乗法と最尤推定法の違いや関係性について解説していきます。
本記事の内容
- 最小二乗法の定式化
- 最尤推定法の定式化
- ガウスノイズの仮定のもとでの等価性の証明
- Python での比較実装
前提知識
この記事を読む前に、以下の記事を読んでおくと理解が深まります。
最小二乗法の定式化
最小二乗法は、予測値と実測値の差(残差)の二乗和を最小化する方法です。
線形回帰モデル $y = \bm{w}^T \bm{x} + \epsilon$ において、パラメータ $\bm{w}$ を推定するための目的関数は、
$$ \begin{equation} J(\bm{w}) = \sum_{n=1}^{N} (y_n – \bm{w}^T \bm{x}_n)^2 = \|\bm{y} – \bm{X}\bm{w}\|^2 \end{equation} $$
これを最小化する $\bm{w}$ は、$\bm{w}$ で微分して0とおくことで求められます。
$$ \begin{equation} \hat{\bm{w}}_{\text{OLS}} = (\bm{X}^T\bm{X})^{-1}\bm{X}^T\bm{y} \end{equation} $$
最小二乗法は「予測と観測のずれを最小にする」という幾何学的な動機に基づいています。
最尤推定法の定式化
一方、最尤推定法は確率的なモデルを前提とします。
観測データが次のように生成されると仮定します。
$$ \begin{equation} y_n = \bm{w}^T \bm{x}_n + \epsilon_n, \quad \epsilon_n \sim \mathcal{N}(0, \sigma^2) \end{equation} $$
つまり、ノイズ $\epsilon_n$ が平均0、分散 $\sigma^2$ の正規分布に従うと仮定します。
このとき尤度関数は、
$$ \begin{align} L(\bm{w}) &= \prod_{n=1}^{N} p(y_n|\bm{x}_n, \bm{w}) \\ &= \prod_{n=1}^{N} \frac{1}{\sqrt{2\pi\sigma^2}} \exp\left(-\frac{(y_n – \bm{w}^T\bm{x}_n)^2}{2\sigma^2}\right) \end{align} $$
対数尤度は、
$$ \begin{equation} \ell(\bm{w}) = -\frac{N}{2}\ln(2\pi\sigma^2) – \frac{1}{2\sigma^2}\sum_{n=1}^{N}(y_n – \bm{w}^T\bm{x}_n)^2 \end{equation} $$
等価性の証明
(5) 式を $\bm{w}$ について最大化することを考えます。第1項は $\bm{w}$ に依存しない定数であるため、
$$ \hat{\bm{w}}_{\text{MLE}} = \arg\max_\bm{w} \ell(\bm{w}) = \arg\min_\bm{w} \sum_{n=1}^{N}(y_n – \bm{w}^T\bm{x}_n)^2 $$
これは (1) 式の最小二乗法の目的関数と完全に一致します。したがって、
$$ \hat{\bm{w}}_{\text{MLE}} = \hat{\bm{w}}_{\text{OLS}} = (\bm{X}^T\bm{X})^{-1}\bm{X}^T\bm{y} $$
ノイズが正規分布(ガウスノイズ)に従うという仮定のもとで、最小二乗法と最尤推定法は数学的に等価です。
違いのまとめ
| 観点 | 最小二乗法 | 最尤推定法 |
|---|---|---|
| 動機 | 幾何学的(残差の最小化) | 確率的(尤度の最大化) |
| ノイズの仮定 | 不要 | ノイズの分布を仮定 |
| 等価になる条件 | — | ガウスノイズの仮定 |
| 分散 $\sigma^2$ の推定 | 直接推定しない | 同時に推定可能 |
| 一般化 | 重み付き最小二乗法 | 異なるノイズモデル |
Python での比較実装
import numpy as np
import matplotlib.pyplot as plt
# データ生成
np.random.seed(42)
N = 50
x = np.random.uniform(0, 10, N)
true_w0, true_w1 = 2.0, 0.8
sigma = 1.5
y = true_w0 + true_w1 * x + np.random.normal(0, sigma, N)
# 設計行列
X = np.column_stack([np.ones(N), x])
# 最小二乗法
w_ols = np.linalg.inv(X.T @ X) @ X.T @ y
# 最尤推定法(ガウスノイズ仮定 → 結果は同一)
w_mle = w_ols.copy()
residuals = y - X @ w_mle
sigma_mle = np.sqrt(np.mean(residuals**2))
print(f"最小二乗法: w0={w_ols[0]:.4f}, w1={w_ols[1]:.4f}")
print(f"最尤推定法: w0={w_mle[0]:.4f}, w1={w_mle[1]:.4f}")
print(f"推定ノイズ標準偏差: sigma={sigma_mle:.4f} (真値: {sigma})")
# 可視化
x_plot = np.linspace(0, 10, 100)
y_pred = w_ols[0] + w_ols[1] * x_plot
fig, axes = plt.subplots(1, 2, figsize=(14, 5))
# 左: 回帰直線
ax1 = axes[0]
ax1.scatter(x, y, c='blue', s=30, alpha=0.6, label='Data')
ax1.plot(x_plot, y_pred, 'r-', linewidth=2, label=f'OLS/MLE: y={w_ols[0]:.2f}+{w_ols[1]:.2f}x')
ax1.plot(x_plot, true_w0 + true_w1 * x_plot, 'g--', linewidth=1.5, label=f'True: y={true_w0}+{true_w1}x')
ax1.set_xlabel('x', fontsize=12)
ax1.set_ylabel('y', fontsize=12)
ax1.set_title('OLS = MLE (Gaussian Noise)', fontsize=13)
ax1.legend(fontsize=10)
ax1.grid(True, alpha=0.3)
# 右: 対数尤度のヒートマップ
w0_range = np.linspace(0, 4, 100)
w1_range = np.linspace(0, 2, 100)
W0, W1 = np.meshgrid(w0_range, w1_range)
log_lik = np.zeros_like(W0)
for i in range(100):
for j in range(100):
pred = W0[i, j] + W1[i, j] * x
log_lik[i, j] = -0.5 * N * np.log(2 * np.pi * sigma**2) - np.sum((y - pred)**2) / (2 * sigma**2)
ax2 = axes[1]
contour = ax2.contourf(W0, W1, log_lik, levels=30, cmap='viridis')
ax2.plot(w_mle[0], w_mle[1], 'r*', markersize=15, label='MLE/OLS')
ax2.plot(true_w0, true_w1, 'w*', markersize=15, label='True')
plt.colorbar(contour, ax=ax2, label='Log-likelihood')
ax2.set_xlabel('w0', fontsize=12)
ax2.set_ylabel('w1', fontsize=12)
ax2.set_title('Log-Likelihood Surface', fontsize=13)
ax2.legend(fontsize=10)
plt.tight_layout()
plt.show()
左のグラフでは最小二乗法と最尤推定法の回帰直線が完全に一致すること、右のグラフでは対数尤度の等高線図における最大点がOLS/MLEの推定値に対応していることが確認できます。
まとめ
本記事では、最小二乗法と最尤推定法の違いと関係性について解説しました。
- 最小二乗法は残差の二乗和を最小化する幾何学的なアプローチ
- 最尤推定法は尤度を最大化する確率的なアプローチ
- ガウスノイズの仮定のもとでは、両者は数学的に等価な結果を与える
- 最尤推定法はノイズの分散 $\sigma^2$ も同時に推定できる点で、最小二乗法よりも一般的な枠組みを提供する
次のステップとして、以下の記事も参考にしてください。