Creating a threshold-coded ROC plot in Python
Look at this gist:
https://gist.github.com/podshumok/c1d1c9394335d86255b8
roc_data = sklearn.metrics.roc_curve(...)plot_roc(*roc_data, label_every=5)
import sklearn # for the roc curveimport matplotlib.pyplot as pltdef plot_roc(labels, predictions, positive_label, thresholds_every=10, title=''): # fp: false positive rates. tp: true positive rates fp, tp, thresholds = sklearn.metrics.roc_curve(labels, predictions, pos_label=positive_label) roc_auc = sklearn.metrics.auc(fp, tp) figure(figsize=(16, 16)) plt.plot(fp, tp, label='ROC curve (area = %0.2f)' % roc_auc, linewidth=2, color='darkorange') plt.plot([0, 1], [0, 1], color='navy', linestyle='--', linewidth=2) plt.xlabel('False positives rate') plt.ylabel('True positives rate') plt.xlim([-0.03, 1.0]) plt.ylim([0.0, 1.03]) plt.title(title) plt.legend(loc="lower right") plt.grid(True) # plot some thresholds thresholdsLength = len(thresholds) colorMap=plt.get_cmap('jet', thresholdsLength) for i in range(0, thresholdsLength, thresholds_every): threshold_value_with_max_four_decimals = str(thresholds[i])[:5] plt.text(fp[i] - 0.03, tp[i] + 0.005, threshold_value_with_max_four_decimals, fontdict={'size': 15}, color=colorMap(i/thresholdsLength)); plt.show()
Usage:
labels = [1, 1, 2, 2, 2, 3]predictions = [0.7, 0.99, 0.9, 0.3, 0.7, 0.01] # predictions/accuracy for class 1plot_roc(labels, predictions, positive_label=1, thresholds_every=1, title="ROC Curve - Class 1")
Result:plot result