LoginSignup
6

More than 3 years have passed since last update.

出現頻度のまま学習データの比率にするのは得策ではない。

Last updated at Posted at 2019-07-03

機械学習のためにデータを収集して学習を実行する人のために、経験的な知見をメモしたいと思う。

機械学習に詳しくない人は、「データを片っ端から学習データに加えればうまくいくんだろう」と思っているかもしれない。

しかし、学習データに加える比率を調整したほうが学習がうまくいきやすい。

既に多くの人が指摘しているので、ここではそれらへのリンクを示すことで代用したい。

アンバランスなデータ

アンバランスなデータの場合、損失関数の定義の中で影響してしまう。

それは、学習が損失関数の定義の中で、trainデータの集合が重要になってくるからです。

例:SVM の損失関数の定義 サポートベクターマシン

損失関数の紹介

アンバランスなサンプルの損失関数への影響

仮にポジティブサンプルが1%、ネガティブサンプルが99%のデータセットで、なんの工夫もなしに学習すると無意味な学習結果になってしまいます。
全てに対してFalseを返せば、なんと99%の精度で当てたことになります。
でも、それってほしいものじゃないね。

ですから、学習データの頻度を自分の問題に適するように考えて調整してください。

世の中には、既に有用な記事を書いてくださっている方々がいます。

例:

不均衡データのクラス分類
https://www.slideshare.net/sfchaos/ss-11307051


追記(2020.12.01)
sklearn.svm.SVC
には class_weight という引数にbalancedという値を与えることで、その問題を解決することができます。

class_weight dict or ‘balanced’, default=None
Set the parameter C of class i to class_weight[i]*C for SVC. If not given, all classes are supposed to have weight one. The “balanced” mode uses the values of y to automatically adjust weights inversely proportional to class frequencies in the input data as n_samples / (n_classes * np.bincount(y))

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6