修行の場

知人が言っていました。これは修行だと。

単純な分類器を使いデータ収集を加速させる

背景

ラベル付きのデータセットを作る際に発生頻度が低いクラスを集めるのが難しいという問題があります。 結果、そのクラスの学習検証データ数が少なくなり、そのクラスやそのクラスに近いクラスの分類精度が下がるという問題が予想されます。 こういった場合にSVMなどの単純な最適化パラメータ数が少ない分類モデルで ある特定のクラスの可能性が全く内データだけ排除したデータにラベル付していくことで、 発生頻度の少ないクラスのデータを集められる気がします。

そういった分類器の構築方法を考えます。

アプローチ

二値分類器でラベルを収集対象クラスとその他のクラスを作り、 収集対象クラスを選択すると、そのクラスのラベル付だけ促すような アノテーションツールを考えます。

それ以外の問題の捉え方として、 マルチタグ付け多値分類問題を解くモデルを作るという方法があります。 確実に〜ではない分類をしたいので、所属クラスを一つに絞り込みたくないんどえ、 単純な達分類としては実装したくありません。

二値分類機を複数作ると、 ラベルの個数Nに対して、$\Theta(N)$回の学習をする必要があります。 ラベル付きデータが増えるに応じて、再学習させるような設計にするでしょうから、 ラベル付きデータが一定位数増えるたびにこの学習をすることになり、 効率は悪いように見えますが、SVMの多値分類では複数の分離平面を計算するので、 そこまで大きな差はつかないはずです。(実装の最適化レベルでSVMで多値分類するほうが早そうです)

後者の方法が楽そうです。 SVMの分類方法でone-versus-rest方があり、 その方法はマルチタグ付与問題と親和性がありそう。

なので、ラベルじゃないものは明らかなものだけ分類する分離平面を作り、 one-versus-restで分離平面の収集対象ラベル側にデータがある場合に、 そのタグをつければ良い。1クラスへの分類より実装は楽なはず。ライブラリの実装もありそうです。

特徴量設計

特徴量が不足した場合、不足した特徴を全く加味しないのと同様です。 また、SVMは高次元でもうまく関係ない次元を無視してくれるので、 不足より、多すぎる。を目指して設計します。

指標

ラベル付きがpositiveと考えたとき、

  • decrease the number of false negative
  • create a highest-recall classifier

is the evaluation metrics of the binary classifier under the one-versus-others classifier.

実装方法

クラスの所属を示したバイナリマトリックスを渡すだけでできそうです。 二値分類器でOne-versus-othersをするクラスが用意されていて、 それもマルチラベルシングルラベル両方対応しえいるので、 簡単に実装できそうです。用意されているサンプルもシンプルで、二値分類多ラベル問題をシンセティックデータ上で動かしているだけです。

大体実装方法はこんな感じです。