Menghitung AUPR dalam R [ditutup]

14

Mudah untuk menemukan area penghitungan paket di bawah ROC, tetapi apakah ada paket yang menghitung area di bawah kurva presisi-recall?


sumber
ROCR , pROC - sangat bagus!
Vladimir Chupakhin
Tentu saja, namun AFAIK tidak dapat menghitung area di bawah kurva presisi-recall.

Jawaban:

13

Per Juli 2016, paket PRROC bekerja sangat baik untuk menghitung ROC AUC dan PR AUC.

Dengan asumsi Anda sudah memiliki vektor probabilitas (disebut probs) yang dihitung dengan model Anda dan label kelas yang sebenarnya ada dalam bingkai data Anda karena df$label(0 dan 1) kode ini harus berfungsi:

install.packages("PRROC")

require(PRROC)
fg <- probs[df$label == 1]
bg <- probs[df$label == 0]

# ROC Curve    
roc <- roc.curve(scores.class0 = fg, scores.class1 = bg, curve = T)
plot(roc)

# PR Curve
pr <- pr.curve(scores.class0 = fg, scores.class1 = bg, curve = T)
plot(pr)

PS: Satu-satunya hal yang membingungkan adalah Anda gunakan scores.class0 = fgkapanfg dihitung untuk label 1 dan bukan 0.

Berikut adalah contoh kurva ROC dan PR dengan area di bawahnya:

Kurva ROC dengan AUC

Kurva PR dengan AUC

Batangan di sebelah kanan adalah probabilitas ambang di mana titik pada kurva diperoleh.

Perhatikan bahwa untuk classifier acak, ROC AUC akan mendekati 0,5 terlepas dari ketidakseimbangan kelas. Namun, PR AUC itu rumit (lihat Apa itu "garis dasar" dalam kurva recall presisi ).

arun
sumber
Silakan merujuk ke dokumentasi PRROC yang ditautkan dalam jawaban di atas.
arun
2

Sedikit googling mengembalikan satu paket bioc, qpgraph ( qpPrecisionRecall), dan satu cran, minet ( auc.pr). Saya tidak punya pengalaman dengan mereka. Keduanya dirancang untuk menangani jaringan biologis.

chl
sumber
Minet ini terlihat bagus, tetapi perlu memiliki beberapa adaptor eksternal untuk membuat input yang sesuai dari data umum :-(
2

Setelah Anda mendapatkan kurva recall presisi qpPrecisionRecall, misalnya:

pr <- qpPrecisionRecall(measurements, goldstandard)

Anda dapat menghitung AUC dengan melakukan ini:

f <- approxfun(pr[, 1:2])
auc <- integrate(f, 0, 1)$value

halaman bantuan qpPrecisionRecallmemberi Anda detail tentang struktur data apa yang diharapkan dalam argumennya.

robertc
sumber
1
Bukankah kurva PR membutuhkan integrasi yang lebih mewah? Lihat: mnd.ly/oWQQw1
1

AUPRC()adalah fungsi dalam PerfMeaspaket yang jauh lebih baik daripada pr.curve()fungsi dalam PRROCpaket ketika data sangat besar. pr.curve()adalah mimpi buruk dan membutuhkan waktu lama untuk diselesaikan ketika Anda memiliki vektor dengan jutaan entri. PerfMeasDibutuhkan detik sebagai perbandingan. PRROCditulis dalam R dan PerfMeasditulis dalam C.

jasoncolts
sumber