«Кривая базовой линии» на графике кривой PR представляет собой горизонтальную линию с высотой, равной количеству положительных примеров по общему количеству обучающих данных N , т.е. доля положительных примеров в наших данных ( PPN )PN
Хорошо, почему это так? Давайте предположим , что у нас есть «нездоровый классификатор» . С J возвращает случайную вероятность р я к я -ая выборка , например у я , чтобы быть в классе А . Для удобства, скажем , р я ~ U [ 0 , 1 ] . Прямое следствие этого случайного назначения класса состоит в том, что C J будет иметь (ожидаемую) точность, равную доле положительных примеров в наших данных. Это только естественно; любая абсолютно случайная выборка наших данных будет иметь ECJCJpiiyiApi∼U[0,1]CJправильно классифицированных примеров. Это будет справедливо для любого порогового значения вероятностицмы могли бы использоватькачестве границы решения для вероятностей членов классавозвращаемыхCJ. (qобозначает значение в[0,1],где значения вероятности, большие или равныеq, классифицируются в классеA.) С другой стороны, характеристика отзываCJ(в ожидании) равнаq,еслиpi∼U[0,1]. На любом заданном порогеE{PN}qCJq[0,1]qACJqpi∼U[0,1] мы выберем (приблизительно) ( 100 ( 1 - q ) ) % наших общих данных, которые впоследствии будут содержать (приблизительно) ( 100 ( 1 - q ) ) % от общего числа экземпляров класса A в выборке. Отсюда и горизонтальная линия, о которой мы упоминали в начале! Для каждого значения отзыва (значения x на графике PR) соответствующее значение точности (значения y на графике PR) равно Pq(100(1−q))%(100(1−q))%Axy .PN
Быстрое боковое Примечание: Порог является не обычно равно 1 минус ожидаемого отзыв. Это происходит в случае C J, упомянутого выше, только из-за случайного равномерного распределения результатов C J ; для другого распределения (например, p i ∼ B ( 2 , 5 ) ) это приближенное отношение тождества между q и отзывом не выполняется; U [ 0 , 1 ] был использован потому, что его проще всего понять и мысленно визуализировать. Для другого случайного распределения в [ 0qCJCJpi∼B(2,5)qU[0,1] профиль PR C J не изменится. Изменится только размещение значений PR для данныхзначений q .[0,1]CJq
Теперь, что касается идеального классификатора , можно было бы указать классификатор, который возвращает вероятность 1 для экземпляра y i выборки класса A, если y i действительно находится в классе A, и дополнительно C P возвращает вероятность 0, если y i не является членом класса. . Это подразумевает, что для любого порога q мы будем иметь точность 100 % (т.е. в терминах графа мы получим линию, начинающуюся с точностью 100 % ). Единственный момент мы не получаем 100CP1yiAyiACP0yiAq100%100% точности при q = 0 . При q = 0 точность падает до доли положительных примеров в наших данных ( P100%q=0q=0 )как (душевнобольно?) Классифицировать даже точки с0вероятностью того классаАкак в классеА. График PRCPимеет только два возможных значения для его точности,1иPPN0AACP1 .PN
ОК и немного кода R, чтобы увидеть это на собственном опыте с примером, где положительные значения соответствуют нашей выборки. Обратите внимание , что мы делаем «мягкое» присвоение класса категории в том смысле , что значение вероятности , связанное с каждой точкой квантифицирует для нашей уверенности в том , что эта точке принадлежит классу А .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);
где черные круги и треугольники обозначают и q = 0,20 соответственно на первых двух графиках. Мы сразу видим, что классификаторы «мусора» быстро идут с точностью, равной Pq=0.50q=0.20 ; Точно так же идеальный классификатор имеет точность1для всех переменных отзыва. Неудивительно, что AUCPR для классификатора «мусор» равен доле положительного примера в нашей выборке (≈0,40), а AUCPR для «идеального классификатора» примерно равен1.PN1≈0.401
Реально PR-граф идеального классификатора немного бесполезен, потому что никогда не может иметь отзывов (мы никогда не предсказываем только отрицательный класс); мы просто начинаем рисовать линию из верхнего левого угла, как условно. Строго говоря, он должен показывать только две точки, но это приведет к ужасной кривой. : D0
Для справки, в CV уже есть очень хороший ответ относительно полезности кривых PR: здесь , здесь и здесь . Просто внимательно прочитав их, вы получите хорошее общее представление о кривых PR.
Great answer above. Here is my intuitive way of thinking about it. Imagine you have a bunch of balls red = positive and yellow = negative, and you throw them randomly into a bucket = positive fraction. Then if you have the same number of red and yellow balls, when you calculate PREC=tp/tp+fp=100/100+100 from your bucket red (positive) = yellow (negative), therefore, PREC=0.5. However, if I had 1000 red balls and 100 yellow balls, then in the bucket I would randomly expect PREC=tp/tp+fp=1000/1000+100=0.91 because that is the chance baseline in the positive fraction which is also RP/RP+RN, where RP = real positive and RN = real negative.
источник