moxt

Just another Blog site

imbalanced-learnで不均衡データをアンダーサンプリングしてみる

   

https://github.com/scikit-learn-contrib/imbalanced-learn

↑ドキュメントを読めば終わり。

雑談

最近、scikit-learnをちょくちょく触ってる。
めっちゃ便利だよね。

テストデータいじって予想したりするのに飽きたので「この本は興味ありそうか否か」っていうテキストの二値分類に取り組んでいる。
本のデータをクローリングして「興味なし」は0、「興味あり」は1として各本データにラベル付ける。(一番しんどい)

ラベル付けしてから気がついたのだが、興味ありが圧倒的に少ない。
割合としては80%くらいが興味なし。
データがめっちゃ偏ってる。

これで学習させてpredictしてみると…
結果が全て「興味なし」となってしまった
ほとんどが0のデータで学習させたらそうなるわなw

こういう偏ったデータを「不均衡データ」というらしい。

この不均衡データを使うと何が問題なのかってのがよく分かってない。
均等データで学習した場合と比較すると精度が悪くなる、みたいなことは書いてる。
なんとなく偏ったデータで学習すると過学習状態になるのかなって感想。

とりあえずpredictで全部0になってるのを見ると、学習してない感(してるよ)あって萎えるので、手元の不均衡データをイイカンジにする方法を調べてみた。

↑これ見たら終わり。

なるほどですね。
偏ってるデータを取り除く(今回の場合だったら「興味なし」な本のデータだね)アンダーサンプリングってのが圧倒的に理解しやすいので、これをやってみようという気概になった。

手で間引くのメンドイし、なんかイイカンジな実装がscikit-learnにあるだろ、と思って調べたけど見つけられなくてアレだった
とはいえ自分で実装するのは絶対にイヤなので、五万年くらいググり続けた。
そしたらimbalanced-learnと出会った。

使ってみる

インストール

condaでもインストールできるっぽいよ。

こんな感じ

リサンプリングできてる

 - 機械学習

336px




336px




  • このエントリーをはてなブックマークに追加
  • follow us in feedly

  関連記事