アラフォーからの機械学習

アラフォーです。機械学習や統計学の解説記事を書いていきます

線形判別分析を理解する

線形判別分析

線形判別分析(LDA)は各クラスの説明変数の分布が正規分布に従っていること、また各クラスの共分散行列が等しいと仮定した特別な場合です。説明変数が複数ある場合は多変量正規分布になりますが、多変量正規分布確率密度関数

\displaystyle{
\begin{align}
    f(\boldsymbol{x})  = \frac{1}{(2 \pi)^{p/2} |\boldsymbol{\Sigma}|^{1/2}}
    \exp \left\{- \frac{1}{2} (\boldsymbol{x} - \boldsymbol{\mu})^{\mathrm{T}} \boldsymbol{\Sigma}^{-1} (\boldsymbol{x} - \boldsymbol{\mu})\right\} 
\end{align}
}

です。ここで\boldsymbol{x}p次元(説明変数の数がp)で、説明変数の平均が\boldsymbol{\mu}(説明変数ごとに平均値があるためベクトル)で\boldsymbol{\Sigma}は共分散行列です。

では線形判別分析によるクラス分類を考えます。各クラスの説明変数の分布が多変量正規分布に従っているとしたとき、クラスkの多変量正規分布のパラメータを(\boldsymbol{\mu}_k, \boldsymbol{\Sigma}_k)と書くことにします。では、分類のためクラスkの事後確率を求めます。これはベイズの定理より以下のように求めます。

\displaystyle{
\begin{align}
    \mathrm{P}(G = k | \boldsymbol{X} = \boldsymbol{x}) = \pi_k \frac{f_k(\boldsymbol{x})}{\sum^K_{l=1}f_l(\boldsymbol{x}) \pi_l}
\end{align}
}

各項の解釈はこちらになります。

  • \mathrm{P}(G = k | \boldsymbol{X} = \boldsymbol{x}) : 事後確率。データ\boldsymbol{x}が観測されたもとでのクラスkが生じる確率。
  • \pi_k : 事前確率。クラスkが生じる確率。
  • f_k(\boldsymbol{x}) : 尤度。\mathrm{P}(\boldsymbol{X} = \boldsymbol{x} | G = k)。クラスkが与えられたもとでデータ\boldsymbol{x}が得られる確率密度。
  • \sum^K_{l=1}f_l(\boldsymbol{x}) \pi_l:周辺化された尤度。P(\boldsymbol{X} = \boldsymbol{x}) 。データ\boldsymbol{x}が得られる確率。Kはクラス数(2クラスであれば2)。

この(2)式を使って各クラスの確率を比較してみます。今考えている問題は各クラスの確率です。そのため、クラス(ここではクラスk)に依存しない項は意味を持たないため、無視することにします。分母の\sum^K_{l=1}f_l(\boldsymbol{x}) \pi_lはデータが得られる確率であり、クラスに依存しないため無視します。比例記号を使って

\displaystyle{
    \mathrm{P}(G = k | \boldsymbol{X} = \boldsymbol{x}) \propto \pi_k \cdot f_k(\boldsymbol{x})
}

と表します。つぎに対数を取り\delta_k(\boldsymbol{x})と書くことにします。

\displaystyle{
    \delta_k(\boldsymbol{x}) = \log \{ \pi_k \cdot f_k(\boldsymbol{x}) \}
}

多変量正規分布の(1)式を代入し、変形していきます。

\displaystyle{
    \begin{align}
        \delta_k(\boldsymbol{x}) &= \log \{ \pi_k \cdot f_k(\boldsymbol{x}) \}  \nonumber \\
        &= \log \pi_k + \log f_k(\boldsymbol{x}) \nonumber \\
        &= \log \pi_k + \log \{(2\pi)^{p/2} |\boldsymbol{\Sigma}_k^{1/2}|\}^{-1}
        - \frac{1}{2} (\boldsymbol{x} - \boldsymbol{\mu}_k)^{\mathrm{T}} \boldsymbol{\Sigma}_k^{-1} (\boldsymbol{x} - \boldsymbol{\mu}_k)  \nonumber \\
        &= \log \pi_k - \frac{p}{2} \log (2\pi) - \frac{1}{2} \log |\boldsymbol{\Sigma}_k|
        - \frac{1}{2} (\boldsymbol{x} - \boldsymbol{\mu}_k)^{\mathrm{T}} \boldsymbol{\Sigma}_k^{-1} (\boldsymbol{x} - \boldsymbol{\mu}_k)
    \end{align}  \nonumber
}

