64 lines
2.7 KiB
Python
64 lines
2.7 KiB
Python
|
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
|