ロジスティック回帰を用いて多クラスの分類問題を解く

多クラス分類

ロジスティック回帰では、活性化関数をロジット関数 logit(x) としていている。この関数 logit(x) が取りうる値は、0 よりも大きく 1 よりも小さい範囲内の値である。閾値で切ると 0 または 1 しか出力されない(例えば、logit(x) ≤ 0.5 ならば 1 を出力し、そうでなければ 0 を出力する)。このアルゴリズムそのままでは、二値分類問題にしか適用できない。

ロジスティック回帰を、多クラス分類問題に拡張するとき、多クラスのラベルを表現するための式を導入し、活性化関数を変更する必要がある。機械学習の分野において、多クラスを表現するには one-hot 表現が一般的に使われている。

one-hot 表現

C 個のクラスがある場合、要素が C 個のベクトルを用意する。こうすることで、クラスラベルが 1 ならば、(1, 0, ..., 0)T、クラスラベルが 2 ならば (0, 1, ..., 0)T、クラスラベルが C ならば (0, 0, ..., 1)T のように、個々のクラスラベルをベクトルで表せるようになる。

ソフトマックス関数

クラスの数が C 個のときのソフトマックス関数は次のように定義されている。

\[ \begin{pmatrix} \phi_{1} \\ \phi_{2} \\ \vdots \\ \phi_{c} \end{pmatrix} = \frac{1}{\sum_{i=1}^{C}e^{z_{i}}} \begin{pmatrix} e^{z_{1}} \\ e^{z_{2}} \\ \vdots \\ e^{z_{c}} \end{pmatrix} \]

ロジスティック回帰の活性化関数をこのソフトマックス関数に切り替えることで、多クラスの分類問題に対応できるようになる。例えば、あるデータが x = (x1, x2, ..., xn) が与えられたとき、この x に対して、z1 = w1Tx, z2 = w2Tx, ..., zC = wCTx を求めて、ソフトマックス関数に代入すれば、(φ1, φ2, ..., φC) が出力される。(φ1, φ2, ..., φC) の合計が 1 なので、これがそのままデータ x が各々のクラスとして分類されるときの確率を表している。