Code covered by the BSD License  

Highlights from
Precision-Recall and ROC Curves

4.6

4.6 | 5 ratings Rate this file 110 Downloads (last 30 days) File Size: 4.14 KB File ID: #21528
image thumbnail

Precision-Recall and ROC Curves

by Stefan Schroedl

 

23 Sep 2008 (Updated 17 Mar 2010)

Calculate and plot P/R and ROC curves for binary classification tasks.

| Watch this File

File Information
Description

Consider a binary classification task, and a real-valued predictor, where higher values denote more confidence that an instance is positive. By setting a fixed threshold on the output, we can trade-off recall (=true positive rate) versus false positive rate (resp. precision).

Depending on the relative class frequencies, ROC and P/R curves can highlight different properties; for details, see e.g., Davis & Goadrich, 'The Relationship Between Precision-Recall and ROC Curves', ICML 2006.

MATLAB release MATLAB 7.4 (R2007a)
Tags for This File  
Everyone's Tags
Tags I've Applied
Add New Tags Please login to tag files.
Comments and Ratings (17)
12 Oct 2008 David Chiang

Thanks a lot!

08 Dec 2008 Xian Chen

good. thanks a lot.
one question: which algorithm have you used to calculate? bayes? SVM?

18 Dec 2008 Stefan Schroedl

The prediction itself is not part of this function, it only evaluates the output taken from an exteral predictor.

17 Apr 2009 Farooq Azam

Very useful code. Thanks.
But I have two questions/comments:
   - what is the role of 'count'? an example would help.
   - how one would calculate the area under the curve?

Thanks

03 Nov 2009 Skynet

It seems that perfcurve does this now.

17 Mar 2010 Stefan Schroedl

Farooq,
I just uploaded a new version with better option descriptions, hope that makes it more usable.
- 'count' (now called 'instanceCount') can be used if there are multiple instances with the same score. This would denote the number of instances, and 'target' the number of positive class members among those.
- area under the curve can be computed more efficiently with my 'auroc' submission.
Thanks!

17 Mar 2010 Ashiwn Kumar

Hi Stefan ,
can u provide the link for the new version that u have uploaded.

Can i use baseyian classifier in this code??

Pls reply,so that i can complete my project

Thanks in advance

17 Mar 2010 Stefan Schroedl

Hi Ashwin,
the link is the same as the old one.
you can use any classifier to produce the scores, the script is independent of that.

04 May 2010 zeehasham rasheed

Hey Stefan
I am using a binary classifier and want to ask you few questions

Can you tell me whats inside "prec" variable as it displays two rows. Is the first row is precision and second row is recall ?

What is "thresh" variable?

Also can you briefly explain prec/recall graph.

Your code is really helpful. Good Work !

07 May 2010 Stefan Schroedl

Hi Zeehasham,

precision-recall curves are useful for classifiers that output a score (e.g., the higher, the more likely to be in the positive class) - if the classifier only gives you a class label, you won't get a graph, only a single precision/recall point.

Given such a classifier, for any threshold ("thresh"), you can assign examples as positive if the score exceeds it, otherwise as negative. So, for each threshold, the return values of the procedure give the corresponding precision ("prec"), true-positive rate ("tpr"), and false-positive ("fpr") rate, in that order.

Hope that helps, good luck!

08 Oct 2010 Vladislavs

It seems that your function requires statistics toolbox. There is a function "quantile" which is found only in the statistics toolbox. It would be nice to use alternative or a free equivalent. Thanks for a function!

04 Nov 2010 Segun Oshin

Hi,

I am trying to obtain the Area Under the Precision-Recall curve. In a previous answer, you stated that your separately submitted aucroc.m would be able to estimate this, but this appears to only measure the area under ROC Curves. Since Precision-Recall curves are different, how can I determine the area under them from an AUROC? Or are you aware of any other methods of measure the Area under P-R curves?

Kind regards

24 Nov 2010 krishna

i have 1 32x32 matrix in which classify the 32 clas ,all diagonal element shows correct classification while off diagonal element shows misclassification,how can i use this file for plotting precision and recall plot
krishna singh
singhkrishna5@gmail.com

30 Nov 2010 Chris

Hi, I am interested in computing the F1-score for a precision-recall curve. The equation to do this is (2*precision*recall)/(precision+recall).

The outputs "prec" (precision) and "tpr" (recall), however, are vectors. So, if we take (precision' * recall) / (precision + recall), we will end up with a vector.

Shouldn't the F1-score be a scalar ranging from 0 to 1? Thanks for your help.

Warm Regards

25 Jan 2011 Salha

Very helpful. Thanks!

05 Jul 2011 Saurabh Baghel

this code is intended for only binary classification tasks. what abt multiclass classification

30 Dec 2011 Ahmed  
Please login to add a comment or rating.
Updates
17 Mar 2010

Update for better user interface, added options

17 Mar 2010

Updated function arguments, added options

Tag Activity for this File
Tag Applied By Date/Time
statistics Stefan Schroedl 22 Oct 2008 10:20:59
precisionrecall curve Stefan Schroedl 22 Oct 2008 10:20:59
receiver operating Stefan Schroedl 22 Oct 2008 10:20:59
roc curve Stefan Schroedl 22 Oct 2008 10:20:59
precision recall curve Stefan Schroedl 12 Jan 2010 13:22:36
classification Stefan Schroedl 17 Mar 2010 12:31:53
precision recall curve Badri Subudhi 14 Jan 2011 10:32:51
precisionrecall curve Caio 16 Aug 2011 10:10:23
classification Juan 01 Oct 2011 14:11:16
precision recall curve Juan 01 Oct 2011 14:11:18

Contact us at files@mathworks.com