From 2e754b7ae302e318cef5e1894c90cf9b931678b8 Mon Sep 17 00:00:00 2001 From: ashah002 <97778401+ashah002@users.noreply.github.com> Date: Mon, 16 Jan 2023 22:31:14 -0500 Subject: [PATCH 1/6] Added parameters validation for d2_pinball_score --- sklearn/metrics/_regression.py | 16 ++++++++++++++-- sklearn/tests/test_public_functions.py | 1 + 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/sklearn/metrics/_regression.py b/sklearn/metrics/_regression.py index 5259dfd34eb62..3f9333d4945b1 100644 --- a/sklearn/metrics/_regression.py +++ b/sklearn/metrics/_regression.py @@ -1296,6 +1296,18 @@ def d2_tweedie_score(y_true, y_pred, *, sample_weight=None, power=0): return 1 - numerator / denominator +@validate_params( + { + "y_true": ["array-like"], + "y_pred": ["array-like"], + "sample_weight": ["array-like", None], + "alpha": [Interval(Real, 0, None, closed="left")], + "multioutput": [ + StrOptions({"raw_values", "uniform_average", "variance_weighted"}), + "array-like", + ], + } +) def d2_pinball_score( y_true, y_pred, *, sample_weight=None, alpha=0.5, multioutput="uniform_average" ): @@ -1327,8 +1339,8 @@ def d2_pinball_score( for which the pinball deviance and also D2 are optimal. The default `alpha=0.5` is equivalent to `d2_absolute_error_score`. - multioutput : {'raw_values', 'uniform_average'} or array-like of shape \ - (n_outputs,), default='uniform_average' + multioutput : {'raw_values', 'uniform_average', 'variance_weighted'} or array-like \ + of shape (n_outputs,), default='uniform_average' Defines aggregating of multiple output values. Array-like value defines weights used to average scores. diff --git a/sklearn/tests/test_public_functions.py b/sklearn/tests/test_public_functions.py index 9c5f01c8e9f2b..0bfbe4ee0a248 100644 --- a/sklearn/tests/test_public_functions.py +++ b/sklearn/tests/test_public_functions.py @@ -114,6 +114,7 @@ def _check_function_param_validation( "sklearn.metrics.cluster.contingency_matrix", "sklearn.metrics.cohen_kappa_score", "sklearn.metrics.confusion_matrix", + "sklearn.metrics.d2_pinball_score", "sklearn.metrics.det_curve", "sklearn.metrics.mean_absolute_error", "sklearn.metrics.mean_squared_error", From afa3998a25c27b680c62a9ce9ec4b3895d3f23ec Mon Sep 17 00:00:00 2001 From: ashah002 <97778401+ashah002@users.noreply.github.com> Date: Tue, 17 Jan 2023 19:25:16 -0500 Subject: [PATCH 2/6] Update sklearn/metrics/_regression.py Co-authored-by: Guillaume Lemaitre --- sklearn/metrics/_regression.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sklearn/metrics/_regression.py b/sklearn/metrics/_regression.py index 3f9333d4945b1..f3f4c6afcb876 100644 --- a/sklearn/metrics/_regression.py +++ b/sklearn/metrics/_regression.py @@ -1301,7 +1301,7 @@ def d2_tweedie_score(y_true, y_pred, *, sample_weight=None, power=0): "y_true": ["array-like"], "y_pred": ["array-like"], "sample_weight": ["array-like", None], - "alpha": [Interval(Real, 0, None, closed="left")], + "alpha": [Interval(Real, 0, 1, closed="both")], "multioutput": [ StrOptions({"raw_values", "uniform_average", "variance_weighted"}), "array-like", From 1fa026df6b1aa548bc065201b9ed7ef431096e72 Mon Sep 17 00:00:00 2001 From: ashah002 <97778401+ashah002@users.noreply.github.com> Date: Fri, 20 Jan 2023 20:06:37 -0500 Subject: [PATCH 3/6] Update sklearn/metrics/_regression.py Co-authored-by: Guillaume Lemaitre --- sklearn/metrics/_regression.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sklearn/metrics/_regression.py b/sklearn/metrics/_regression.py index f3f4c6afcb876..7fb5624420985 100644 --- a/sklearn/metrics/_regression.py +++ b/sklearn/metrics/_regression.py @@ -1339,7 +1339,7 @@ def d2_pinball_score( for which the pinball deviance and also D2 are optimal. The default `alpha=0.5` is equivalent to `d2_absolute_error_score`. - multioutput : {'raw_values', 'uniform_average', 'variance_weighted'} or array-like \ + multioutput : {'raw_values', 'uniform_average'} or array-like \ of shape (n_outputs,), default='uniform_average' Defines aggregating of multiple output values. Array-like value defines weights used to average scores. From 8b5f02f35c46e0942f398e1c5f13f51f177b36e2 Mon Sep 17 00:00:00 2001 From: ashah002 <97778401+ashah002@users.noreply.github.com> Date: Fri, 20 Jan 2023 20:06:47 -0500 Subject: [PATCH 4/6] Update sklearn/metrics/_regression.py Co-authored-by: Guillaume Lemaitre --- sklearn/metrics/_regression.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sklearn/metrics/_regression.py b/sklearn/metrics/_regression.py index 7fb5624420985..36bd5654c2f97 100644 --- a/sklearn/metrics/_regression.py +++ b/sklearn/metrics/_regression.py @@ -1303,7 +1303,7 @@ def d2_tweedie_score(y_true, y_pred, *, sample_weight=None, power=0): "sample_weight": ["array-like", None], "alpha": [Interval(Real, 0, 1, closed="both")], "multioutput": [ - StrOptions({"raw_values", "uniform_average", "variance_weighted"}), + StrOptions({"raw_values", "uniform_average"}), "array-like", ], } From b3267305ade24b8644582a8bfbe3c457b368e3e5 Mon Sep 17 00:00:00 2001 From: Guillaume Lemaitre Date: Mon, 23 Jan 2023 18:16:49 +0100 Subject: [PATCH 5/6] MAINT remove unecessary check --- sklearn/metrics/_regression.py | 12 +++--------- sklearn/metrics/tests/test_regression.py | 3 --- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/sklearn/metrics/_regression.py b/sklearn/metrics/_regression.py index 661e0eaa693e0..f6ed135bb330d 100644 --- a/sklearn/metrics/_regression.py +++ b/sklearn/metrics/_regression.py @@ -1347,8 +1347,8 @@ def d2_pinball_score( for which the pinball deviance and also D2 are optimal. The default `alpha=0.5` is equivalent to `d2_absolute_error_score`. - multioutput : {'raw_values', 'uniform_average'} or array-like \ - of shape (n_outputs,), default='uniform_average' + multioutput : {'raw_values', 'uniform_average'} or array-like of shape \ + (n_outputs,), default='uniform_average' Defines aggregating of multiple output values. Array-like value defines weights used to average scores. @@ -1446,15 +1446,9 @@ def d2_pinball_score( if multioutput == "raw_values": # return scores individually return output_scores - elif multioutput == "uniform_average": + else: # multioutput == "uniform_average" # passing None as weights to np.average results in uniform mean avg_weights = None - else: - raise ValueError( - "multioutput is expected to be 'raw_values' " - "or 'uniform_average' but we got %r" - " instead." % multioutput - ) else: avg_weights = multioutput diff --git a/sklearn/metrics/tests/test_regression.py b/sklearn/metrics/tests/test_regression.py index 9da59e0764394..241a9ba4f2855 100644 --- a/sklearn/metrics/tests/test_regression.py +++ b/sklearn/metrics/tests/test_regression.py @@ -351,9 +351,6 @@ def test_regression_multioutput_array(): with pytest.raises(ValueError, match=err_msg): mean_pinball_loss(y_true, y_pred, multioutput="variance_weighted") - with pytest.raises(ValueError, match=err_msg): - d2_pinball_score(y_true, y_pred, multioutput="variance_weighted") - pbl = mean_pinball_loss(y_true, y_pred, multioutput="raw_values") mape = mean_absolute_percentage_error(y_true, y_pred, multioutput="raw_values") r = r2_score(y_true, y_pred, multioutput="raw_values") From eb423cab7dcbc1fa11b63cd91c48454c96935ccc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20du=20Boisberranger?= <34657725+jeremiedbb@users.noreply.github.com> Date: Tue, 7 Feb 2023 14:51:48 +0100 Subject: [PATCH 6/6] Update _regression.py --- sklearn/metrics/_regression.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sklearn/metrics/_regression.py b/sklearn/metrics/_regression.py index f6ed135bb330d..fc8ccaac82c62 100644 --- a/sklearn/metrics/_regression.py +++ b/sklearn/metrics/_regression.py @@ -1339,7 +1339,7 @@ def d2_pinball_score( y_pred : array-like of shape (n_samples,) or (n_samples, n_outputs) Estimated target values. - sample_weight : array-like of shape (n_samples,), optional + sample_weight : array-like of shape (n_samples,), default=None Sample weights. alpha : float, default=0.5