A "curva de linha de base" em um gráfico de curva PR é uma linha horizontal com altura igual ao número de exemplos positivos sobre o número total de dados de treinamento N , ou seja. a proporção de exemplos positivos em nossos dados ( PPN )PN
OK, por que esse é o caso? Vamos supor que temos um "classificador lixo" . C J retorna um aleatória probabilidade p i para o i -simo exemplo amostra de y i para a classe A . Por conveniência, diga p i ∼CJCJpiiyiA . A implicação direta dessa atribuição de classe aleatória é que C J terá (esperado) de precisão igual à proporção de exemplos positivos em nossos dados. É apenas natural; qualquer subamostra totalmente aleatória de nossos dados terá Epi∼U[0,1]CJexemplos classificados corretamente. Isso vai ser verdade para qualquer probabilidade limiarqpodemos usar como uma fronteira de decisão para as probabilidades de associação de classe retornados porCJ. (qdenota um valor em[0,1]onde valores de probabilidade maiores ou iguais aqsão classificados na classeA.) Por outro lado, o desempenho de recuperação deCJé (na expectativa) igual aqseE{PN}qCJq[0,1]qACJq . Em qualquer limitepi∼U[0,1] escolheremos (aproximadamente) ( 100 ( 1 - q ) ) % de nossos dados totais que subsequentemente conterão (aproximadamente) ( 100 ( 1 - q ) ) % do número total de instâncias da classe A na amostra. Daí a linha horizontal que mencionamos no começo! Para cada valor de rechamada (valores x no gráfico PR), o valor de precisão correspondente (valores y no gráfico PR) é igual a Pq(100(1−q))%(100(1−q))%Axy .PN
Uma observação rápida: o limite geralmente não é igual a 1 menos a recuperação esperada. Isto acontece no caso de um C J mencionado acima só por causa da distribuição uniforme aleatória de C J resultados 's; para uma distribuição diferente (por exemplo, p i ∼ B ( 2 , 5 ) ) essa relação aproximada de identidade entre q , 1 ]qCJCJpi∼B(2,5)q e recall não se mantém; foi utilizado porque é o mais fácil de entender e visualizar mentalmente. Para uma distribuição aleatória diferente em [ 0U[0,1][0,1] o perfil PR de não irá mudar no entanto. Apenas a colocação dos valores PR para q valores determinados será alterada.CJq
Agora, em relação a um classificador perfeito , um classificador que retorna a probabilidade 1 para a instância de amostra e eu é da classe A se y i está realmente na classe A e adicionalmente C P retorna a probabilidade 0 se y i não for um membro da classe Um . Isso implica que, para qualquer limite q , teremos 100 % de precisão (ou seja, em termos de gráfico, obteremos uma linha começando com precisão de 100 % ). O único ponto em que não temos 100CP1yiAyiACP0yiAq100%100% precisão está em q = 0 . Para q = 0 , a precisão cai para a proporção de exemplos positivos em nossos dados ( P100%q=0q=0 ) como (insanamente?) Classificamos mesmo pontos com0probabilidade de ser de classeAcomo sendo de classeA. O gráfico PR deCPpossui apenas dois valores possíveis para sua precisão,1ePPN0AACP1 .PN
OK e algum código R para ver isso em primeira mão com um exemplo em que os valores positivos correspondem a da nossa amostra. Note que fazer um "soft-atribuição" da categoria de classe no sentido de que o valor da probabilidade associada a cada ponto quantifica a nossa confiança de que esse ponto é 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);
onde os círculos e triângulos pretos indicam e q = 0,20 respectivamente nas duas primeiras parcelas. Vimos imediatamente que os classificadores "lixo" rapidamente atingem uma precisão igual a Pq=0.50q=0.20 ; da mesma forma, o classificador perfeito tem precisão1em todas as variáveis de recall. Sem surpresa, a AUCPR para o classificador "lixo" é igual à proporção de exemplo positivo em nossa amostra (≈0,40) e a AUCPR para o "classificador perfeito" é aproximadamente igual a1.PN1≈0.401
Realisticamente, o gráfico PR de um classificador perfeito é um pouco inútil, porque nunca se pode ter recall (nunca previmos apenas a classe negativa); nós apenas começamos a traçar a linha do canto superior esquerdo por uma questão de convenção. A rigor, deve mostrar apenas dois pontos, mas isso faria uma curva horrível. : D0
Para constar, já há uma resposta muito boa no CV em relação à utilidade das curvas de RP: aqui , aqui e aqui . Apenas a leitura cuidadosa deles deve oferecer uma boa compreensão geral das curvas de RP.