二値分類を多クラス分類に拡張するには以下の方法がある:
- One-vs-.rest (OvR)
- One-vs.-one (OvO)
「そのクラスに所属するか否か」を判定した二値判別機を各クラスごとに学習する.
入力:
-
$L$ : 学習機(binary classifier) -
$X$ : サンプルセット -
$y$ : クラスのラベル.$k_i\in{1, ..., K}$ はサンプル点$X_i$のラベルを表す
出力:
-
$f_k$ for$k\in{1, ..., K}$
処理:
-
$k\in{1, .., K}$ なるすべての$k$に対して:- 新しいラベル変数$z_i$を生成する:
-
$y_i=k$ の場合,$z_i=y_i$ , - それ以外の場合,
$z_i=0$ .
-
- サンプル集合$X$,
$z$ に学習機$L$を適用し、$f_k$を得る
- 新しいラベル変数$z_i$を生成する:
サンプル$x$があるクラスに所属するかどうかは、各classifierの判別結果の最大作用素点(argmax)として以下のように表される:
あるサンプル$x$に対して、それぞれの識別器の判別結果が$f_0=0.1$,
One-vs-.restはよく使われる手法だが、いくつかの問題を抱えたヒューリスティックな手法である:
- 各 binary classifier 間で、判別結果の信頼性が著しく異なるケースについて考慮していない(信頼性が著しく低い classifier の判別結果と著しく高い classifier の判別結果を同等に扱っている)
- 学習セットのクラスの分布が均一にだったとしても、クラス判別機の入力として与えられるクラスの分布は不均一になる(例: 「クラスA」のサンプル数よりも「クラスA以外」のサンプル数が遥かに多くなる)
異なる2クラス同士のすべての組み合わせ(
OvOもOvRと同様に、2つ以上のクラスが同票を獲得する可能性があるという曖昧さを含む.
数式を読むには以下の chrome extension をインストールしてください:
https://chrome.google.com/webstore/detail/mathjax-plugin-for-github/ioemnmodlmafdkllaclgeombjnmnbima