I drew a precision recall curve using the sklearn precision_recall_curve and matplotlib . For those of you who are familiar with the exact recall curve, you know that some scientific communities only accept it when it is interpolated, similar to this example here . Now my question is, do any of you know how to interpolate in python? I have been looking for a solution for a while, but without success! Any help would be greatly appreciated.
Solution: Both solutions from @francis and @ali_m are correct and together solved my problem. So, assuming you get the result of the precision_recall_curve function in sklearn , here is what I did to plot the graph:
precision["micro"], recall["micro"], _ = precision_recall_curve(y_test.ravel(),scores.ravel()) pr = copy.deepcopy(precision[0]) rec = copy.deepcopy(recall[0]) prInv = np.fliplr([pr])[0] recInv = np.fliplr([rec])[0] j = rec.shape[0]-2 while j>=0: if prInv[j+1]>prInv[j]: prInv[j]=prInv[j+1] j=j-1 decreasing_max_precision = np.maximum.accumulate(prInv[::-1])[::-1] plt.plot(recInv, decreasing_max_precision, marker= markers[mcounter], label=methodNames[countOfMethods]+': AUC={0:0.2f}'.format(average_precision[0]))
And these lines will build the interpolated curves if you put them in a for loop and pass them the data of each method at each iteration. Please note that this will not lead to the construction of uninterpreted precision recall curves.
source share