← 機械学習テキスト 一覧

🎓 レベル:標準 | 重要度:B(標準)

📎 前提:ロジスティック回帰 | 数理:判別分析(統計)・ベイズの定理(統計)

要点(BLUF)

1. ベイズ判別の考え方

分類のゴールは、入力 xx を見て最も「ありそうな」クラスを選ぶことです。ありそうさを確率で表したものが事後確率 P(y=kx)P(y=k \mid x) で、これが最大のクラスを選べば誤分類確率が最小になります。これをベイズ判別(ベイズ最適分類器) と呼びます。

事後確率はベイズの定理で次のように分解できます(→ 統計 ベイズの定理):

P(y=kx)=P(xy=k)クラス内の分布 πk事前確率lP(xy=l)πlP(y=k \mid x) = \frac{\overbrace{P(x \mid y=k)}^{\text{クラス内の分布}}\ \overbrace{\pi_k}^{\text{事前確率}}}{\displaystyle\sum_{l} P(x \mid y=l)\,\pi_l}

ここで πk=P(y=k)\pi_k = P(y=k) はクラス kk の事前確率(全体に占める割合)、P(xy=k)P(x \mid y=k) は「クラス kk の中で xx がどのくらい出やすいか」を表すクラス条件付き分布です。

要するに:分母はどのクラスでも共通なので、比較に効くのは分子 P(xy=k)πkP(x \mid y=k)\,\pi_k だけ。「そのクラスらしさ(条件付き分布)×そのクラスの出やすさ(事前確率)」が最大のクラスを選ぶ、というのがベイズ判別です。

問題は P(xy=k)P(x \mid y=k) をどうモデル化するか。ここで多変量正規分布を仮定するのが判別分析です。

2. 各クラスを多変量正規と仮定する

クラス kk のデータが、平均 μk\mu_k・共分散行列 Σk\Sigma_kdd 次元多変量正規分布に従うと仮定します:

P(xy=k)=1(2π)d/2Σk1/2exp ⁣(12(xμk)Σk1(xμk))P(x \mid y=k) = \frac{1}{(2\pi)^{d/2}\,|\Sigma_k|^{1/2}}\exp\!\left(-\frac{1}{2}(x-\mu_k)^\top \Sigma_k^{-1}(x-\mu_k)\right)

要するに:各クラスは「中心 μk\mu_k のまわりに、Σk\Sigma_k という形(広がり・傾き)の楕円状に散らばっている」と見なす、ということです。指数の中の (xμk)Σk1(xμk)(x-\mu_k)^\top \Sigma_k^{-1}(x-\mu_k) は、後で出てくるマハラノビス距離の二乗そのものです。

flowchart LR
    A["入力 x"] --> B["各クラスの正規分布で<br/>P(x | y=k) を評価"]
    B --> C["事前確率 πk を掛ける"]
    C --> D["判別関数 δk(x) を比較"]
    D --> E["最大の k に割り当て"]

3. 判別関数の導出:なぜ log を取るか

事後確率を直接比べてもよいのですが、指数関数が邪魔なので対数を取ります。対数は単調増加なので、log(P(xy=k)πk)\log\big(P(x \mid y=k)\,\pi_k\big) を最大化することは元の量を最大化することと同じです。分母(共通項)と xx だけの定数項を捨てて、クラス kk に依存する部分だけ残したものを判別関数(discriminant function) δk(x)\delta_k(x) と呼びます:

δk(x)=12logΣk12(xμk)Σk1(xμk)+logπk\delta_k(x) = -\frac{1}{2}\log|\Sigma_k| - \frac{1}{2}(x-\mu_k)^\top \Sigma_k^{-1}(x-\mu_k) + \log \pi_k

そして δk(x)\delta_k(x) が最大のクラスに xx を割り当てます。

要するに:判別関数は「マハラノビス距離が近いほど大きく(第2項)、分布が広すぎないほど大きく(第1項のペナルティ)、もともと出やすいクラスほど大きい(第3項)」というスコアです。これを各クラスで計算して一番大きいものを選ぶだけ。

