« 読了:Montero & Vilar (2014) RのTSclustパッケージで時系列クラスタリング | メイン | 覚え書き:BPTO(Brand Price Trade-off)とはどんな手法か (途中で投げ出しましたけど) »
2018年4月30日 (月)
勤務先の優秀なインターン青年に「機械学習で分類課題やるとき、クラスの事前確率が極端にちがう場合はclass imbalance問題といわれていて、いっぱい議論があるのよ。腕の見せ所だよ、頑張ってねー」などと、お茶をすすりながら偉そうなことを抜かしたのはいいが、良く考えてみたら、そもそもclass imbalance問題とはなんだろう。正面切って問われたら全然答えられない。
こういう話、人々はいったいどうやって勉強してんですかね?
Japkowicz, N., Stephen, S. (2002) The class imbalance problem: A systematic study. Intelligent Data Analysis, 6, 429-449.
class imbalance 問題 (以下CIと略記)についての論文。google様的には引用度数1600件強。
本論文の概要
本研究では次の3つの問いについて調べる。
- CI問題の本質はなにか。つまり、C5.0のような標準的分類器の正解率がCIのせいで低くなってしまうのはどんな領域か?
- CI問題に対処するためのさまざまなアプローチはどう異なるか?
- C5.0以外の分類器でも、正解率はCIのせいで低くなるか?
Q1. CIの問題の本質
実験やります。
架空のdomainをつくる。それぞれのdomainは[0,1]の一次元の入力を持つ。[0,1]を$2^c$等分して($c=1,\ldots,5$)、それぞれの区間にクラス(0,1)を交互に割り当てる。ここから$(5000/32)*2^s$個の事例を一様に抽出する($s=1, \ldots, 5$)。で、クラス0の各区間から得た事例は$1/(32/2^i)$番目まで残し($i=1,\ldots,5$)、あとは捨てる。これを訓練データとする[nagativeが少ないわけだ]。テストデータは各区間あたり50事例。
というわけで、要因は複雑性、訓練データのサイズ、CIの3つ。たとえば$c=1, s=1, i=2$だったら、訓練データは$[0,0.5)$がクラス1で157件、$(0.5,1]$がクラス0で79件となる。
これをC5.0で学習する。4種類の結果を報告する。
- 修正済の結果。すなわちテストデータのエラー率そのもの。訓練データにimbalanceがあるにも関わらず、誤分類のコストがクラス間で同じである場合である。
- 未修正の結果。すなわち、テストデータの結果におけるfalse positive率とfalse negative率の比が、訓練データにおけるpositive率とnegative率の比になるように修正したときのエラー率。誤分類の相対的コストがimbalanceに応じて変わっている場合である。["修正済"と"未修正"が直感と逆で、混乱する...]
- false positiveエラー率。
- false negativeエラー率。
結果。
- 線形分離可能であれば($c=1$)、imbalanceは影響しない。複雑になると、imbalanceがあるときにエラー率が上がる。修正済でも未修正でも大差ない。
- 当然ながらエラーはnegativeテスト事例で大きい(false positive率が大きい)。
- 訓練データのサイズが大きいと、imbalanceの影響は小さくなる。
この実験にはいろいろ不備がある。たとえば訓練データの実際のサイズがimbalance要因のせいで変わっちゃうとか。そこで改めて実験すると...[細かくて面倒くさい話なので詳細は省略, 結果のみメモする]
- imbalance問題の本質は、imbalanceそのものにあるのではなくて、imbalanceのために訓練データにおいて片方のクラスの下位クラスタの事例数が小さくなっちゃうという点にある。これは一種の小標本問題なのだ。だからすごく大きなdomainならimbalanceは問題にならない。
- C5.0では過学習を防ぐためにpruningする。それが良くないんだという説があるけど、pruningをやめてもimbalanceの影響は消えない。
Q2. 手法の比較
さっきと同じ実験をやるんだけど、今度は次の対処法を試す。
- random oversampling. 小さい方のクラスをoversamplingする。
- focused sampling. 小さい方のクラスの、区間の境界に近い事例をoversamplingする。[えええ?下位クラスタの境界を学習者が知っているという前提な訳?]
- random undersampling. 大きい方のクラスをundersamplingする。
- focused undersampling. 大きい方のクラスの、区間の境界から遠い事例をundersamplingする。
- cost-modifying. たとえば、class impalanceがposi:nega=1:9だったら、positive事例の誤分類のコストを9倍にする。
結果。どの方法にもそれなりの効果があるが、undersamplingの効率が悪い(randomでもfocusedでも)。概して一番良いのはcost modifying。
今度は実事例の場合をみてみよう...[面倒くさいのでパス]
Q3. 他の分類器はCIに敏感か?
同じような実験を、多層パーセプトロン(MLP)とサポート・ベクター・マシン(SVM)でやる。それぞれパラメータがいろいろあるので、試した中で最良の結果をみます。
結果。
MLPは[...大幅中略...]C5.0ほどにはCIの影響を受けない。
SVMは[...中略...] CIの影響を全然受けない。[←へぇー]
結論
CI問題は相対的な問題で、以下の要因の影響を受ける。(1)CIの程度, (2)概念の複雑さ、(3)訓練セットのサイズ、(4)分類器。ポイントは下位クラスタのサイズが十分かどうか。
分類器はC5.0, MLP, SVMの順にCIの影響を受ける。
CIの影響をうける分類器の場合はリサンプリングやcost-modifyingに効果がある。cost-modifyingが一番良い。
云々。
。。。いやー、読みにくい論文であった。チャートが小さいんだもん。
クラス不均衡問題っていうけど不均衡自体が問題なのではない、結局は(クラスじゃなくて)下位クラスタの小標本問題なのだ、というところが面白かった。そういうもんなんすかね。
SMOTEとかなんだとか、かっこいいリサンプリング法があるが、ああいうのはどうなんだろう。この論文では今後の課題として言及されていた。
論文:データ解析(2018-) - 読了:Japkowicz & Stepeh (2002) 機械学習におけるクラス不均衡問題について実験しました