def test_pandas_confusion_get(self): y_true = ['rabbit', 'cat', 'rabbit', 'rabbit', 'cat', 'dog', 'dog', 'rabbit', 'rabbit', 'cat', 'dog', 'rabbit'] y_pred = ['cat', 'cat', 'rabbit', 'dog', 'cat', 'rabbit', 'dog', 'cat', 'rabbit', 'cat', 'rabbit', 'rabbit'] print("y_true: %s" % y_true) print("y_pred: %s" % y_pred) cm = ConfusionMatrix(y_true, y_pred) assert isinstance(cm, pdml.confusion_matrix.LabeledConfusionMatrix) assert cm.get("cat") == cm.get("cat", "cat") assert cm.get("cat") == 3 assert cm.get("dog") == 1 assert cm.get("rabbit") == 3 assert cm.get("dog", "rabbit") == 2
def test_pandas_confusion_cm_stats_animals(self): y_true = ['rabbit', 'cat', 'rabbit', 'rabbit', 'cat', 'dog', 'dog', 'rabbit', 'rabbit', 'cat', 'dog', 'rabbit'] y_pred = ['cat', 'cat', 'rabbit', 'dog', 'cat', 'rabbit', 'dog', 'cat', 'rabbit', 'cat', 'rabbit', 'rabbit'] print("y_true: %s" % y_true) print("y_pred: %s" % y_pred) cm = ConfusionMatrix(y_true, y_pred) assert isinstance(cm, pdml.confusion_matrix.LabeledConfusionMatrix) assert isinstance(cm.stats(), OrderedDict) assert cm.population == len(y_true) # 12 cm.print_stats() cm_stats = cm.stats() # noqa assert cm.binarize("cat").TP == cm.get("cat") # cm.get("cat", "cat") assert cm.binarize("cat").TP == 3 assert cm.binarize("dog").TP == cm.get("dog") # 1 assert cm.binarize("rabbit").TP == cm.get("rabbit") # 3
def print_confusion_matrix(gold_id_labels, sys_id_labels): gold_ids = gold_id_labels.keys() gold_labels = [gold_id_labels[i] for i in gold_ids] sys_labels = [sys_id_labels.get(i, 'unknown') for i in gold_ids] c = ConfusionMatrix(gold_labels, sys_labels) print('Confusion matrix:\n{0}'.format(c)) true_positives = c.get('yes', 'yes') + c.get('no', 'no') true_negatives = c.get('unknown', 'unknown') false_positives = c.get('unknown', 'yes') + c.get('unknown', 'no') + c.get( 'no', 'yes') + c.get('yes', 'no') false_negatives = c.get('yes', 'unknown') + c.get('no', 'unknown') print('Precision : {0:.4f}'.format( float(true_positives) / (true_positives + false_positives))) print('Recall : {0:.4f}'.format( float(true_positives) / (true_positives + false_negatives))) print('True positives : {0}'.format(true_positives)) print('True negatives : {0}'.format(true_negatives)) print('False positives: {0}'.format(false_positives)) print('False negatives: {0}'.format(false_negatives))