La "courbe de base" dans un tracé de courbe PR est une ligne horizontale avec une hauteur égale au nombre d'exemples positifs P sur le nombre total de données d'entraînement N , c'est-à-dire. la proportion d'exemples positifs dans nos données ( PN ).
OK, pourquoi est-ce le cas? Supposons que nous avons un « classificateur junk » . C J renvoie une aléatoire probabilité p i de la i instance de l' échantillon -ième y i à être en classe A . Par commodité, disons p i ∼ U [ 0 , 1 ] . L'implication directe de cette affectation de classe aléatoire est que C J aura une précision (attendue) égale à la proportion d'exemples positifs dans nos données. Ce n'est que naturel; tout sous-échantillon totalement aléatoire de nos données aura ECJCJpjejeyjeUNEpje∼ U[ 0 , 1 ]CJexemples correctement classés. Ce sera vrai pour un seuil probabilitéqnous pourrions utiliser comme une limite de décision pour les probabilités d'appartenance àclasse retournées parCJ. (qdésigne une valeur dans[0,1]où les valeurs de probabilité supérieures ou égales àqsont classées dans la classeA.) Par contre, la performance de rappel deCJest (en attente) égale àqsipi∼U[0,1]. À n'importe quel seuil donnéE{ PN}qCJq[ 0 , 1 ]qUNECJqpje∼ U[ 0 , 1 ] nous choisirons (environ) ( 100 ( 1 - q ) ) % de nos données totales qui contiendront par la suite (environ) ( 100 ( 1 - q ) ) % du nombre total d'instances de classe A dans l'échantillon. D'où la ligne horizontale que nous avons mentionnée au début! Pour chaque valeur de rappel (valeurs x dans le graphique PR), la valeur de précision correspondante (valeurs y dans le graphique PR) est égale à Pq( 100 ( 1 - q) ) %( 100 ( 1 - q) ) %UNEXy .PN
Petite note: le seuil n'est généralement pas égal à 1 moins le rappel attendu. Cela se produit dans le cas d'un C J mentionné ci-dessus uniquement en raison de la distribution uniforme aléatoire des résultats de C J ; pour une distribution différente (p. ex. p i ∼ B ( 2 , 5 ) ), cette relation d'identité approximative entre q et rappel ne tient pas; U [ 0 , 1 ] a été utilisé car il est le plus facile à comprendre et à visualiser mentalement. Pour une distribution aléatoire différente dans [ 0qCJCJpje∼ B ( 2 , 5 )qU[ 0 , 1 ] le profil PR de C J ne changera pas cependant. Seul le placement des valeurs PR pour desvaleurs q données changera.[ 0 , 1 ]CJq
En ce qui concerne un classificateur parfait , on voudrait dire un classificateur qui renvoie la probabilité 1 pour échantillonner l'instance y i étant de classe A si y i est en effet dans la classe A et en plus C P renvoie la probabilité 0 si y i n'est pas membre de la classe A . Cela implique que pour tout seuil q, nous aurons une précision de 100 % (c'est-à-dire qu'en termes de graphique, nous obtenons une ligne commençant à une précision de 100 % ). Le seul point que nous n'obtenons pas 100CP1yiAyiACP0yiAq100%100% précision en % est à q = 0 . Pour q = 0 , la précision tombe à la proportion d'exemples positifs dans nos données ( P100%q=0q=0 ) comme (insensément?) Nous classonspoints même avec0probabilité d'être de classeAcomme étant en classeA. Le graphe PR deCPn'a que deux valeurs possibles pour sa précision,1etPPN0AACP1 .PN
OK et du code R pour voir cela de première main avec un exemple où les valeurs positives correspondent à de notre échantillon. Notez que nous faisons une « affectation douce » de la catégorie de classe dans le sens où la valeur de probabilité associée à chaque point quantifie à notre confiance que ce point est de classe 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);
où les cercles noirs et les triangles indiquent et q = 0,20 respectivement dans les deux premiers graphiques. On voit tout de suite que les classificateurs "junk" vont rapidement à une précision égale à Pq=0.50q=0.20 ; de même, le classificateur parfait a la précision1pour toutes les variables de rappel. Sans surprise, l'ASCPR pour le classificateur "indésirable" est égal à la proportion d'exemples positifs dans notre échantillon (≈0,40) et l'ASCPR pour le "classificateur parfait" est approximativement égal à1.PN1≈0.401
De façon réaliste, le graphe PR d'un classifieur parfait est un peu inutile car on ne peut jamais avoir rappel (on ne prévoit jamais que la classe négative); nous commençons juste à tracer la ligne à partir du coin supérieur gauche par convention. À strictement parler, il ne devrait montrer que deux points, mais cela ferait une courbe horrible. :RÉ0
Pour mémoire, il y a déjà eu de très bonnes réponses en CV concernant l'utilité des courbes PR: ici , ici et ici . Le simple fait de les lire attentivement devrait offrir une bonne compréhension générale des courbes PR.
Grande réponse ci-dessus. Voici ma façon intuitive d'y penser. Imaginez que vous avez un tas de boules rouge = positif et jaune = négatif, et vous les jetez au hasard dans un seau = fraction positive. Ensuite, si vous avez le même nombre de boules rouges et jaunes, lorsque vous calculez PREC = tp / tp + fp = 100/100 + 100 à partir de votre seau rouge (positif) = jaune (négatif), donc, PREC = 0,5. Cependant, si j'avais 1000 boules rouges et 100 boules jaunes, alors dans le seau, je m'attendrais au hasard à PREC = tp / tp + fp = 1000/1000 + 100 = 0,91 car c'est la base de chance dans la fraction positive qui est également RP / RP + RN, où RP = réel positif et RN = réel négatif.
la source