how to compute true/false positives and true/false negatives in python for binary classification problems

Here’s how to compute true positives, false positives, true negatives, and false negatives in Python using the Numpy library.

Note that we are assuming a binary classification problem here. That is a value of 1 indicates a positive class, and a value of 0 indicates a negative class. For multi-class problems, this doesn’t really hold.


So let’s start by setting up an example scenario where we predicted 7 binary (0 or 1) labels, and are given the true binary labels.

# Use the numpy library.
import numpy as np
 
# These are the labels we predicted.
pred_labels = np.asarray([0,1,1,0,1,0,0])
print 'pred labels:\t\t', pred_labels
 
# These are the true labels.
true_labels = np.asarray([0,0,1,0,0,1,0])
print 'true labels:\t\t', true_labels
pred labels:		[0 1 1 0 1 0 0]
true labels:		[0 0 1 0 0 1 0]

Here’s the quick way to compute true/false positives and true/false negatives. Basically we will,

  • find the predicted and true labels that are assigned to some specific class
  • use the “AND” operator to combine the results into a single binary vector
  • sum over the binary vector to count how many incidences there are
# True Positive (TP): we predict a label of 1 (positive), and the true label is 1.
TP = np.sum(np.logical_and(pred_labels == 1, true_labels == 1))
 
# True Negative (TN): we predict a label of 0 (negative), and the true label is 0.
TN = np.sum(np.logical_and(pred_labels == 0, true_labels == 0))
 
# False Positive (FP): we predict a label of 1 (positive), but the true label is 0.
FP = np.sum(np.logical_and(pred_labels == 1, true_labels == 0))
 
# False Negative (FN): we predict a label of 0 (negative), but the true label is 1.
FN = np.sum(np.logical_and(pred_labels == 0, true_labels == 1))
 
print 'TP: %i, FP: %i, TN: %i, FN: %i' % (TP,FP,TN,FN)
TP: 1, FP: 2, TN: 3, FN: 1

There you go! If you want a more detailed explanation, I wrote a much longer example using a Jupyter notebook you can look at here:

https://github.com/jeremykawahara/tutorials/blob/master/how_to_compute_true_false_positivies_and_true_false_negatives.ipynb