\frac{p}{2}\log(2\pi)も各クラス共通に現れるので無視します。

\displaystyle{
    \delta_k(\boldsymbol{x}) = \log \pi_k - \frac{1}{2} \log |\boldsymbol{\Sigma}_k|
    - \frac{1}{2} (\boldsymbol{x} - \boldsymbol{\mu}_k)^{\mathrm{T}} \boldsymbol{\Sigma}_k^{-1} (\boldsymbol{x} - \boldsymbol{\mu}_k)
}

線形判別分析は各クラスが共通の共分散行列を持つと仮定した場合の手法です。なので、\boldsymbol{\Sigma}_k = \boldsymbol{\Sigma}とします。

\displaystyle{
    \delta_k(\boldsymbol{x}) = \log \pi_k - \frac{1}{2} \log |\boldsymbol{\Sigma}|
    - \frac{1}{2} (\boldsymbol{x} - \boldsymbol{\mu}_k)^{\mathrm{T}} \boldsymbol{\Sigma}^{-1} (\boldsymbol{x} - \boldsymbol{\mu}_k)
}

こうすると\frac{1}{2} \log |\boldsymbol{\Sigma}|も各クラス共通になるので無視します。

\displaystyle{
    \delta_k(\boldsymbol{x}) = \log \pi_k 
    - \frac{1}{2} (\boldsymbol{x} - \boldsymbol{\mu}_k)^{\mathrm{T}} \boldsymbol{\Sigma}^{-1} (\boldsymbol{x} - \boldsymbol{\mu}_k)
}

第2項を展開します。

\displaystyle{
    \delta_k(\boldsymbol{x}) = \log \pi_k
    - \frac{1}{2}(\boldsymbol{x}^{\mathrm{T}} \boldsymbol{\Sigma}^{-1} \boldsymbol{x}
    - \boldsymbol{x}^{\mathrm{T}} \boldsymbol{\Sigma}^{-1} \boldsymbol{\mu}_k
    - \boldsymbol{\mu}_k^{\mathrm{T}} \boldsymbol{\Sigma}^{-1} \boldsymbol{x}
    + \boldsymbol{\mu}_k^{\mathrm{T}} \boldsymbol{\Sigma}^{-1} \boldsymbol{\mu}_k)
}

ここで、\boldsymbol{\mu}_k^{\mathrm{T}} \boldsymbol{\Sigma}^{-1} \boldsymbol{x}はスカラなので、転置をとっても同じ結果になるので、

\displaystyle{
    \begin{align}
        \delta_k(\boldsymbol{x}) &= \log \pi_k
        - \frac{1}{2}(\boldsymbol{x}^{\mathrm{T}} \boldsymbol{\Sigma}^{-1} \boldsymbol{x}
        - \boldsymbol{x}^{\mathrm{T}} \boldsymbol{\Sigma}^{-1} \boldsymbol{\mu}_k
        - (\boldsymbol{\mu}_k^{\mathrm{T}} \boldsymbol{\Sigma}^{-1} \boldsymbol{x})^\mathrm{T}
        + \boldsymbol{\mu}_k^{\mathrm{T}} \boldsymbol{\Sigma}^{-1} \boldsymbol{\mu}_k)   \nonumber \\
        &= \log \pi_k
        - \frac{1}{2}(\boldsymbol{x}^{\mathrm{T}} \boldsymbol{\Sigma}^{-1} \boldsymbol{x}
        - \boldsymbol{x}^{\mathrm{T}} \boldsymbol{\Sigma}^{-1} \boldsymbol{\mu}_k
        - \boldsymbol{x}^{\mathrm{T}} \boldsymbol{\Sigma}^{-1} \boldsymbol{\mu}_k
        + \boldsymbol{\mu}_k^{\mathrm{T}} \boldsymbol{\Sigma}^{-1} \boldsymbol{\mu}_k) \nonumber \\
        &= \log \pi_k
        - \frac{1}{2}\boldsymbol{x}^{\mathrm{T}} \boldsymbol{\Sigma}^{-1} \boldsymbol{x}
        + \boldsymbol{x}^{\mathrm{T}} \boldsymbol{\Sigma}^{-1} \boldsymbol{\mu}_k
        - \frac{1}{2} \boldsymbol{\mu}_k^{\mathrm{T}} \boldsymbol{\Sigma}^{-1} \boldsymbol{\mu}_k \nonumber \\
    \end{align}
}

