読者です 読者をやめる 読者になる 読者になる

Precision/Recallのいずれかを重視したい場合にどのように事例を追加するか

機械学習

当たり前の話かもしれないけど、自分は経験したことがなかったのでメモがてら書いてみる。絶対これで行けるというわけではないと思うが、ある程度一般性はあるんじゃないかと。

状況設定

機械学習の評価を考える際に複数の指標がトレードオフの関係にあるというのはよくある話だと思う(例えばPrecisionとRecallの関係)。どれも上がるのは理想的には望ましいが、どちらかというとこれを重視したいというのがあるとしよう。例えばこんな状況。

  • 検索フィルタリング(検索結果に残る側が正例)
    • ユーザーの目に触れるところはちゃんとしたものを出したい。候補となるアイテムは大量にあるので、true negative(誤って負例に分類してしまう)はある程度許容できる。よって、Precisionを特に重視したい
  • Spam判定(spam側が正例)
    • 後段で人手チェックが入るので、ある程度false positive(誤って正例に分類してしまう)は許容できる。漏れがあると嫌なので、Recallを特に重視したい

F値が若干下がることは許容できて、Precision/Recallのバランスを自分が望む状況に倒したいのがやりたいこと。

Precisionを重視したい場合

特にfalse positiveを抑制したい。この場合、事例を見ながら悪影響を及ぼさない範囲で負例を重点的に追加していくと、false positiveを抑制できると考えられる。悪影響を完全に除くことは困難なので、true negativeの事例が若干増えて

  • Precisionは上がる
  • Recallは下がる

という状況が作れる。ある種のソフトなブラックリスト方式と捉えることができる。

Recallを重視したい場合

特にtrue negativeを抑制したい。この場合、さっきと逆で正例を増やしていくと正例側でactiveになる特徴量が増えるので、true negativeになる事例を抑えやすくなると考えられる。よって

  • Recallは上がる
  • Precisionは上がる

という状況が作れる。

考察

特徴量の観点

NLPのような特徴量が高次元スパースなデータの場合、学習事例を増やすというよりも特徴量次元が追加される効果のほうが大きいのかもしれない。10000次元あった特徴量がデータを追加することで重みが正しく修正されるというより、10000次元では捉えられなかった特徴量がデータを追加し15000次元になると捉えられるようになる、といったイメージ。正例/負例のみを追加するので、正例/負例のどちらかでのみactiveになる特徴量が多い、ということだと理解した。

validationデータとの正例負例のバランスの不整合

validationデータはいじらず、trainingデータのみ正例/負例を追加する、ということになるので、データセット間で正例負例のバランスが変わるという状況が起こる。これを解決するために足りていない側のover samplingを行なうことはできるが、それによってより考慮したい評価値が下がるということが考えられるので、over samplingを行なうのが一概によいとは言えなさそうだ。

能動学習

自分が知らないだけで、能動学習(Active Learning)でいい解決方法があるかもしれない。

追記。やってみました。

www.yasuhisay.info

感想

研究やっているときはデータセットはfixされた状況が多かったので、「Precision/Recallのバランスを調整する = ハイパーパラメータの調整/閾値の調整/特徴量の調整」と思い込んでいたけど、データセットがfixされていない(自分でアノテーションして追加できる)という状況だと他にも色々やりようがあるなという学びがあった。

パターン認識と機械学習 上

パターン認識と機械学習 上

  • 作者: C.M.ビショップ,元田浩,栗田多喜夫,樋口知之,松本裕治,村田昇
  • 出版社/メーカー: 丸善出版
  • 発売日: 2012/04/05
  • メディア: 単行本(ソフトカバー)
  • 購入: 6人 クリック: 33回
  • この商品を含むブログ (18件) を見る