Help us understand the problem. What is going on with this article?

sklearnにおけるSVMのpredict_probaとdecision_functionについて

More than 1 year has passed since last update.

この記事はどんな記事?

2値分類を解くための学習器としてSVMを使う方法が一般に考えられます.
このときに(一般的な)SVMは基本的には 分類のみ を行います.しかし,たとえばモデルの精度をROC-AUCなどで評価したいときはなんらかの形でスコアを計算しなければなりません.
sklearnではSVMを用いてスコアを計算する方法を以下の2種類提供しています.

  • decision_function
  • predict_proba(predict_log_proba)

この記事ではこの2つの方法の違いを説明します.
結論だけいえば基本的に decision_function を使用して,0~1にスケールされたスコアが欲しい場合のみ predict_proba を使用するのがいいかと思われます.

decision_function

はじめに decision_function について説明します.
これは特にオプションを指定することなく使用可能なメソッドで,引数で与えられたベクトル X の分離超平面からの符号付き距離を返します.
しかしSVMではヒンジ損失を用いて学習しているため,超平面から遠ければ遠いほど確信度があがるというのは個人的にすこし疑問に思うところもあります.

predict_proba

つぎに predict_probapredict_log_proba )についてです.
そもそも predict_proba メソッドを用いるときには,コンストラクタの指定で probability=True を指定する必要があることに注意してください.
これはPlatt Scalingと呼ばれる手法で decision_function で得られる符号付き距離 $f_x$ に対して,

Pr(y=1|x) \sim \frac{1}{1+exp(Af_x + B)}

といったように確率のようなスコアに落とし込みます.
定数の $A,B$ の決定は $y_+, y_-$ という変数変換をした上で $F$ を最大化します.

y_+ = \frac{N_+ + 1}{N_+ + 2} \\
y_- = \frac{1}{N_-+2} \\
F = \sum y_ilogp_i + (1-y_i) log (1 - p_i)

sklearnのデフォルトでは5fold cross-validationで $A,B$ を決定するようです.当然これはコストのかかる計算で計算時間を要します.極端に小さいデータに対してはあまり意味がないとも書かれています.
さらにこのPlatt Scalingには理論的な欠点があるらしく,あまり推奨されていないようです(公式ドキュメントより).

参考文献

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away