cross_validate with multiple scorers sets ALL results to nan after just one has errored

### Describe the bug

I'm supplying `cross_validate` with `scoring = (
    "r2",
    "neg_median_absolute_error",
    "neg_mean_absolute_error",
    "neg_mean_absolute_percentage_error",
    "neg_mean_squared_log_error",
    "neg_root_mean_squared_error",
)`. On my task, regressor (catboost) sometimes predicts negative values, and **neg_mean_squared_log_error** naturally fails. But I would expect it to only set score **test_neg_mean_squared_log_error** to nan, not all the other scorers.

```
C:\ProgramData\Anaconda3\lib\site-packages\sklearn\model_selection\_validation.py:770: UserWarning: Scoring failed. The score on this train-test partition for these parameters will be set to nan. Details: 
Traceback (most recent call last):
  File "C:\ProgramData\Anaconda3\lib\site-packages\sklearn\model_selection\_validation.py", line 761, in _score
    scores = scorer(estimator, X_test, y_test)
  File "C:\ProgramData\Anaconda3\lib\site-packages\sklearn\metrics\_scorer.py", line 103, in __call__
    score = scorer._score(cached_call, estimator, *args, **kwargs)
  File "C:\ProgramData\Anaconda3\lib\site-packages\sklearn\metrics\_scorer.py", line 264, in _score
    return self._sign * self._score_func(y_true, y_pred, **self._kwargs)
  File "C:\ProgramData\Anaconda3\lib\site-packages\sklearn\metrics\_regression.py", line 521, in mean_squared_log_error
    raise ValueError(
ValueError: Mean Squared Logarithmic Error cannot be used when targets contain negative values.
```
        
Returned data:

`{'fit_time': array([ 506.16688704,  925.39604568, 1419.59854436]), 'score_time': array([65.71544576, 66.45759201, 66.12629318]), 'test_r2': array([nan, nan, nan]), 'test_neg_median_absolute_error': array([nan, nan, nan]), 'test_neg_mean_absolute_error': array([nan, nan, nan]), 'test_neg_mean_absolute_percentage_error': array([nan, nan, nan]), 'test_neg_mean_squared_log_error': array([nan, nan, nan]), 'test_neg_root_mean_squared_error': array([nan, nan, nan])`}

**Is this expected? Can it be fixed? There should be no reason to hurt other scorers, therefore drawing potentially expensive computations totally useless, right?**

### Steps/Code to Reproduce

```python
from sklearn import linear_model, datasets
from sklearn.model_selection import cross_validate

X, y = datasets.make_regression(
    n_samples=100,
    n_features=2,
    n_informative=1,
    noise=10,
    random_state=0,
)

cross_validate(linear_model.LinearRegression(), X,y,scoring = (
"r2",
"neg_median_absolute_error",
"neg_mean_absolute_error",
"neg_mean_absolute_percentage_error",
"neg_mean_squared_log_error",
"neg_root_mean_squared_error",
))
```

### Expected Results

{'fit_time': array([0.0010004 , 0.0010004 , 0.00100017, 0.0009985 , 0.00094748]),
 'score_time': array([0.00199986, 0.002002  , 0.00199914, 0.00206208, 0.00199962]),
 'test_r2': array([0.98185992, 0.98455702, 0.98816009, 0.98852095, 0.99761839]),
 'test_neg_median_absolute_error': array([ -7.40444967,  -6.9596981 ,  -5.83755438, -10.1810846 ,
         -4.96515603]),
 'test_neg_mean_absolute_error': array([-8.88891487, -7.57388138, -7.15079858, -9.84652849, -5.06283734]),
 'test_neg_mean_absolute_percentage_error': array([-0.20011721, -0.18335903, -0.17779721, -1.02021875, -0.11819356]),
 **'test_neg_mean_squared_log_error': array([nan, nan, nan, nan, nan]),**
 'test_neg_root_mean_squared_error': array([-11.63580534, -10.24351287,  -8.82367169, -11.5066619 ,
         -6.03460018])}

### Actual Results

{'fit_time': array([0.0080018 , 0.002002  , 0.00099945, 0.00199866, 0.00199962]),
 'score_time': array([0.00699949, 0.00399733, 0.004004  , 0.00299978, 0.00299621]),
 'test_r2': array([nan, nan, nan, nan, nan]),
 'test_neg_median_absolute_error': array([nan, nan, nan, nan, nan]),
 'test_neg_mean_absolute_error': array([nan, nan, nan, nan, nan]),
 'test_neg_mean_absolute_percentage_error': array([nan, nan, nan, nan, nan]),
 'test_neg_mean_squared_log_error': array([nan, nan, nan, nan, nan]),
 'test_neg_root_mean_squared_error': array([nan, nan, nan, nan, nan])}

### Versions

```shell
System:
    python: 3.8.8 (default, Apr 13 2021, 15:08:03) [MSC v.1916 64 bit (AMD64)]
executable: C:\ProgramData\Anaconda3\python.exe
   machine: Windows-10-10.0.17763-SP0

Python dependencies:
          pip: 21.0.1
   setuptools: 52.0.0.post20210125
      sklearn: 1.0.2
        numpy: 1.21.5
        scipy: 1.7.3
       Cython: 0.29.23
       pandas: 1.3.5
   matplotlib: 3.3.4
       joblib: 1.0.1
threadpoolctl: 2.1.0

Built with OpenMP: True
```

COMMENT:
I think the issue is in file `model_selection._validation.py` line 696.
```python
    try:
        if y_train is None:
            estimator.fit(X_train, **fit_params)
        else:
            estimator.fit(X_train, y_train, **fit_params)

    except Exception:
        # Note fit time as time until error
        fit_time = time.time() - start_time
        score_time = 0.0
        if error_score == "raise":
            raise
        elif isinstance(error_score, numbers.Number):
            if isinstance(scorer, dict):
                test_scores = {name: error_score for name in scorer}   # <-- All scores are set to nan here
                if return_train_score:
                    train_scores = test_scores.copy()
            else:
                test_scores = error_score
                if return_train_score:
                    train_scores = error_score
        result["fit_error"] = format_exc()
```

Labels: Bug, Hard, module:model_selection