Tính toán AUPR theo R [đã đóng]


14

Có thể dễ dàng tìm thấy một khu vực tính toán gói theo ROC, nhưng có một gói tính diện tích theo đường cong thu hồi chính xác không?


ROCR , pROC - thực sự tốt đẹp!
Vladimir Chupakhin

Họ chắc chắn là vậy, nhưng AFAIK cũng không thể tính diện tích theo đường cong thu hồi chính xác.

Câu trả lời:


13

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 = fgkhi 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:

Đường cong ROC với AUC

Đường cong PR với AUC

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ì ).


Xin vui lòng tham khảo tài liệu PRROC được liên kết trong câu trả lời ở trên.
arun

2

Một chút googling trả về một gói bioc, qpgraph ( qpPrecisionRecall) và một gói cran, minet ( auc.pr). Tôi không có kinh nghiệm với họ, mặc dù. Cả hai đã được nghĩ ra để đối phó với các mạng lưới sinh học.


Bộ khai thác này trông đẹp, nhưng nó cần có một số bộ chuyển đổi bên ngoài để tạo đầu vào phù hợp từ dữ liệu chung :-(

2

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 qpPrecisionRecallcung 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ó.


1
Không phải đường cong PR yêu cầu một số tích hợp lạ mắt hơn sao? Xem: mnd.ly/oWQQw1

1

AUPRC()là một hàm trong PerfMeasgói tốt hơn nhiều so với pr.curve()hàm trong PRROCgó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. PerfMeasmất vài giây so sánh. PRROCđược viết bằng R và PerfMeasđược viết bằng C.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.