Wrong order for check_sample_weights_invariance

### Describe the bug

The intent of check_sample_weights_invariance here: https://github.com/scikit-learn/scikit-learn/blob/main/sklearn/utils/estimator_checks.py#L1016

is as it says that for kind="zeros", will produce a y1 such that a y2 with weights will give be "identical".

However, this is not true.  Instead, the rows gets shuffled.  This matters for any method that relies upon row-order, even if reproducible.  E.g. tree methods that do row sampling will be affected.  Any splitting that occurs in the estimator itself will be different due to the different order.  Any batching for neural networks will learn in a different order.  etc.

The code should not shuffle the output for y2.  The shuffle line should be removed.

### Steps/Code to Reproduce

```
import numpy as np
from sklearn.utils import shuffle

kind = "zeros"
name = "foo"


X1 = np.array(
    [
        [1, 3],
        [1, 3],
        [1, 3],
        [1, 3],
        [2, 1],
        [2, 1],
        [2, 1],
        [2, 1],
        [3, 3],
        [3, 3],
        [3, 3],
        [3, 3],
        [4, 1],
        [4, 1],
        [4, 1],
        [4, 1],
    ],
    dtype=np.float64,
)
y1 = np.array([1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2], dtype=int)

if kind == "ones":
    X2 = X1
    y2 = y1
    sw2 = np.ones(shape=len(y1))
    err_msg = (
        f"For {name} sample_weight=None is not equivalent to sample_weight=ones"
    )
elif kind == "zeros":
    # Construct a dataset that is very different to (X, y) if weights
    # are disregarded, but identical to (X, y) given weights.
    X2 = np.vstack([X1, X1 + 1])
    y2 = np.hstack([y1, 3 - y1])
    sw2 = np.ones(shape=len(y1) * 2)
    sw2[len(y1) :] = 0
    X2, y2, sw2 = shuffle(X2, y2, sw2, random_state=0)

print(y1)
print(y2[sw2 > 0.0])
assert y1 == y2[sw2 > 0.0]
```

### Expected Results

No error in above copy-paste from the function with just different setup and check added at end.  No shuffle should occur.

### Actual Results

```
python checksk1.py 
```
gives:
```
[1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 2]
[1 1 1 2 2 2 1 1 2 2 1 2 1 1 2 2]
```
i.e. *not* identical.

### Versions

```shell
>>> import sklearn; sklearn.show_versions()

System:
    python: 3.8.12 | packaged by conda-forge | (default, Sep 29 2021, 19:52:28)  [GCC 9.4.0]
executable: /home/jon/miniconda/bin/python
   machine: Linux-5.4.0-74-generic-x86_64-with-glibc2.10

Python dependencies:
          pip: 21.1
   setuptools: 49.6.0
      sklearn: 0.24.2
        numpy: 1.19.5
        scipy: 1.6.3
       Cython: 0.29.21
       pandas: 1.2.5
   matplotlib: 3.4.3
       joblib: 1.0.1
threadpoolctl: 3.0.0

Built with OpenMP: True
>>> 

```
```

COMMENT:
Thanks for reporting the issue.

The problem is that even if we don't shuffle the dataset, there are always cases where you could write an estimator where the two datasets (when changing sample weights or when including/excluding 0 sample weights) don't result in the same fitted estimator.

It's true that this test can be improved and it's in our radar to separate it into two tests and maybe improve. But if you have an estimator which doesn't pass this test, we recommend disabling it by adding it to your `_xfail_checks` estimator tag (https://scikit-learn.org/stable/developers/develop.html?highlight=custom%20estimator#estimator-tags) and write your own test for this particular test for now.

Labels: Bug, Needs Triage