4. 共分散が共通 → 線形になる(LDA)

ここからが核心です。まず Σk\Sigma_k がすべてのクラスで等しい(Σk=Σ\Sigma_k = \Sigma)と仮定します。マハラノビス距離の二乗を展開すると:

(xμk)Σ1(xμk)=xΣ1x① k に無関係2μkΣ1x+μkΣ1μk(x-\mu_k)^\top \Sigma^{-1}(x-\mu_k) = \underbrace{x^\top \Sigma^{-1} x}_{\text{① } k \text{ に無関係}} - 2\,\mu_k^\top \Sigma^{-1} x + \mu_k^\top \Sigma^{-1}\mu_k

このうち①の xΣ1xx^\top \Sigma^{-1} xクラス kk に依存しませんΣ\Sigma が共通なので logΣ\log|\Sigma| も共通。クラス比較では共通項は無視できるので、判別関数は

δk(x)=μkΣ1重み wkx  12μkΣ1μk+logπk切片 bk\delta_k(x) = \underbrace{\mu_k^\top \Sigma^{-1}}_{\text{重み } w_k^\top}\, x \;\underbrace{-\,\tfrac{1}{2}\mu_k^\top \Sigma^{-1}\mu_k + \log\pi_k}_{\text{切片 } b_k}

となり、xx について一次式(線形) になります。これが LDA(Linear Discriminant Analysis) です。

要するに:二次の項 xΣ1xx^\top \Sigma^{-1} x が全クラスで同じだから打ち消し合い、xx の一次項だけが残る。だから境界が直線になるのです。

決定境界(クラス kkll の引き分けライン)は δk(x)=δl(x)\delta_k(x) = \delta_l(x) で、これは

(μkμl)Σ1x=定数(\mu_k - \mu_l)^\top \Sigma^{-1} x = \text{定数}

という xx の一次方程式=超平面(直線) になります。

graph LR
    LDA["LDA:Σk = Σ(共通)"] -->|"x²項が消える"| LIN["決定境界:直線(超平面)"]
    QDA["QDA:Σk がクラスごと"] -->|"x²項が残る"| QUAD["決定境界:曲線(二次曲面)"]

5. 共分散が異なる → 二次になる(QDA)

次に Σk\Sigma_k がクラスごとに違う一般の場合に戻ります。すると判別関数の中の二次項 xΣk1xx^\top \Sigma_k^{-1} xクラスごとに違うため、もう打ち消し合いません。また logΣk\log|\Sigma_k| も残ります。判別関数は

δk(x)=12xΣk1x+μkΣk1x12μkΣk1μk12logΣk+logπk\delta_k(x) = -\frac{1}{2}\,x^\top \Sigma_k^{-1} x + \mu_k^\top \Sigma_k^{-1} x -\frac{1}{2}\mu_k^\top \Sigma_k^{-1}\mu_k -\frac{1}{2}\log|\Sigma_k| + \log\pi_k

xx について二次式になります。これが QDA(Quadratic Discriminant Analysis) です。決定境界 δk(x)=δl(x)\delta_k(x)=\delta_l(x) も二次方程式になり、曲線(放物線・楕円・双曲線などの二次曲面) を描けます。

要するに:LDA は「全クラスの楕円の形と向きが同じ」という強い制約で境界を直線に固定したもの。QDA はその制約を外して各クラスに自前の楕円を許した結果、境界が曲がれるようになったものです。

💡 LDA は QDA の特殊ケース(Σk\Sigma_k を全部同じに縛ったもの)です。QDA はクラスごとに Σk\Sigma_kd×dd \times d 行列)を推定するためパラメータが多く、次元 dd が大きい・データが少ないと共分散の推定が不安定になり過学習しやすくなります。LDA は共分散を1つに共有する分パラメータが少なく頑健です(バイアス-バリアンスのトレードオフ、→ 評価指標(分類)とROC・AUC の文脈)。

