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: