「統計学実践ワークブック」 演習問題etc Ch.23 「判別分析」

当記事は「統計学実践ワークブック(学術図書出版社)」の読解サポートにあたってChapter.$23$の「判別分析」に関して演習問題を中心に解説を行います。フィッシャーの判別分析やSVMなどはよく出てくる手法なので、演習を通して抑えておくと良いと思われました。

本章のまとめ

フィッシャーの線形判別の導出

フィッシャーの線形判別」で詳しく取り扱った。

$2$次判別分析

「フィッシャーの線形判別」などの線形判別では$2$クラスの共分散行列が等しいと仮定するが、この際にそれぞれのクラスの共分散行列を考えることで$2$次判別分析となる。

以下、サンプルを$\mathbf{x} \in \mathbb{R}^{2}$、クラス$1$を$y=1$、クラス$2$を$y=-1$、クラス$1$の平均を$\mu_{1} \in \mathbb{R}^{2}$共分散行列を$\Sigma_1 \in \mathbb{R}^{2 \times 2}$、クラス$2$の平均を$\mu_{2} \in \mathbb{R}^{2}$共分散行列を$\Sigma_2 \in \mathbb{R}^{2 \times 2}$でそれぞれ表すことを考える。

このとき、判別関数$f(\mathbf{x})$を下記のように定義する。
$$
\large
\begin{align}
f(\mathbf{x}) &= \log{ \frac{P(y=1|\mathbf{x})}{P(y=-1|\mathbf{x})} } \\
&= \log{ \frac{P(\mathbf{x}|y=1)P(y=1)/\cancel{P(\mathbf{x})}}{P(\mathbf{x}|y=-1)P(y=-1)/\cancel{P(\mathbf{x})}} } \\
&= \log{ \frac{P(\mathbf{x}|y=1)P(y=1)}{P(\mathbf{x}|y=-1)P(y=-1)} } \quad (1)
\end{align}
$$

ここで上記の$(1)$式に対し、下記が成立すると仮定する。
$$
\large
\begin{align}
P(\mathbf{x}|y=1) &= \mathcal{N}(\mathbf{x}|\mu_{1},\Sigma_{1}) \\
&= \frac{1}{(2 \pi)^{2/2} |\Sigma_{1}|^{1/2}} \exp \left( (\mathbf{x}-\mu_{1})^{\mathrm{T}}\Sigma_{1}^{-1}(\mathbf{x}-\mu_{1}) \right) \\
&= \frac{1}{2 \pi |\Sigma_{1}|^{1/2}} \exp \left( (\mathbf{x}-\mu_{1})^{\mathrm{T}}\Sigma_{1}^{-1}(\mathbf{x}-\mu_{1}) \right) \\
P(\mathbf{x}|y=-1) &= \mathcal{N}(\mathbf{x}|\mu_{2},\Sigma_{2}) \\
&= \frac{1}{(2 \pi)^{2/2} |\Sigma_{2}|^{1/2}} \exp \left( (\mathbf{x}-\mu_{1})^{\mathrm{T}}\Sigma_{2}^{-1}(\mathbf{x}-\mu_{2}) \right) \\
&= \frac{1}{2 \pi |\Sigma_{2}|^{1/2}} \exp \left( (\mathbf{x}-\mu_{1})^{\mathrm{T}}\Sigma_{2}^{-1}(\mathbf{x}-\mu_{2}) \right) \\
P(y=1) &= \pi_{1} \\
P(y=-1) &= \pi_{2}
\end{align}
$$

