Symmetry of `mutual_info_classif` and `mutual_info_regression`.

### Describe the bug

Suppose we have realizations of a continuous variable `c` and discrete variable `d` from a joint distribution `p(c, d)`. I expected that `mutual_info_classif(c, d, discrete_features=[False])` and `mutual_info_regression(d, c, discrete_features=[True])` would give the same result because both estimate the mutual information between a discrete and a continuous random variable. Is the lack of symmetry a feature or a bug?

The discrepancy is a result of continuous features not being rescaled in `mutual_info_classif` but the continuous target always being rescaled in `mutual_info_regression`. Specifically, these few lines in `_estimate_mi`.

https://github.com/scikit-learn/scikit-learn/blob/f1d3417b086550be670cbfbb5b3c1760ac99203f/sklearn/feature_selection/_mutual_info.py#L283-L286

### Steps/Code to Reproduce

```python
import numpy as np
import sklearn.feature_selection

np.random.seed(0)
n = 100
d = np.random.randint(10, size=n)
c = np.random.normal(0, 1, size=n)

# Use continuous feature to classify discrete target.
score1 = sklearn.feature_selection.mutual_info_classif(
    c[:, None], d, discrete_features=[False], random_state=123)

# Use discrete feature to regress continuous target.
score2 = sklearn.feature_selection.mutual_info_regression(
    d[:, None], c, discrete_features=[True], random_state=123)

(score1, score2)  # (array([0.06027782]), array([0.06018685]))
```

### Expected Results

I expected `score1` and `score2` to be the same in the above code example.

### Actual Results

`score1` and `score2` have different values.

### Versions

```shell
System:
    python: 3.9.9 (main, Jan 15 2022, 13:38:04)  [Clang 12.0.5 (clang-1205.0.22.9)]
executable: /[venv-path]/bin/python3.9
   machine: macOS-12.4-arm64-arm-64bit

Python dependencies:
      sklearn: 1.1.1
          pip: 22.1.2
   setuptools: 62.6.0
        numpy: 1.22.4
        scipy: 1.8.1
       Cython: 0.29.30
       pandas: 1.4.2
   matplotlib: 3.5.2
       joblib: 1.1.0
threadpoolctl: 3.1.0

Built with OpenMP: True

threadpoolctl info:
       user_api: blas
   internal_api: openblas
         prefix: libopenblas
       filepath: /[venv-path]/lib/python3.9/site-packages/numpy/.dylibs/libopenblas64_.0.dylib
        version: 0.3.18
threading_layer: pthreads
   architecture: armv8
    num_threads: 8

       user_api: openmp
   internal_api: openmp
         prefix: libomp
       filepath: /[venv-path]/lib/python3.9/site-packages/sklearn/.dylibs/libomp.dylib
        version: None
    num_threads: 8

       user_api: blas
   internal_api: openblas
         prefix: libopenblas
       filepath: /[venv-path]/lib/python3.9/site-packages/scipy/.dylibs/libopenblas.0.dylib
        version: 0.3.17
threading_layer: pthreads
   architecture: armv8
    num_threads: 8
```
```

COMMENT:
At a first glance, it looks like a bug to me.
Scaling in `X` should not depend on `y` but only if the variables are continuous or not.

From the original paper ([A. Kraskov, H. Stogbauer and P. Grassberger, “Estimating mutual information”. Phys. Rev. E 69, 2004.](https://arxiv.org/pdf/cond-mat/0305641.pdf)), it is stated in the implementation details that it could be beneficial to rescale the vector to unit variance.

Therefore, it would make sense to do it for continuous vectors, independently if this is the target or one of the features in `X`.

Labels: Bug, module:feature_selection