機械学習 – 最尤識別規則

概要

識別規則の1つである最尤識別規則について解説します。

最尤識別規則 (ML decision rule)

尤度 p(xci)p(\bm{x}|c_i) が最大となるクラスに割り当てる識別規則を最尤識別規則 (maximum likelihood decision rule/ML decision rule) といいます。

  • 識別関数
gi(x)=p(xci),(i=1,2,,K) g_i(\bm{x}) = p(\bm{x}|c_i), (i = 1, 2, \cdots, K)
  • 決定境界

クラス cic_i の決定領域は

Ri={xRdci=arg maxjp(xcj)} \mathcal{R}_i = \{\bm{x} \in \R^d| c_i = \argmax_j p(\bm{x}|c_j)\}
  • 識別クラス

入力 x\bm{x} の識別クラス y^\hat{y}

y^=arg maxip(xci)=ci s.t. p(xci)p(xcj),(ij) \begin{aligned} \hat{y} &= \argmax_i p(\bm{x}|c_i) \\ &= c_i \ \text{s.t.} \ p(\bm{x}|c_i) \ge p(\bm{x}|c_j), (i \ne j) \end{aligned}
  • 誤り率

最尤識別規則の誤り率を

ε(x)=E[1maxip(xci)] \varepsilon(\bm{x}) = E[1 – \max_i p(\bm{x}|c_i)]

と定義すると、その期待値は

E[ε(x)]=E[1maxjp(xcj)]=1E[maxjp(xcj)]=1Rdmaxjp(xcj)p(x)dx期待値の定義=1i=1KRimaxjp(xcj)p(x)dxR1,R2,,RKRdの分割=1i=1KRip(xci)p(x)dxxRip(xci)=maxjp(xcj) \begin{aligned} E[\varepsilon(\bm{x})] &= E[1 – \max_j p(\bm{x}|c_j)] \\ &= 1 – E[\max_j p(\bm{x}|c_j)] \\ &= 1 – \int_{\R^d} \max_j p(\bm{x}|c_j) p(\bm{x}) d\bm{x} \quad \because 期待値の定義 \\ &= 1 – \sum_{i = 1}^K \int_{\mathcal{R}_i} \max_j p(\bm{x}|c_j) p(\bm{x}) d\bm{x} \quad \because \mathcal{R}_1, \mathcal{R}_2, \cdots, \mathcal{R}_K は \R^d の分割 \\ &= 1 – \sum_{i = 1}^K \int_{\mathcal{R}_i} p(\bm{x}|c_i) p(\bm{x}) d\bm{x} \quad \because \bm{x} \in \mathcal{R}_i \to p(\bm{x}|c_i) = \max_j p(\bm{x}|c_j) \\ \end{aligned}

例: 2クラス分類

釣った魚の大きさが xRx \in \R であったとき、その魚が鮭 (salmon)、スズキ (sea bass) のどちらであるかを識別する2クラス分類問題を考えます。(鮭、スズキ以外の魚が釣れることはないと仮定します)

以下の情報がわかっているものとします。

  • 鮭の大きさは正規分布 N(5,1)\mathcal{N}(5, 1) に従う p(xsalmon)=12πexp((x5)22) p(x|salmon) = \frac{1}{\sqrt{2 \pi}} \exp \left( -\frac{(x – 5)^2}{2} \right)
  • スズキの大きさは正規分布 N(10,4)\mathcal{N}(10, 4) に従う p(xbass)=122πexp((x10)28) p(x|bass) = \frac{1}{2 \sqrt{2 \pi}} \exp \left( -\frac{(x – 10)^2}{8} \right)

このとき、最尤識別規則に従うと、予測クラスは

y^={salmonif p(xsalmon)p(xbass)bassif p(xsalmon)<p(xbass) \begin{aligned} \hat{y} &= \begin{cases} salmon & \text{if} \ p(x|salmon) \ge p(x|bass) \\ bass & \text{if} \ p(x|salmon) < p(x|bass) \end{cases} \\ \end{aligned}

p(xsalmon),p(xbass)p(x|salmon), p(x|bass) を描画すると以下のようになります。

In [1]:
import matplotlib.pyplot as plt
import numpy as np
from scipy.stats import norm

x = np.linspace(0, 20, 100)

salmon_y = norm.pdf(x, loc=5, scale=1)
bass_y = norm.pdf(x, loc=10, scale=2)
error = 1 - np.maximum(salmon_y, bass_y)

fig, ax = plt.subplots(figsize=(9, 6))
ax.plot(x, salmon_y, "b", label=r"$p(x|salmon)$")
ax.plot(x, bass_y, "g", label=r"$p(x|bass)$")
ax.plot(x, error, "r", label=r"$\varepsilon(x)$")

ax.set_xlabel("Length")
ax.grid()
ax.legend()

plt.show()
Python

このとき、鮭とスズキの決定領域は以下になります。

Rsalmon={xRdp(xsalmon)p(xbass)}Rbass={xRdp(xsalmon)<p(xbass)} \begin{aligned} \mathcal{R}_{salmon} &= \{\bm{x} \in \R^d| p(x|salmon) \ge p(x|bass) \} \\ \mathcal{R}_{bass} &= \{\bm{x} \in \R^d| p(x|salmon) < p(x|bass) \} \end{aligned}

Sympy で p(xsalmon)=p(xbass)p(x|salmon) = p(x|bass) を解いて、最尤識別規則の決定境界を計算します

In [2]:
import sympy as sym
from sympy.stats import density, Normal

x = sym.symbols("x")

salmon_pdf = density(Normal("salmon", 5, 1))(x)
bass_pdf = density(Normal("bass", 10, 2))(x)

# 方程式を解く。
ret = sym.solve(salmon_pdf - bass_pdf)

# 数値解にする。
x1, x2 = sym.N(ret[0]), sym.N(ret[1])
print(x1, x2)
Python
-0.266597720534824 6.93326438720149

p(xsalmon)=p(xbass)p(x|salmon) = p(x|bass) の解は x=0.26,6.93x = -0.26, 6.93 であるとわかります。

最尤識別規則

コメント

コメントする