通常の分類問題は,各点がたった1つのクラスにしか属さないという仮定のもとで解かれる. しかし,現実には各点が複数のクラスに属するという場合がある. このような問題はマルチラベル分類問題 (multi-label classification) と呼ばれ,盛んに研究されている. マルチラベル分類問題を解くためのモジュールはいくつか存在するが,Pythonにはscikit-multilearnというモジュールがある.

今回はこれを使ってマルチラベル分類問題を解いてみる. データには公式と同じくsceneを使う.

まずはscikit-multilearnをダウンロードして移動する.

git clone https://github.com/scikit-multilearn/scikit-multilearn
cd scikit-multilearn

今回はここに以下のコードを置いて使ってみる.

https://gist.github.com/nkt1546789/294dda4bf5e6b1b390bf

実行結果:

0.113573021182

やっていることはとてもシンプル. まだソースを見ていないのでなんとも言えないが, 基本的な分類器を用意してそれをskmultilearn.meta_br.BinaryRelevanceがmulti-label用にラップしてくれると解釈している. 今回はlinear SVMを使ってみた. multi-label classificationの評価指標にはhamming lossが使われるようだ. これは[0-1]で,低ければ低いほど良い. 今回は0.11だったのでまぁまぁなのではないか.

以上scikit-multilearnの簡単な使い方を紹介してみた. 「multi-label classificationしないといけないけど詳しくない」 という方はとりあえずこれを使ってみるというのはどうでしょうか.