6. マハラノビス距離との関係

判別関数の主役 (xμk)Σk1(xμk)(x-\mu_k)^\top \Sigma_k^{-1}(x-\mu_k) は、xx と中心 μk\mu_kマハラノビス距離の二乗 DM2(x,μk)D_M^2(x,\mu_k) です。これは「分布の広がりで割り引いたユークリッド距離」と読めます:

DM2(x,μk)=(xμk)Σk1(xμk)D_M^2(x,\mu_k) = (x-\mu_k)^\top \Sigma_k^{-1}(x-\mu_k)

ふつうのユークリッド距離は全方向を平等に測りますが、マハラノビス距離は Σk1\Sigma_k^{-1} を挟むことで「データがよく散らばる方向は近め、あまり散らばらない方向は遠め」に補正します。

要するに:判別分析は「マハラノビス距離が最も近いクラスに割り当てる(+事前確率で微調整)」分類器です。事前確率が全クラス等しく(πk\pi_k 共通)共分散も共通(LDA)なら、判別は純粋に「マハラノビス距離が最も近いクラスを選ぶ」だけに帰着します。これは「データを白色化(球状化)してから、最も近い中心をユークリッド距離で選ぶ」のと等価です。

⚙️ 白色化(whitening):変換 z=Σ1/2xz = \Sigma^{-1/2} x をかけると共分散が単位行列になり、マハラノビス距離はその空間での普通のユークリッド距離に一致します。LDA は「空間を球状に直してから最近傍中心を選ぶ」と理解できます。

7. ロジスティック回帰との違い(生成 vs 識別)

LDA とロジスティック回帰は、決定境界がどちらも線形で見かけはそっくりです。2クラス LDA の事後確率を整理すると

P(y=1x)=11+exp((wx+b))P(y=1 \mid x) = \frac{1}{1 + \exp(-(w^\top x + b))}

となり、ロジスティック回帰とまったく同じシグモイド形になります。違いはパラメータの決め方です。

LDA / QDA(生成モデル)ロジスティック回帰(識別モデル)
モデル化する対象同時分布 P(x,y)P(x, y)P(xy)P(x\mid y) を正規と仮定)条件付き分布 P(yx)P(y \mid x) を直接
学習で最大化するもの同時尤度(μk,Σk,πk\mu_k, \Sigma_k, \pi_k を推定)条件付き尤度(w,bw, b を直接最尤)
仮定クラスが多変量正規という強い仮定仮定が少なく頑健
当たれば仮定が正しければ効率よく少データでも安定仮定が崩れても比較的ロバスト

要するに:LDA は「データの生成過程(各クラスの正規分布)を丸ごとモデル化してから、ベイズで境界を逆算する」生成的アプローチ。ロジスティック回帰は「境界そのものを直接学ぶ」識別的アプローチです。正規仮定が妥当ならLDAが効率的、そうでなければロジスティック回帰が無難、というのが実務の目安です(→ ロジスティック回帰)。

graph TB
    G["生成モデル:P(x, y) を丸ごとモデル化"] --> GA["LDA / QDA<br/>(各クラスを正規分布で仮定)"]
    GA --> GB["ベイズの定理で<br/>P(y | x) を逆算"]
    D["識別モデル:P(y | x) を直接モデル化"] --> DA["ロジスティック回帰<br/>(境界を直接学習)"]
    GB --> R["どちらも線形境界に到達<br/>(推定法が違う)"]
    DA --> R

⚠️ よくある誤解

対応するシミュレーション

simulations/lda_qda.py:クラスごとに広がり方(共分散)が違う2クラスデータで LDA と QDA の決定境界を並べて描きます。共通共分散を仮定する LDA は境界が直線になるのに対し、クラス別共分散の QDA は境界が曲線になり、細長いクラスの形に沿ってより自然に分けられること(訓練正解率も QDA が高い)を可視化します。

LDA(線形境界)と QDA(二次境界)の比較

関連ノート