"Крива базової лінії" на графіку кривої PR - це горизонтальна лінія з висотою, що дорівнює кількості позитивних прикладів за загальною кількістю даних тренувань N , тобто. частка позитивних прикладів у наших даних ( PПN ).ПN
Гаразд, чому це так? Давайте припустимо , що у нас є «нездоровий класифікатор» . З J повертає випадкову ймовірність р я до я -а вибірка , наприклад у я , щоб бути в класі А . Для зручності скажіть p i ∼ U [ 0 , 1 ] . Пряме значення цього випадкового призначення класу полягає в тому, що C J матиме (очікувану) точність, рівну частці позитивних прикладів у наших даних. Це лише природно; будь-яка абсолютно випадкова під вибірка наших даних матиме EСJСJpiiуiАpi∼ U[ 0 , 1 ]СJправильно класифіковані приклади. Це буде справедливо для будь-якого порогового значення ймовірностіцми могли б використовуватиякості кордону рішення для ймовірностей членів класущо повертаютьсяCJ. (qпозначає значення в[0,1],де значення ймовірності більше або рівніqкласифікуються в класА.) З іншого боку, ефективність відкликанняCJ(в очікуванні) дорівнюєq,якщоpi∼U[0,1]. При будь-якому заданому порозіЕ{ PN}qСJq[ 0 , 1 ]qАСJqpi∼ U[ 0 , 1 ] ми виберемо (приблизно) ( 100 ( 1 - q ) ) % від загальної кількості даних, які згодом будуть містити (приблизно) ( 100 ( 1 - q ) ) % від загальної кількості екземплярів класу A у вибірці. Звідси горизонтальна лінія, яку ми згадували на початку! Для кожного значення виклику (значення x у графіку PR) відповідне значення точності (значення y у графі PR) дорівнює Pq( 100 ( 1 - q)) ) %( 100 ( 1 - q)) ) %Ахy .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 я не є членом класу . Це означає, що для будь-якого порогу q ми матимемо 100 % точність (тобто у графі-термінах ми отримуємо лінію, що починається з точності 100 % ). Єдиний момент у нас не виходить 100CP1yiAyiACP0yiAq100%100% точності при q = 0 . Для q = 0 точність падає на частку позитивних прикладів у наших даних ( P100%q=0q=0 )як (душевнохворих?) Класифікувати навіть точки з0ймовірністю того класуАяк в класіА. PRграфікCPмає тільки два можливих значення для її точності,1іРPN0AACP1 .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.20PN1≈0.401
0
Для запису, в резюме вже є дуже хороша відповідь щодо корисності кривих PR: тут , тут і тут . Просто уважне читання їх повинно дати хороше загальне розуміння кривих PR.