diff --git a/sklearn/grid_search.py b/sklearn/grid_search.py index 7539dc8a33a6c..202327574ee76 100644 --- a/sklearn/grid_search.py +++ b/sklearn/grid_search.py @@ -326,17 +326,18 @@ def _check_param_grid(param_grid): param_grid = [param_grid] for p in param_grid: - for v in p.values(): + for name, v in p.items(): if isinstance(v, np.ndarray) and v.ndim > 1: raise ValueError("Parameter array should be one-dimensional.") check = [isinstance(v, k) for k in (list, tuple, np.ndarray)] if True not in check: - raise ValueError("Parameter values should be a list.") + raise ValueError("Parameter values for parameter ({0}) need " + "to be a sequence.".format(name)) if len(v) == 0: - raise ValueError("Parameter values should be a non-empty " - "list.") + raise ValueError("Parameter values for parameter ({0}) need " + "to be a non-empty sequence.".format(name)) class _CVScoreTuple (namedtuple('_CVScoreTuple', diff --git a/sklearn/model_selection/_search.py b/sklearn/model_selection/_search.py index df0f721d109db..d433ca15b823d 100644 --- a/sklearn/model_selection/_search.py +++ b/sklearn/model_selection/_search.py @@ -327,17 +327,18 @@ def _check_param_grid(param_grid): param_grid = [param_grid] for p in param_grid: - for v in p.values(): + for name, v in p.items(): if isinstance(v, np.ndarray) and v.ndim > 1: raise ValueError("Parameter array should be one-dimensional.") check = [isinstance(v, k) for k in (list, tuple, np.ndarray)] if True not in check: - raise ValueError("Parameter values should be a list.") + raise ValueError("Parameter values for parameter ({0}) need " + "to be a sequence.".format(name)) if len(v) == 0: - raise ValueError("Parameter values should be a non-empty " - "list.") + raise ValueError("Parameter values for parameter ({0}) need " + "to be a non-empty sequence.".format(name)) # XXX Remove in 0.20 diff --git a/sklearn/model_selection/tests/test_search.py b/sklearn/model_selection/tests/test_search.py index 75e0d5f71cb40..6bb5752e85262 100644 --- a/sklearn/model_selection/tests/test_search.py +++ b/sklearn/model_selection/tests/test_search.py @@ -165,6 +165,22 @@ def test_grid_search(): assert_raises(ValueError, grid_search.fit, X, y) +def test_grid_search_incorrect_param_grid(): + clf = MockClassifier() + assert_raise_message( + ValueError, + "Parameter values for parameter (C) need to be a sequence.", + GridSearchCV, clf, {'C': 1}) + + +def test_grid_search_param_grid_includes_sequence_of_a_zero_length(): + clf = MockClassifier() + assert_raise_message( + ValueError, + "Parameter values for parameter (C) need to be a non-empty sequence.", + GridSearchCV, clf, {'C': []}) + + @ignore_warnings def test_grid_search_no_score(): # Test grid-search on classifier that has no score function.