diff --git a/doc/whats_new/upcoming_changes/sklearn.neural_network/24788.fix.rst b/doc/whats_new/upcoming_changes/sklearn.neural_network/24788.fix.rst new file mode 100644 index 0000000000000..ea67942daec59 --- /dev/null +++ b/doc/whats_new/upcoming_changes/sklearn.neural_network/24788.fix.rst @@ -0,0 +1,3 @@ +:class:`neural_network.MLPRegressor` now raises an informative error when +`early_stopping` is set and the computed validation set is too small. +By :user:`David Shumway `. diff --git a/sklearn/neural_network/_multilayer_perceptron.py b/sklearn/neural_network/_multilayer_perceptron.py index 51ff4176a0524..d18f873e8a0db 100644 --- a/sklearn/neural_network/_multilayer_perceptron.py +++ b/sklearn/neural_network/_multilayer_perceptron.py @@ -668,6 +668,12 @@ def _fit_stochastic( test_size=self.validation_fraction, stratify=stratify, ) + if X_val.shape[0] < 2: + raise ValueError( + "The validation set is too small. Increase 'validation_fraction' " + "or the size of your dataset." + ) + if is_classifier(self): y_val = self._label_binarizer.inverse_transform(y_val) else: diff --git a/sklearn/neural_network/tests/test_mlp.py b/sklearn/neural_network/tests/test_mlp.py index f788426ad60d2..417d15b0f6cf2 100644 --- a/sklearn/neural_network/tests/test_mlp.py +++ b/sklearn/neural_network/tests/test_mlp.py @@ -1084,3 +1084,11 @@ def test_mlp_vs_poisson_glm_equivalent(global_random_seed): random_state=np.random.RandomState(global_random_seed + 1), ).fit(X, y) assert not np.allclose(mlp.predict(X), glm.predict(X), rtol=1e-4) + + +def test_minimum_input_sample_size(): + """Check error message when the validation set is too small.""" + X, y = make_regression(n_samples=2, n_features=5, random_state=0) + model = MLPRegressor(early_stopping=True, random_state=0) + with pytest.raises(ValueError, match="The validation set is too small"): + model.fit(X, y)