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.
Ótima resposta acima. Aqui está minha maneira intuitiva de pensar sobre isso. Imagine que você tem um monte de bolas vermelhas = positivas e amarelas = negativas e as joga aleatoriamente em um balde = fração positiva. Então, se você tiver o mesmo número de bolas vermelhas e amarelas, ao calcular PREC = tp / tp + fp = 100/100 + 100 do seu balde vermelho (positivo) = amarelo (negativo), portanto, PREC = 0,5. No entanto, se eu tivesse 1000 bolas vermelhas e 100 bolas amarelas, no balde esperaria aleatoriamente PREC = tp / tp + fp = 1000/1000 + 100 = 0,91 porque essa é a linha de base da chance na fração positiva que também é RP / RP + RN, onde RP = real positivo e RN = real negativo.
fonte