PR曲線プロットの「ベースライン曲線」は、トレーニングデータの総数Nに対する正の例数に等しい高さの水平線です。我々のデータの正例の割合(PPN)。PN
OK、なぜそうなのですか?「ジャンク分類子」があると仮定しましょう。C Jは、クラスAにあるi番目のサンプルインスタンスy iにランダムな確率p iを返します。便宜上、言うP I〜U [ 0 、1 ]。このランダムなクラス割り当ての直接的な意味は、C Jが、データ内の肯定的な例の割合に等しい(予想される)精度を持つことです。それは自然なことです。データの完全にランダムなサブサンプルには{CJCJpiiyiApi∼U[0,1]CJ正しく分類された例。これは、CJによって返されるクラスメンバーシップの確率の決定境界として使用する可能性のあるすべての確率しきい値qに当てはまります。(q(およそ)選択します(E{PN}qCJの値を示し、[ 0 、1 ]の確率値が大きいか等しい場合、Qクラスに分類されている A。)一方のリコールパフォーマンス C Jが(期待に)であるが等しい Q場合 P I〜U [ 0 、1 ]。所定のしきい値でq[0,1]qACJqpi∼U[0,1]q、その後(約)含まれています私たちの全データのうち(100 (1 - Q ))%クラスのインスタンスの総数の Aサンプル中に。したがって、最初に述べた水平線です!すべてのリコール値(PRグラフの x値)に対して、対応する精度値(PRグラフの y値)は Pに等しい(100(1−q))%(100(1−q))%Axy。PN
簡単な補足説明:しきい値は通常、1から予想されるリコールを差し引いた値に等しくありません。これは、qためだけのランダムな一様分布の上記 C Jの結果。異なるディストリビューションのための(例えば、P I〜B (2 、5 ))との間に、このおおよそのアイデンティティ関係のqと成り立たないリコール。Uは[ 0 、1 ]、それが理解し精神的に可視化することが最も容易であるために使用しました。[ 0の異なるランダム分布の場合CJCJpi∼B(2,5)qU[0,1]C Jの PRプロファイルは変更されません。指定された q値に対するPR値の配置のみが変更されます。[0,1]CJq
ここで完全な分類器に関して、y iが実際にクラスAにある場合、クラスAのサンプルインスタンスy iに確率1を返し、さらにy iがクラスのメンバーではない場合、C Pは確率0を返しますA。これは、任意のしきい値qに対して100 %の精度があることを意味します(つまり、グラフ用語では精度100 %で始まる線が得られます)。100を得られない唯一のポイントCP1yiAyiACP0yiAq100%100%100%精度はです。以下のために、Q = 0、精度は、我々のデータにおける正例の割合(まで降下Pq=0q=0)私たちがしても、ポイントを分類(めちゃくちゃ?)として0クラスのある確率AクラスであるとしてA。CPのPRグラフには、精度として1とPの2つの値しかありません。PN0AACP1。PN
OKといくつかのRコードは、正の値がサンプルのに対応する例を使用して、これを直接確認します。各ポイントに関連付けられた確率値が、このポイントがクラスAであるという確信を定量化するという意味で、クラスカテゴリの「ソフト割り当て」を行うことに注意してください。40%A
rm(list= ls())
library(PRROC)
N = 40000
set.seed(444)
propOfPos = 0.40
trueLabels = rbinom(N,1,propOfPos)
randomProbsB = rbeta(n = N, 2, 5)
randomProbsU = runif(n = N)
# Junk classifier with beta distribution random results
pr1B <- pr.curve(scores.class0 = randomProbsB[trueLabels == 1],
scores.class1 = randomProbsB[trueLabels == 0], curve = TRUE)
# Junk classifier with uniformly distribution random results
pr1U <- pr.curve(scores.class0 = randomProbsU[trueLabels == 1],
scores.class1 = randomProbsU[trueLabels == 0], curve = TRUE)
# Perfect classifier with prob. 1 for positives and prob. 0 for negatives.
pr2 <- pr.curve(scores.class0 = rep(1, times= N*propOfPos),
scores.class1 = rep(0, times = N*(1-propOfPos)), curve = TRUE)
par(mfrow=c(1,3))
plot(pr1U, main ='"Junk" classifier (Unif(0,1))', auc.main= FALSE,
legend=FALSE, col='red', panel.first= grid(), cex.main = 1.5);
pcord = pr1U$curve[ which.min( abs(pr1U$curve[,3]- 0.50)),c(1,2)];
points( pcord[1], pcord[2], col='black', cex= 2, pch = 1)
pcord = pr1U$curve[ which.min( abs(pr1U$curve[,3]- 0.20)),c(1,2)];
points( pcord[1], pcord[2], col='black', cex= 2, pch = 17)
plot(pr1B, main ='"Junk" classifier (Beta(2,5))', auc.main= FALSE,
legend=FALSE, col='red', panel.first= grid(), cex.main = 1.5);
pcord = pr1B$curve[ which.min( abs(pr1B$curve[,3]- 0.50)),c(1,2)];
points( pcord[1], pcord[2], col='black', cex= 2, pch = 1)
pcord = pr1B$curve[ which.min( abs(pr1B$curve[,3]- 0.20)),c(1,2)];
points( pcord[1], pcord[2], col='black', cex= 2, pch = 17)
plot(pr2, main = '"Perfect" classifier', auc.main= FALSE,
legend=FALSE, col='red', panel.first= grid(), cex.main = 1.5);
ここで、最初の2つのプロットでは、黒丸と三角形はそれぞれとq = 0.20を示しています。「ジャンク」分類子がすぐにPに等しい精度になることがすぐにわかります。q=0.50q=0.20 ; 同様に、完全分類器はすべてのリコール変数で精度1を持ちます。当然のことながら、「ジャンク」分類器のためのAUCPRは、我々のサンプル中の正例の割合(に等しい≈0.40)と「完璧な分類器」のAUCPRは、にほぼ等しい1。PN1≈0.401
現実的には、完全な分類器のPRグラフは、リコールをすることはできないため、少し役に立ちません(ネガティブクラスのみを予測することはありません)。慣例として左上隅から線のプロットを開始します。厳密に言えば、それは2つのポイントを示すだけですが、これは恐ろしい曲線になります。:D0
記録のために、PR曲線の有用性に関して、CVには既にいくつかの非常に良い答えがあります:here、here、here。それらを注意深く読むだけで、PR曲線に関する一般的な理解が得られるはずです。