このとき、$(1)$式は下記のように変形を行える。
$$
\large
\begin{align}
& f(\mathbf{x}) = \log{\frac{P(y=1|\mathbf{x})}{P(y=-1|\mathbf{x})}} \quad (1) \\
&= \log{\frac{P(\mathbf{x}|y=1)P(y=1)/\cancel{P(\mathbf{x})}}{P(\mathbf{x}|y=-1)P(y=-1)/\cancel{P(\mathbf{x})}}} \\
&= \log{\frac{\mathcal{N}(\mathbf{x}|\mu_1,\Sigma_1)\pi_{1}}{\mathcal{N}(\mathbf{x}|\mu_2,\Sigma_2)\pi_{2}}} \\
&= \log{\frac{\pi_{1}}{\pi_{2}}} + \log{ \left[ \frac{\cancel{2 \pi}}{\cancel{2 \pi}}\frac{|\Sigma_2|^{1/2}}{|\Sigma_1|^{1/2}}\exp \left( -\frac{1}{2}(\mathbf{x}-\mu_1)^{\mathrm{T}}\Sigma_1^{-1}(\mathbf{x}-\mu_1) +\frac{1}{2}(\mathbf{x}-\mu_2)^{\mathrm{T}}\Sigma_2^{-1}(\mathbf{x}-\mu_2) \right) \right] } \\
&= -\frac{1}{2}(\mathbf{x}-\mu_1)^{\mathrm{T}}\Sigma_1^{-1}(\mathbf{x}-\mu_1) + \frac{1}{2}(\mathbf{x}-\mu_2)^{\mathrm{T}}\Sigma_2^{-1}(\mathbf{x}-\mu_2) + \log{\frac{\pi_{1}}{\pi_{2}}} + \log{\frac{|\Sigma_2|^{1/2}}{|\Sigma_1|^{1/2}}} \\
&= \mathbf{x}^{\mathrm{T}} \frac{1}{2}(-\Sigma_1^{-1}+\Sigma_2^{-1}) \mathbf{x} + (\mu_1^{\mathrm{T}}\Sigma_1^{-1}-\mu_2^{\mathrm{T}}\Sigma_2^{-1}) \mathbf{x} + \frac{1}{2}(-\mu_1^{\mathrm{T}}\Sigma_1^{-1}\mu_1+\mu_2^{\mathrm{T}}\Sigma_2^{-1}\mu_2) \\
& \qquad + \log{\frac{\pi_{1}}{\pi_{2}}} + \log{\frac{|\Sigma_2|^{1/2}}{|\Sigma_1|^{1/2}}} \quad (2)
\end{align}
$$

上記$(2)$式の$2$次の項が$\displaystyle \mathbf{x}^{\mathrm{T}} \frac{1}{2}(-\Sigma_1^{-1}+\Sigma_2^{-1}) \mathbf{x}$で表されることから、$\Sigma_1 \neq \Sigma_2$のとき、判別関数$f(\mathbf{x})$が$2$次であることが確認できる。

一方で$\Sigma_1 = \Sigma_2$が成立するとき、$(2)$式は$1$次式となるので、ここでの判別は線形判別に対応すると考えられる。

サポートベクトルマシン

演習問題解説

問23.1

$[1]$
$2$つの群が直線で分割できない際はフィッシャーの線形判別よりもガウシアンカーネルを用いたSVMの方が良い判別精度を示すと考えることができる。

$[2]$
線形判別の方がテストケースに対して良い結果を示していることから、過学習が生じていることが読み取れる。この対策にあたってはクロスバリデーションなどを行うことで、パラメータを適切な値に調節することなどが考えられる。

問23.2

下記を実行することで分類を行うことができる。

import numpy as np

w1 = np.array([-0.1, -0.1, 0.2, 0.4, 0.9])
w2 = np.array([0.0, 0.2, -0.2, 0.9, -0.3])

ave_x1 = np.array([1.2, 1.4, 0.3, 6.0, 4.6])
ave_x2 = np.array([1.4, 1.4, 0.3, 0.7, 2.1])
ave_x3 = np.array([0.8, 0.3, 1.6, 3.6, 9.2])

