Câu trả lời:
Kể từ tháng 7 năm 2016, gói PRROC hoạt động tuyệt vời để tính toán cả ROC AUC và PR AUC.
Giả sử bạn đã có một vectơ xác suất (được gọi probs
) được tính toán với mô hình của bạn và các nhãn lớp thực sự nằm trong khung dữ liệu của bạn vì df$label
(0 và 1) mã này sẽ hoạt động:
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: Điều đáng lo ngại duy nhất là bạn sử dụng scores.class0 = fg
khi fg
được tính cho nhãn 1 chứ không phải 0.
Dưới đây là ví dụ về các đường cong ROC và PR với các khu vực bên dưới chúng:
Các thanh bên phải là xác suất ngưỡng mà tại đó một điểm trên đường cong được lấy.
Lưu ý rằng đối với một trình phân loại ngẫu nhiên, ROC AUC sẽ gần bằng 0,5 bất kể sự mất cân bằng của lớp. Tuy nhiên, PR AUC là khó khăn (xem "đường cơ sở" trong đường cong thu hồi chính xác là gì ).
Khi bạn đã có đường cong thu hồi chính xác từ qpPrecisionRecall
, ví dụ:
pr <- qpPrecisionRecall(measurements, goldstandard)
bạn có thể tính AUC của nó bằng cách làm điều này:
f <- approxfun(pr[, 1:2])
auc <- integrate(f, 0, 1)$value
trang trợ giúp qpPrecisionRecall
cung cấp cho bạn chi tiết về cấu trúc dữ liệu mong đợi trong các đối số của nó.
AUPRC()
là một hàm trong PerfMeas
gói tốt hơn nhiều so với pr.curve()
hàm trong PRROC
gói khi dữ liệu rất lớn.
pr.curve()
là một cơn ác mộng và mất mãi mãi để kết thúc khi bạn có vectơ với hàng triệu mục. PerfMeas
mất vài giây so sánh. PRROC
được viết bằng R và PerfMeas
được viết bằng C.