| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- import numpy as np
- import pytest
- from sklearn.utils._plotting import _interval_max_min_ratio, _validate_score_name
- def metric():
- pass # pragma: no cover
- def neg_metric():
- pass # pragma: no cover
- @pytest.mark.parametrize(
- "score_name, scoring, negate_score, expected_score_name",
- [
- ("accuracy", None, False, "accuracy"), # do not transform the name
- (None, "accuracy", False, "Accuracy"), # capitalize the name
- (None, "accuracy", True, "Negative accuracy"), # add "Negative"
- (None, "neg_mean_absolute_error", False, "Negative mean absolute error"),
- (None, "neg_mean_absolute_error", True, "Mean absolute error"), # remove "neg_"
- ("MAE", "neg_mean_absolute_error", True, "MAE"), # keep score_name
- (None, None, False, "Score"), # default name
- (None, None, True, "Negative score"), # default name but negated
- ("Some metric", metric, False, "Some metric"), # do not transform the name
- ("Some metric", metric, True, "Some metric"), # do not transform the name
- (None, metric, False, "Metric"), # default name
- (None, metric, True, "Negative metric"), # default name but negated
- ("Some metric", neg_metric, False, "Some metric"), # do not transform the name
- ("Some metric", neg_metric, True, "Some metric"), # do not transform the name
- (None, neg_metric, False, "Negative metric"), # default name
- (None, neg_metric, True, "Metric"), # default name but negated
- ],
- )
- def test_validate_score_name(score_name, scoring, negate_score, expected_score_name):
- """Check that we return the right score name."""
- assert (
- _validate_score_name(score_name, scoring, negate_score) == expected_score_name
- )
- # In the following test, we check the value of the max to min ratio
- # for parameter value intervals to check that using a decision threshold
- # of 5. is a good heuristic to decide between linear and log scales on
- # common ranges of parameter values.
- @pytest.mark.parametrize(
- "data, lower_bound, upper_bound",
- [
- # Such a range could be clearly displayed with either log scale or linear
- # scale.
- (np.geomspace(0.1, 1, 5), 5, 6),
- # Checking that the ratio is still positive on a negative log scale.
- (-np.geomspace(0.1, 1, 10), 7, 8),
- # Evenly spaced parameter values lead to a ratio of 1.
- (np.linspace(0, 1, 5), 0.9, 1.1),
- # This is not exactly spaced on a log scale but we will benefit from treating
- # it as such for visualization.
- ([1, 2, 5, 10, 20, 50], 20, 40),
- ],
- )
- def test_inverval_max_min_ratio(data, lower_bound, upper_bound):
- assert lower_bound < _interval_max_min_ratio(data) < upper_bound
|