vec_x1 = np.array([np.dot(w1,ave_x1), np.dot(w2,ave_x1)])
vec_x2 = np.array([np.dot(w1,ave_x2), np.dot(w2,ave_x2)])
vec_x3 = np.array([np.dot(w1,ave_x3), np.dot(w2,ave_x3)])

new_x = np.array([2.5, -1.1, 0.0, -0.8, 1.0])
vec_new_x = np.array([np.dot(w1,new_x), np.dot(w2,new_x)])

cat_class = ["E", "F", "Q"]

dist2_vec = np.array([np.sum((vec_new_x-vec_x1)**2), np.sum((vec_new_x-vec_x2)**2), np.sum((vec_new_x-vec_x3)**2)])

print("Class: {}".format(cat_class[np.argmin(dist2_vec)]))

・実行結果

> print("Class: {}".format(cat_class[np.argmin(dist2_vec)]))
Class: F

問23.3

$[1]$
$$
\large
\begin{align}
f_{q}(\mathbf{x}) = \log{\frac{P(y=1|\mathbf{x})}{P(y=-1|\mathbf{x})}} \quad (1)
\end{align}
$$

ここで$P(\mathbf{x}|y=1)=\mathcal{N}(\mathbf{x}|\mu_1,\Sigma_1), P(\mathbf{x}|y=-1)=\mathcal{N}(\mathbf{x}|\mu_2,\Sigma_2)$より、$(1)$式は下記のように変形できる。
$$
\large
\begin{align}
& f_{q}(\mathbf{x}) = \log{\frac{P(y=1|\mathbf{x})}{P(y=-1|\mathbf{x})}} \quad (1) \\
&= \log{\frac{P(\mathbf{x}|y=1)P(y=1)/\cancel{P(\mathbf{x})}}{P(\mathbf{x}|y=-1)P(y=-1)/\cancel{P(\mathbf{x})}}} \\
&= \log{\frac{\mathcal{N}(\mathbf{x}|\mu_1,\Sigma_1)\pi_{1}}{\mathcal{N}(\mathbf{x}|\mu_2,\Sigma_2)\pi_{2}}} \\
&= \log{\frac{\pi_{1}}{\pi_{2}}} + \log{ \left[ \frac{\cancel{2 \pi}}{\cancel{2 \pi}}\frac{|\Sigma_2|^{1/2}}{|\Sigma_1|^{1/2}}\exp \left( -\frac{1}{2}(\mathbf{x}-\mu_1)^{\mathrm{T}}\Sigma_1^{-1}(\mathbf{x}-\mu_1) + \frac{1}{2}(\mathbf{x}-\mu_2)^{\mathrm{T}}\Sigma_2^{-1}(\mathbf{x}-\mu_2) \right) \right] } \\
&= -\frac{1}{2}(\mathbf{x}-\mu_1)^{\mathrm{T}}\Sigma_1^{-1}(\mathbf{x}-\mu_1) + \frac{1}{2}(\mathbf{x}-\mu_2)^{\mathrm{T}}\Sigma_2^{-1}(\mathbf{x}-\mu_2) + \log{\frac{\pi_{1}}{\pi_{2}}} + \log{\frac{|\Sigma_2|^{1/2}}{|\Sigma_1|^{1/2}}} \\
&= \mathbf{x}^{\mathrm{T}} \frac{1}{2}(-\Sigma_1^{-1}+\Sigma_2^{-1}) \mathbf{x} + (\mu_1^{\mathrm{T}}\Sigma_1^{-1}-\mu_2^{\mathrm{T}}\Sigma_2^{-1}) \mathbf{x} + \frac{1}{2}(-\mu_1^{\mathrm{T}}\Sigma_1^{-1}\mu_1+\mu_2^{\mathrm{T}}\Sigma_2^{-1}\mu_2) \\
& \qquad + \log{\frac{\pi_{1}}{\pi_{2}}} + \log{\frac{|\Sigma_2|^{1/2}}{|\Sigma_1|^{1/2}}}
\end{align}
$$

