最尤推定

2.2.9

最尤推定

最終更新 2026-03-03 読了時間 2 分
まとめ
  • 最尤推定(MLE: Maximum Likelihood Estimation)は「観測データが最も高い確率で生じるパラメータ」を求める推定手法。
  • ロジスティック回帰・ナイーブベイズ・ガウス混合モデルなど、多くの機械学習手法が内部で MLE を使っている。
  • 対数尤度を最大化する形で定式化し、勾配法やニュートン法で数値的に解く。

直感 #

コインを10回投げて7回表が出た。「このコインの表の確率は?」という問いに対して、「7回表が出る確率が最も高くなる値」を探すのが最尤推定。答えは直感通り 0.7。MLE は「データを最もよく説明するパラメータ」を選ぶという単純で強力な原理。

詳細な解説 #

数式 #

観測データ $x_1, \ldots, x_n$ に対する尤度関数:

$$ L(\theta) = \prod_{i=1}^{n} f(x_i | \theta) $$

対数尤度:

$$ \ell(\theta) = \sum_{i=1}^{n} \log f(x_i | \theta) $$

MLE:$\hat{\theta} = \arg\max_\theta \ell(\theta)$

例 1: コイン投げ(ベルヌーイ分布) #

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import binom

n, k = 10, 7  # 10回中7回表
p_range = np.linspace(0, 1, 200)
likelihood = binom.pmf(k, n, p_range)

plt.figure(figsize=(8, 4))
plt.plot(p_range, likelihood, linewidth=2)
plt.axvline(x=k/n, color="red", linestyle="--", label=f"MLE = {k/n}")
plt.xlabel("p (表の確率)")
plt.ylabel("尤度 L(p)")
plt.title("ベルヌーイ分布の最尤推定")
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()

例 2: 正規分布の MLE #

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
from scipy.optimize import minimize

np.random.seed(42)
data = np.random.normal(loc=5.0, scale=2.0, size=100)

def neg_log_likelihood(params, data):
    mu, sigma = params
    if sigma <= 0:
        return np.inf
    return -np.sum(-0.5 * np.log(2 * np.pi * sigma**2) - (data - mu)**2 / (2 * sigma**2))

result = minimize(neg_log_likelihood, x0=[0, 1], args=(data,), method="Nelder-Mead")
print(f"MLE: μ = {result.x[0]:.2f}, σ = {result.x[1]:.2f}")
print(f"標本統計: μ = {data.mean():.2f}, σ = {data.std():.2f}")

MLE が使われている手法 #

手法MLE の役割
ロジスティック回帰クロスエントロピー最小化 = 対数尤度最大化
ナイーブベイズクラス条件付き確率のパラメータ推定
ガウス混合モデルEM アルゴリズムの M ステップ
ARIMAモデルパラメータの推定

MLE vs MAP vs ベイズ推定 #

推定手法事前分布出力対応する手法
MLEなし点推定ロジスティック回帰
MAPあり点推定Ridge 回帰(ガウス事前分布)
ベイズあり事後分布ベイズ線形回帰