MLC toolbox: MATLAB/Octave用のマルチラベル分類ライブラリ
記事を非公開にしてたけど,いま少し頑張っていることを書くことにする.
マルチラベル分類
従来の分類問題は一つのデータ点(インスタンス)は一つのクラスのいずれかに属するという設定.
マルチラベル分類は一つのインスタンスが一つ以上のクラスに属するという設定.
割り当てがラベルの組み合わせの数だけ存在するので比較的難しいよねという話.(おおざっぱにいえば
マルチラベル分類のライブラリ
色んなところで色んな人が公開している.
有名なのは
特にMulanはデータセットを公開しているので(arff形式だが)非常によく引用されている.
これらはJavaのWekaというデータマイニングライブラリをベースに実装されている.
しかし一方で,個人がいろいろと公開しているものは多くの場合がMATLABとC++(+mex function, MATLABから呼ぶため).
例えば
- Prof. ML-Zhang http://cse.seu.edu.cn/people/zhangml/Resources.htm
- LAMDA http://lamda.nju.edu.cn/Data.ashx
- 同期 https://github.com/futuresun912
さらにeXtreme Multi-Label Classification (XML)のMSR Indiaも同様
これらはC++が基本.(大規模になるとMATLABではほとんど扱えなくなってしまうからだけど,MATLABから呼べるようになっている.
実際にSLEECはXMLでは高精度な手法で知られているがこれらはMATLAB用のコードが公開されている.
コードにはコメントがほとんどないので読むのは地獄.
自分の観測範囲ではマルチラベル分類はJava派とMATLAB派に2分されている.
MulanやMEKAを用いて実装された手法はMATLABで実装されるような手法とは比較されていないのが現状.
さらにはMATLABもコードがあちこちで提供されているので,一つのライブラリとしてまとめようってのが目的.
もう少し細かく書くと以下:
MLC-toolboxの目的
Javaは遅い(個人の経験と感想に基づく)のでMATLAB.
さらに今後公開されるコードの多くがMATLABであることを考えるとMATLAB.
Pythonも考えたけど,二つ目の理由でやはりMATLAB.
- 多様な手法の実装
MATLAB実装の多くは行列演算を頻繁に用いる手法.
これらとそうではない手法との比較を行えるようにする.
- 手法の組み合わせ
述べていないけど,これはもう一つの目的.(実はこれが一番大きな目的)
マルチラベル分類はマルチラベル分類問題を小さなもしくは簡単なマルチラベル分類問題へ変換して解くという手法が多い.
例えば,クラスタリングしてインスタンス数を減らすだったり,
特徴抽出で次元を減らすだったり.(ラベル情報を用いた教師あり手法がある)
さらにラベル数をサンプリングもしくは次元縮約で減らすということもある.
これらはマルチラベル分類問題を他のマルチラベル分類問題に変換していると見なせる.
なのでこれらの組み合わせは膨大にあって,どの組み合わせが良いのかを調べる必要がある.
例えば,実際にSLEECといった手法はクラスタリング+特徴抽出+KNNだったりする.
どの手法がどの程度,精度に影響を与えているのかはわからないので組み合わせを簡単に検証できるようなライブラリが必要だなということで
作っている