上記より$A, \mathbf{b}, c$はそれぞれ下記のように得られる。
$$
\large
\begin{align}
A &= \frac{1}{2}(-\Sigma_1^{-1}+\Sigma_2^{-1}) \\
\mathbf{b} &= \Sigma_1^{-1}\mu_1 – \Sigma_2^{-1}\mu_2 \\
c &= \frac{1}{2}(-\mu_1^{\mathrm{T}}\Sigma_1^{-1}\mu_1+\mu_2^{\mathrm{T}}\Sigma_2^{-1}\mu_2) + \log{\frac{\pi_{1}}{\pi_{2}}} + \log{\frac{|\Sigma_2|^{1/2}}{|\Sigma_1|^{1/2}}}
\end{align}
$$

$[2]$
与えられた$\Sigma_1,\Sigma_2$を元に$\Sigma_1^{-1},\Sigma_2^{-1}$はそれぞれ下記のように得られる。
$$
\large
\begin{align}
\Sigma_1^{-1} &= \left(\begin{array}{cc} 0.8 & 0 \\ 0 & 0.5 \end{array} \right)^{-1} \\
&= \left(\begin{array}{cc} 1/0.8 & 0 \\ 0 & 1/0.5 \end{array} \right) \\
&= \left(\begin{array}{cc} 1.25 & 0 \\ 0 & 2 \end{array} \right) \\
\Sigma_2^{-1} &= \left(\begin{array}{cc} 0.4 & 0 \\ 0 & 0.25 \end{array} \right)^{-1} \\
&= \left(\begin{array}{cc} 1/0.4 & 0 \\ 0 & 1/0.25 \end{array} \right) \\
&= \left(\begin{array}{cc} 2.5 & 0 \\ 0 & 4 \end{array} \right)
\end{align}
$$

また、$\pi_{1}=100/300=1/3, \pi_{2}=200/300=2/3$が成立する。その他与えられた数値を用いることで、$[1]$の$A, \mathbf{b}, c$はそれぞれ下記のように計算できる。

$$
\large
\begin{align}
A &= \frac{1}{2}(-\Sigma_1^{-1}+\Sigma_2^{-1}) \\
&= \frac{1}{2} \left( -\left(\begin{array}{cc} 1.25 & 0 \\ 0 & 2 \end{array} \right)+\left(\begin{array}{cc} 2.5 & 0 \\ 0 & 4 \end{array} \right) \right) \\
&= \frac{1}{2} \left(\begin{array}{cc} 1.25 & 0 \\ 0 & 2 \end{array} \right) = \left(\begin{array}{cc} 0.625 & 0 \\ 0 & 1 \end{array} \right) \\
\mathbf{b} &= \Sigma_1^{-1}\mu_1 – \Sigma_2^{-1}\mu_2 \\
&= \left(\begin{array}{cc} 1.25 & 0 \\ 0 & 2 \end{array} \right)\left(\begin{array}{c} 2 \\ 2 \end{array} \right) – \left(\begin{array}{cc} 2.5 & 0 \\ 0 & 4 \end{array} \right)\left(\begin{array}{c} 0 \\ 0 \end{array} \right) \\
&= \left(\begin{array}{c} 2.5 \\ 4 \end{array} \right) \\
c &= \frac{1}{2}(-\mu_1^{\mathrm{T}}\Sigma_1^{-1}\mu_1+\mu_2^{\mathrm{T}}\Sigma_2^{-1}\mu_2) + \log{\frac{\pi_{1}}{\pi_{2}}} + \log{\frac{|\Sigma_2|^{1/2}}{|\Sigma_1|^{1/2}}} \\
&= – \frac{1}{2}\left(\begin{array}{cc} 2 & 2 \end{array} \right)\left(\begin{array}{cc} 1.25 & 0 \\ 0 & 2 \end{array} \right)\left(\begin{array}{c} 2 \\ 2 \end{array} \right) + \log{\frac{1/3}{2/3}} + \log{\frac{0.1^{1/2}}{0.4^{1/2}}} \\
&= – \left(\begin{array}{cc} 1 & 1 \end{array} \right)\left(\begin{array}{c} 2.5 \\ 4 \end{array} \right) + \log{\frac{1}{2}} + \frac{1}{2}\log{\frac{1}{4}} \\
&= – 2.5 – 4 – \log{2} – \log{2} \\
&= -7.886…
\end{align}
$$

