機械学習に詳しくなりたいブログ

機械学習や数学について勉強した内容を中心に書きます。100%趣味です。記事は数学的に厳密でなかったり誤りを含んでいるかもしれません。ご指摘頂ければ幸いです。

フィッシャーの線形判別(1)

フィッシャーの線形判別とは

フィッシャーの線形判別は、これ自体は判別・識別の手法ではなく、各クラスのデータの分離を保ちつつ次元圧縮する手法のようです。多次元のデータを扱うのは大変なので、次元圧縮して計算を楽にしようということでしょうか。今回は2次元の入力を1次元に圧縮する場合を考えていきます。

次元圧縮のイメージ

2次元の入力\mathbf xC_1,C_2の2クラスのデータを考え、


y = \mathbf{w}^{T} \mathbf{x} \tag{1}

で1次元に射影するとします。先回までに考えた線形識別とは異なり、ダミー入力は入れません。どのような線上に射影すれば最も分離しやすくなるか?を考えていきます。イメージは以下のアニメーションです。

上のグラフは赤色のクラスと青色のクラスのデータで、緑色の直線に射影した時の点が下に表示されています。これくらいの単純な例だと、目視でなんとなく良さそうな直線が見つけられそうですけどね。

2クラスの場合の次元圧縮方向

どういう方向へ射影するのが適切であるのかを考えます。各クラスにデータがN_k個あるとすると、平均ベクトルは


\displaystyle \mathbf m_k = \frac{1}{N_k} \sum_{n \in C_k} \mathbf x_n \tag{2}

と書けます。この平均ベクトルをある方向へ射影したとき、より離れていれば良さそうです。2クラスの問題であれば、


m_2 - m_1 = \mathbf{w}^{T} (\mathbf m_2 - \mathbf m_1) \tag{3}

を最大にする\mathbf wを解とするというのが1つの方法です。式(3)においてm_kは平均ベクトルを式(1)で射影した値です。つまり、式(3)を最大にするということは、各クラスのデータの中心点が最も離れるように射影するということです。ただし、\mathbf w


\displaystyle \sum_i w_i^2 = 1 \tag{4}

とします。射影時に拡大させてしまうとm_2-m_1がどれだけでも大きくなってしまうためです。

しかしこれは各クラスのデータのばらつき具合によっては必ずしも最適な解にはなりません。以下のように、平均がベクトルの距離が遠い左図より、距離が近いほうが適切な分離であるという可能性があります。*1


ということで、ばらつきを考慮するために、射影後の各クラスのデータの分散


\displaystyle  s_k^2 = \sum_{n \in C_k} (y_n - m_k)^2 \tag{5}

を考慮にいれ、フィッシャーの判別基準は


\displaystyle  J(\mathbf w) = \frac{(m_2 - m_1)^2}{s_1^2 + s_2^2} \tag{6}

と定義され、これを最大にする\mathbf wを解とします。射影後の分散は小さく、そしてデータの中心点は遠くとりたいということですね。

この続きはフィッシャーの線形判別(2)です。

*1:平均ベクトルの位置は説明のために適当に入れています。もしかしたら右図のほうが平均ベクトルの距離も大きいかもしれません。