From 7a01a5cc1f39bfd1f8a90c19a85aa896a86d21d7 Mon Sep 17 00:00:00 2001 From: Arnaud Joly Date: Mon, 2 Dec 2013 16:24:31 +0100 Subject: [PATCH 1/2] TST more corner case tests --- sklearn/metrics/tests/test_metrics.py | 31 +++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/sklearn/metrics/tests/test_metrics.py b/sklearn/metrics/tests/test_metrics.py index e65aa1a224d48..3ce0bdb5c0111 100644 --- a/sklearn/metrics/tests/test_metrics.py +++ b/sklearn/metrics/tests/test_metrics.py @@ -556,6 +556,21 @@ def test_roc_curve_toydata(): assert_array_almost_equal(fpr, [0, 1]) assert_almost_equal(roc_auc, .5) + y_true = [0, 0] + y_score = [0.25, 0.75] + tpr, fpr, _ = roc_curve(y_true, y_score) + assert_raises(ValueError, roc_auc_score, y_true, y_score) + assert_array_almost_equal(tpr, [ 0. , 0.5, 1. ]) + assert_array_almost_equal(fpr, [ np.nan, np.nan, np.nan]) + + y_true = [1, 1] + y_score = [0.25, 0.75] + tpr, fpr, _ = roc_curve(y_true, y_score) + assert_raises(ValueError, roc_auc_score, y_true, y_score) + assert_array_almost_equal(tpr, [ np.nan, np.nan]) + assert_array_almost_equal(fpr, [ 0.5, 1. ]) + + # Multi-label classification task y_true = np.array([[0, 1], [0, 1]]) y_score = np.array([[0, 1], [0, 1]]) @@ -1142,6 +1157,22 @@ def test_precision_recall_curve_toydata(): assert_array_almost_equal(r, [1, 0.]) assert_almost_equal(auc_prc, .75) + y_true = [0, 0] + y_score = [0.25, 0.75] + p, r, _ = precision_recall_curve(y_true, y_score) + + assert_raises(ValueError, average_precision_score, y_true, y_score) + assert_array_almost_equal(p, [0, 1]) + assert_array_almost_equal(r, [np.nan, 0.]) + + y_true = [1, 1] + y_score = [0.25, 0.75] + p, r, _ = precision_recall_curve(y_true, y_score) + assert_almost_equal(average_precision_score(y_true, y_score), 1.) + assert_array_almost_equal(p, [ 1. , 1., 1.]) + assert_array_almost_equal(r, [1, 0.5, 0.]) + + # Multi-label classification task y_true = np.array([[0, 1], [0, 1]]) y_score = np.array([[0, 1], [0, 1]]) From 848eab3f02ca434b7c9c4f17dc0d493771baf335 Mon Sep 17 00:00:00 2001 From: Arnaud Joly Date: Mon, 2 Dec 2013 17:07:46 +0100 Subject: [PATCH 2/2] TST ensure that exceptions are properly raised on np 1.3 --- sklearn/metrics/tests/test_metrics.py | 199 +++++++++++++------------- 1 file changed, 99 insertions(+), 100 deletions(-) diff --git a/sklearn/metrics/tests/test_metrics.py b/sklearn/metrics/tests/test_metrics.py index 3ce0bdb5c0111..d8428dcfea4f6 100644 --- a/sklearn/metrics/tests/test_metrics.py +++ b/sklearn/metrics/tests/test_metrics.py @@ -1116,107 +1116,106 @@ def test_precision_recall_curve_errors(): def test_precision_recall_curve_toydata(): - # Binary classification - y_true = [0, 1] - y_score = [0, 1] - p, r, _ = precision_recall_curve(y_true, y_score) - auc_prc = average_precision_score(y_true, y_score) - assert_array_almost_equal(p, [1, 1]) - assert_array_almost_equal(r, [1, 0]) - assert_almost_equal(auc_prc, 1.) - - y_true = [0, 1] - y_score = [1, 0] - p, r, _ = precision_recall_curve(y_true, y_score) - auc_prc = average_precision_score(y_true, y_score) - assert_array_almost_equal(p, [ 0.5, 0. , 1. ]) - assert_array_almost_equal(r, [ 1., 0., 0.]) - assert_almost_equal(auc_prc, 0.25) - - y_true = [1, 0] - y_score = [1, 1] - p, r, _ = precision_recall_curve(y_true, y_score) - auc_prc = average_precision_score(y_true, y_score) - assert_array_almost_equal(p, [0.5, 1]) - assert_array_almost_equal(r, [1., 0]) - assert_almost_equal(auc_prc, .75) - - y_true = [1, 0] - y_score = [1, 0] - p, r, _ = precision_recall_curve(y_true, y_score) - auc_prc = average_precision_score(y_true, y_score) - assert_array_almost_equal(p, [1, 1]) - assert_array_almost_equal(r, [1, 0]) - assert_almost_equal(auc_prc, 1.) - - y_true = [1, 0] - y_score = [0.5, 0.5] - p, r, _ = precision_recall_curve(y_true, y_score) - auc_prc = average_precision_score(y_true, y_score) - assert_array_almost_equal(p, [0.5, 1]) - assert_array_almost_equal(r, [1, 0.]) - assert_almost_equal(auc_prc, .75) - - y_true = [0, 0] - y_score = [0.25, 0.75] - p, r, _ = precision_recall_curve(y_true, y_score) - - assert_raises(ValueError, average_precision_score, y_true, y_score) - assert_array_almost_equal(p, [0, 1]) - assert_array_almost_equal(r, [np.nan, 0.]) + with np.errstate(all="raise"): + # Binary classification + y_true = [0, 1] + y_score = [0, 1] + p, r, _ = precision_recall_curve(y_true, y_score) + auc_prc = average_precision_score(y_true, y_score) + assert_array_almost_equal(p, [1, 1]) + assert_array_almost_equal(r, [1, 0]) + assert_almost_equal(auc_prc, 1.) + + y_true = [0, 1] + y_score = [1, 0] + p, r, _ = precision_recall_curve(y_true, y_score) + auc_prc = average_precision_score(y_true, y_score) + assert_array_almost_equal(p, [ 0.5, 0. , 1. ]) + assert_array_almost_equal(r, [ 1., 0., 0.]) + assert_almost_equal(auc_prc, 0.25) + + y_true = [1, 0] + y_score = [1, 1] + p, r, _ = precision_recall_curve(y_true, y_score) + auc_prc = average_precision_score(y_true, y_score) + assert_array_almost_equal(p, [0.5, 1]) + assert_array_almost_equal(r, [1., 0]) + assert_almost_equal(auc_prc, .75) + + y_true = [1, 0] + y_score = [1, 0] + p, r, _ = precision_recall_curve(y_true, y_score) + auc_prc = average_precision_score(y_true, y_score) + assert_array_almost_equal(p, [1, 1]) + assert_array_almost_equal(r, [1, 0]) + assert_almost_equal(auc_prc, 1.) + + y_true = [1, 0] + y_score = [0.5, 0.5] + p, r, _ = precision_recall_curve(y_true, y_score) + auc_prc = average_precision_score(y_true, y_score) + assert_array_almost_equal(p, [0.5, 1]) + assert_array_almost_equal(r, [1, 0.]) + assert_almost_equal(auc_prc, .75) + + y_true = [0, 0] + y_score = [0.25, 0.75] + assert_raises(Exception, precision_recall_curve, y_true, y_score) + assert_raises(Exception, average_precision_score, y_true, y_score) + + y_true = [1, 1] + y_score = [0.25, 0.75] + p, r, _ = precision_recall_curve(y_true, y_score) + assert_almost_equal(average_precision_score(y_true, y_score), 1.) + assert_array_almost_equal(p, [ 1. , 1., 1.]) + assert_array_almost_equal(r, [1, 0.5, 0.]) + + + # Multi-label classification task + y_true = np.array([[0, 1], [0, 1]]) + y_score = np.array([[0, 1], [0, 1]]) + assert_raises(Exception, average_precision_score, y_true, y_score, + average="macro") + assert_raises(Exception, average_precision_score, y_true, y_score, + average="weighted") + assert_almost_equal(average_precision_score(y_true, y_score, + average="samples"), 1.) + assert_almost_equal(average_precision_score(y_true, y_score, + average="micro"), 1.) + + y_true = np.array([[0, 1], [0, 1]]) + y_score = np.array([[0, 1], [1, 0]]) + assert_raises(Exception, average_precision_score, y_true, y_score, + average="macro") + assert_raises(Exception, average_precision_score, y_true, y_score, + average="weighted") + assert_almost_equal(average_precision_score(y_true, y_score, + average="samples"), 0.625) + assert_almost_equal(average_precision_score(y_true, y_score, + average="micro"), 0.625) + + y_true = np.array([[1, 0], [0, 1]]) + y_score = np.array([[0, 1], [1, 0]]) + assert_almost_equal(average_precision_score(y_true, y_score, + average="macro"), 0.25) + assert_almost_equal(average_precision_score(y_true, y_score, + average="weighted"), 0.25) + assert_almost_equal(average_precision_score(y_true, y_score, + average="samples"), 0.25) + assert_almost_equal(average_precision_score(y_true, y_score, + average="micro"), 0.25) + + y_true = np.array([[1, 0], [0, 1]]) + y_score = np.array([[0.5, 0.5], [0.5, 0.5]]) + assert_almost_equal(average_precision_score(y_true, y_score, + average="macro"), 0.75) + assert_almost_equal(average_precision_score(y_true, y_score, + average="weighted"), 0.75) + assert_almost_equal(average_precision_score(y_true, y_score, + average="samples"), 0.75) + assert_almost_equal(average_precision_score(y_true, y_score, + average="micro"), 0.75) - y_true = [1, 1] - y_score = [0.25, 0.75] - p, r, _ = precision_recall_curve(y_true, y_score) - assert_almost_equal(average_precision_score(y_true, y_score), 1.) - assert_array_almost_equal(p, [ 1. , 1., 1.]) - assert_array_almost_equal(r, [1, 0.5, 0.]) - - - # Multi-label classification task - y_true = np.array([[0, 1], [0, 1]]) - y_score = np.array([[0, 1], [0, 1]]) - assert_raises(ValueError, average_precision_score, y_true, y_score, - average="macro") - assert_raises(ValueError, average_precision_score, y_true, y_score, - average="weighted") - assert_almost_equal(average_precision_score(y_true, y_score, - average="samples"), 1.) - assert_almost_equal(average_precision_score(y_true, y_score, - average="micro"), 1.) - - y_true = np.array([[0, 1], [0, 1]]) - y_score = np.array([[0, 1], [1, 0]]) - assert_raises(ValueError, average_precision_score, y_true, y_score, - average="macro") - assert_raises(ValueError, average_precision_score, y_true, y_score, - average="weighted") - assert_almost_equal(average_precision_score(y_true, y_score, - average="samples"), 0.625) - assert_almost_equal(average_precision_score(y_true, y_score, - average="micro"), 0.625) - - y_true = np.array([[1, 0], [0, 1]]) - y_score = np.array([[0, 1], [1, 0]]) - assert_almost_equal(average_precision_score(y_true, y_score, - average="macro"), 0.25) - assert_almost_equal(average_precision_score(y_true, y_score, - average="weighted"), 0.25) - assert_almost_equal(average_precision_score(y_true, y_score, - average="samples"), 0.25) - assert_almost_equal(average_precision_score(y_true, y_score, - average="micro"), 0.25) - - y_true = np.array([[1, 0], [0, 1]]) - y_score = np.array([[0.5, 0.5], [0.5, 0.5]]) - assert_almost_equal(average_precision_score(y_true, y_score, - average="macro"), 0.75) - assert_almost_equal(average_precision_score(y_true, y_score, - average="weighted"), 0.75) - assert_almost_equal(average_precision_score(y_true, y_score, - average="samples"), 0.75) - assert_almost_equal(average_precision_score(y_true, y_score, - average="micro"), 0.75) def test_score_scale_invariance(): # Test that average_precision_score and roc_auc_score are invariant by