- \frac{1}{2}\boldsymbol{x}^{\mathrm{T}} \boldsymbol{\Sigma}^{-1} \boldsymbol{x}もクラス共通のため無視します。

\displaystyle{
\begin{align}
    \delta_k(\boldsymbol{x}) = \log \pi_k
    + \boldsymbol{x}^{\mathrm{T}} \boldsymbol{\Sigma}^{-1} \boldsymbol{\mu}_k
    - \frac{1}{2} \boldsymbol{\mu}_k^{\mathrm{T}} \boldsymbol{\Sigma}^{-1} \boldsymbol{\mu}_k
\end{align}
}

この式を線形判別関数といいます。この式の計算結果が最大となるクラスに分類します。

線形判別関数のパラメータ

線形判別関数のパラメータですが、(4)式を眺めると入力データである\boldsymbol{x}^\mathrm{T}以外の(\pi_k, \boldsymbol{\mu}_k, \boldsymbol{\Sigma})です。これらを訓練データを基に推定(学習)する必要があります。と言ってもとくに難しいことではなく、

\displaystyle{
    \begin{align}
        \hat{\pi}_k &= \frac{N_k}{N}  \nonumber \\
        & (N_k\mathrm{はクラス}k\mathrm{の数}) \nonumber\\
        \hat{\boldsymbol{\mu}}_k &= \frac{1}{N_k} \sum_{g_i=k} \boldsymbol{x}_i \nonumber \\
        & (\mathrm{クラス}k\mathrm{の説明変数ごとの平均値}) \nonumber \\
        \hat{\boldsymbol{\Sigma}} &= \frac{1}{N - K} \sum^K_{k=1} \sum_{g_i=k}
        (\boldsymbol{x}_i - \hat{\boldsymbol{\mu}}_k)(\boldsymbol{x}_i - \hat{\boldsymbol{\mu}}_k)^\mathrm{T}  \nonumber \\
        & (\mathrm{クラスごとの共分散行列の平均値}) \nonumber
    \end{align}
}

で推定できます。

対数比による分類

特に2クラス分類のとき、事後確率の対数比から容易に分類が行なえます。

クラス1とクラス2を分類することを考えた場合、それらの事後確率の対数比は、

\displaystyle{
    \log \frac{\mathrm{P}(G=2 | \boldsymbol{X} = \boldsymbol{x})}{\mathrm{P}(G=1 | \boldsymbol{X} = \boldsymbol{x})} \nonumber
}

です。確率比の対数を取る理由ですが、それは確率比のパターンを分けて考えると理解できます。確率比は以下の3パターンです。

  1. 分子が大きいケース:\mathrm{P}(G=2 | \boldsymbol{X} = \boldsymbol{x}) \gt \mathrm{P}(G=1 | \boldsymbol{X} = \boldsymbol{x})
  2. 分母が大きいケース:\mathrm{P}(G=2 | \boldsymbol{X} = \boldsymbol{x}) \lt \mathrm{P}(G=1 | \boldsymbol{X} = \boldsymbol{x})
  3. 分子と分母が等しいケース:\mathrm{P}(G=2 | \boldsymbol{X} = \boldsymbol{x}) = \mathrm{P}(G=1 | \boldsymbol{X} = \boldsymbol{x})

それぞれのパターンについて対数を取ると以下になります。

  1. \log \frac{\mathrm{P}(G=2 | \boldsymbol{X} = \boldsymbol{x})}{\mathrm{P}(G=1 | \boldsymbol{X} = \boldsymbol{x})} \gt 0

  2. \log \frac{\mathrm{P}(G=2 | \boldsymbol{X} = \boldsymbol{x})}{\mathrm{P}(G=1 | \boldsymbol{X} = \boldsymbol{x})} \lt 0

  3. \log \frac{\mathrm{P}(G=2 | \boldsymbol{X} = \boldsymbol{x})}{\mathrm{P}(G=1 | \boldsymbol{X} = \boldsymbol{x})} = 0