よって、判別関数を$f(\mathbf{x})$とおくと、$f(\mathbf{x})$は下記のように表せる。
$$
\large
\begin{align}
f(\mathbf{x}) &= \mathbf{x}^{\mathrm{T}} \left(\begin{array}{cc} 0.625 & 0 \\ 0 & 1 \end{array} \right) \mathbf{x} + \left(\begin{array}{c} 2.5 \\ 4 \end{array} \right)^{\mathrm{T}} \mathbf{x} – 7.886… \\
&= \mathbf{x}^{\mathrm{T}} \left(\begin{array}{cc} 0.625 & 0 \\ 0 & 1 \end{array} \right) \mathbf{x} + \left(\begin{array}{cc} 2.5 & 4 \end{array} \right) \mathbf{x} – 7.886…
\end{align}
$$

上記に対して$\mathbf{x} = \left(\begin{array}{cc} 1 & 1 \end{array} \right)^{\mathrm{T}}, \left(\begin{array}{cc} 0 & 1 \end{array} \right)^{\mathrm{T}}$を代入すると下記のように計算できる。
・$\mathbf{x} = \left(\begin{array}{cc} 1 & 1 \end{array} \right)^{\mathrm{T}}$
$$
\large
\begin{align}
f(\mathbf{x}) &= \mathbf{x}^{\mathrm{T}} \left(\begin{array}{cc} 0.625 & 0 \\ 0 & 1 \end{array} \right) \mathbf{x} + \left(\begin{array}{cc} 2.5 & 4 \end{array} \right) \mathbf{x} – 7.886… \\
&= \left(\begin{array}{cc} 1 & 1 \end{array} \right) \left(\begin{array}{cc} 0.625 & 0 \\ 0 & 1 \end{array} \right) \left(\begin{array}{c} 1 \\ 1 \end{array} \right) + \left(\begin{array}{cc} 2.5 & 4 \end{array} \right) \left(\begin{array}{c} 1 \\ 1 \end{array} \right) – 7.886… \\
&= 1+0.625+2.5+4-7.886… = 0.2387… > 0
\end{align}
$$

よってクラス$1$に分類される。

・$\mathbf{x} = \left(\begin{array}{cc} 0 & 1 \end{array} \right)^{\mathrm{T}}$
$$
\large
\begin{align}
f(\mathbf{x}) &= \mathbf{x}^{\mathrm{T}} \left(\begin{array}{cc} 0.625 & 0 \\ 0 & 1 \end{array} \right) \mathbf{x} + \left(\begin{array}{cc} 2.5 & 4 \end{array} \right) \mathbf{x} – 7.886… \\
&= \left(\begin{array}{cc} 0 & 1 \end{array} \right) \left(\begin{array}{cc} 0.625 & 0 \\ 0 & 1 \end{array} \right) \left(\begin{array}{c} 0 \\ 1 \end{array} \right) + \left(\begin{array}{cc} 2.5 & 4 \end{array} \right) \left(\begin{array}{c} 0 \\ 1 \end{array} \right) – 7.886… \\
&= 1+4-7.886… = -2.886 < 0
\end{align}
$$

よってクラス$2$に分類される。

参考

・準$1$級関連まとめ
https://www.hello-statisticians.com/toukeikentei-semi1

「「統計学実践ワークブック」 演習問題etc Ch.23 「判別分析」」への1件の返信

コメントは受け付けていません。