diff --git a/sklearn/metrics/regression.py b/sklearn/metrics/regression.py index e4af5b292183f..de8c9fcaac10d 100644 --- a/sklearn/metrics/regression.py +++ b/sklearn/metrics/regression.py @@ -88,9 +88,15 @@ def _check_reg_targets(y_true, y_pred, multioutput): "({0}!={1})".format(y_true.shape[1], y_pred.shape[1])) n_outputs = y_true.shape[1] - multioutput_options = (None, 'raw_values', 'uniform_average', - 'variance_weighted') - if multioutput not in multioutput_options: + allowed_multioutput_str = ('raw_values', 'uniform_average', + 'variance_weighted') + if isinstance(multioutput, string_types): + if multioutput not in allowed_multioutput_str: + raise ValueError("Allowed 'multioutput' string values are {}. " + "You provided multioutput={!r}".format( + allowed_multioutput_str, + multioutput)) + elif multioutput is not None: multioutput = check_array(multioutput, ensure_2d=False) if n_outputs == 1: raise ValueError("Custom weights are useful only in " @@ -505,7 +511,8 @@ def r2_score(y_true, y_pred, 0.948... >>> y_true = [[0.5, 1], [-1, 1], [7, -6]] >>> y_pred = [[0, 2], [-1, 2], [8, -5]] - >>> r2_score(y_true, y_pred, multioutput='variance_weighted') # doctest: +ELLIPSIS + >>> r2_score(y_true, y_pred, multioutput='variance_weighted') + ... # doctest: +ELLIPSIS 0.938... >>> y_true = [1,2,3] >>> y_pred = [1,2,3] diff --git a/sklearn/metrics/tests/test_regression.py b/sklearn/metrics/tests/test_regression.py index bb842caca47df..d2a01a6d5ae1e 100644 --- a/sklearn/metrics/tests/test_regression.py +++ b/sklearn/metrics/tests/test_regression.py @@ -93,6 +93,18 @@ def test__check_reg_targets(): assert_raises(ValueError, _check_reg_targets, y1, y2, None) +def test__check_reg_targets_exception(): + invalid_multioutput = 'this_value_is_not_valid' + expected_message = ("Allowed 'multioutput' string values are.+" + "You provided multioutput={!r}".format( + invalid_multioutput)) + assert_raises_regex(ValueError, expected_message, + _check_reg_targets, + [1, 2, 3], + [[1], [2], [3]], + invalid_multioutput) + + def test_regression_multioutput_array(): y_true = [[1, 2], [2.5, -1], [4.5, 3], [5, 7]] y_pred = [[1, 1], [2, -1], [5, 4], [5, 6.5]]