確率が高い方のクラスに分類を行いますので、つまり符号によって分類が行えることになります。なお2クラスの確率が等しい場合は0になりますので、それが決定境界を表します。

上で求めた線形判別関数(4)式を使えば

\displaystyle{
    \begin{align}
        \log \frac{\mathrm{P}(G=2 | \boldsymbol{X} = \boldsymbol{x})}{\mathrm{P}(G=1 | \boldsymbol{X} = \boldsymbol{x})}
        &= \log \mathrm{P}(G=2 | \boldsymbol{X} = \boldsymbol{x}) - \log \mathrm{P}(G=1 | \boldsymbol{X} = \boldsymbol{x}) \nonumber \\
        &= \log \pi_2
        + \boldsymbol{x}^{\mathrm{T}} \boldsymbol{\Sigma}^{-1} \boldsymbol{\mu}_2
        - \frac{1}{2} \boldsymbol{\mu}_2^{\mathrm{T}} \boldsymbol{\Sigma}^{-1} \boldsymbol{\mu}_2 
        - \left\{ \log \pi_1
        + \boldsymbol{x}^{\mathrm{T}} \boldsymbol{\Sigma}^{-1} \boldsymbol{\mu}_1
        - \frac{1}{2} \boldsymbol{\mu}_1^{\mathrm{T}} \boldsymbol{\Sigma}^{-1} \boldsymbol{\mu}_1 \right \} \nonumber \\
        &= \log \frac{\pi_2}{\pi_1}
        + \boldsymbol{x}^{\mathrm{T}} \boldsymbol{\Sigma}^{-1} \boldsymbol{\mu}_2
        - \boldsymbol{x}^{\mathrm{T}} \boldsymbol{\Sigma}^{-1} \boldsymbol{\mu}_1
        - \frac{1}{2} \boldsymbol{\mu}_2^{\mathrm{T}} \boldsymbol{\Sigma}^{-1} \boldsymbol{\mu}_2 
        + \frac{1}{2} \boldsymbol{\mu}_1^{\mathrm{T}} \boldsymbol{\Sigma}^{-1} \boldsymbol{\mu}_1 \nonumber \\
        &= \log \frac{\pi_2}{\pi_1}
        + \boldsymbol{x}^{\mathrm{T}} \boldsymbol{\Sigma}^{-1} (\boldsymbol{\mu}_2 - \boldsymbol{\mu}_1)
        - \frac{1}{2} ( \boldsymbol{\mu}_2 + \boldsymbol{\mu}_1)^{\mathrm{T}} \boldsymbol{\Sigma}^{-1} (\boldsymbol{\mu}_2 - \boldsymbol{\mu}_1)
    \end{align} \nonumber
}

となります。あとはこの結果の符号を見て判別が行なえます。なお補足になりますが、線形判別関数を求める際に、クラス共通のため無視してきた項というのは1行目が表しているように、引き算により消える運命にあります。

2次判別分析

2次判別分析(QDA)は、線形判別分析で仮定した「各クラスの共分散行列が等しい」を仮定しない場合です。よって、仮定をする前の(3)式である以下が2次判別関数です。

\displaystyle{
    \delta_k(\boldsymbol{x}) = \log \pi_k - \frac{1}{2} \log |\boldsymbol{\Sigma}_k|
    - \frac{1}{2} (\boldsymbol{x} - \boldsymbol{\mu}_k)^{\mathrm{T}} \boldsymbol{\Sigma}_k^{-1} (\boldsymbol{x} - \boldsymbol{\mu}_k) \nonumber
}

この場合、 - \frac{1}{2}\boldsymbol{x}^{\mathrm{T}} \boldsymbol{\Sigma}_k^{-1} \boldsymbol{x}が消えず、これは\boldsymbol{x}の2次関数であるため、決定境界が2次式となります。

線形判別分析による次元削減

線形判別分析は主成分分析のように次元削減という特徴も持っています。これは別の機会に記事にします。

参考

  • 統計的学習の基礎