empirical_covariance silently returns invalid results on inputs with a complex dtype

### Describe the bug

Considering complex inputs $X$, like in [radar image processing](https://ammarmian.github.io/pdf/wiley_book_2021.pdf), we want to estimate the covariance matrix.

When `assume_centered=True`, `empirical_covariance` returns the [pseudo-covariance matrix](https://en.wikipedia.org/wiki/Covariance_matrix#Complex_random_vectors) : $X^T X / n$ . See [code](https://github.com/scikit-learn/scikit-learn/blob/17b82783422b3b9767efbc341c2404e55efd8c8e/sklearn/covariance/_empirical_covariance.py#L98).

When `assume_centered=False`, `empirical_covariance` returns `np.cov(X.T, bias=1)` [here](https://github.com/scikit-learn/scikit-learn/blob/17b82783422b3b9767efbc341c2404e55efd8c8e/sklearn/covariance/_empirical_covariance.py#L100), which computes the [actual covariance matrix for complex inputs](https://en.wikipedia.org/wiki/Covariance_matrix#Complex_random_vectors), using the Hermitian dot product : $X^H X / n$ . See [code](https://github.com/numpy/numpy/blob/v1.24.0/numpy/lib/function_base.py#L2704).

This inconsistency can be easily tested using an already centered complex array $X$: 
`empirical_covariance(X, assume_centered=False)` is not equal to `empirical_covariance(X, assume_centered=True)`.

### Steps/Code to Reproduce

```
import numpy as np
from numpy.testing import assert_array_almost_equal
from sklearn.covariance import empirical_covariance


n_samples, n_features = 100, 2
rs = np.random.RandomState(2023)
X = rs.randn(n_samples, n_features) + 1.0j * rs.randn(n_samples, n_features)
X -= np.mean(X, axis=0, keepdims=True)

C1 = empirical_covariance(X, assume_centered=True)
C2 = empirical_covariance(X, assume_centered=False)
assert_array_almost_equal(C1, C2)
```

### Expected Results

No error is thrown.

### Actual Results

```
Traceback (most recent call last):
  File "dev_covariance_emc_bug.py", line 16, in <module>
    assert_array_equal(C1, C2)
  File "...\Anaconda3\envs\env_ml\lib\site-packages\numpy\testing\_private\utils.py", line 934, in assert_array_equal
    assert_array_compare(operator.__eq__, x, y, err_msg=err_msg,
  File "...\Anaconda3\envs\env_ml\lib\site-packages\numpy\testing\_private\utils.py", line 844, in assert_array_compare
    raise AssertionError(msg)

AssertionError:
Arrays are not equal

Mismatched elements: 4 / 4 (100%)
Max absolute difference: 2.19497247
Max relative difference: 2.23809636
 x: array([[0.074856+0.226382j, 0.226072+0.032869j],
       [0.226072+0.032869j, 0.116201+0.326903j]])
 y: array([[ 2.258123+0.j     , -0.03445 +0.13383j],
       [-0.03445 -0.13383j,  2.038931+0.j     ]])
```

### Versions

```shell
System:
    python: 3.8.16 (default, Jan 17 2023, 22:25:28) [MSC v.1916 64 bit (AMD64)]
executable: ...\Anaconda3\envs\env_ml\python.exe
   machine: Windows-10-10.0.17763-SP0

Python dependencies:
      sklearn: 1.2.0
          pip: 22.3.1
   setuptools: 65.6.3
        numpy: 1.23.5
        scipy: 1.9.3
       Cython: None
       pandas: None
   matplotlib: None
       joblib: 1.2.0
threadpoolctl: 3.1.0

Built with OpenMP: True

threadpoolctl info:
       user_api: openmp
   internal_api: openmp
         prefix: vcomp
       filepath: ...\Anaconda3\envs\env_ml\Lib\site-packages\sklearn\.libs\vcomp140.dll
        version: None
    num_threads: 12

       user_api: blas
   internal_api: mkl
         prefix: mkl_rt
       filepath: ...\Anaconda3\envs\env_ml\Library\bin\mkl_rt.1.dll
        version: 2021.4-Product
threading_layer: intel
    num_threads: 6
```

COMMENT:
Fix would would work well on empirical_covariance and would even translate to log_likelihood since it takes the estimate and precision as input.

However for the class EmpiricalCovariance, it would need more work since complex number are not supported and all data or array verifications assert if not a complex number.

One possible workaround without changing the code base is to introduce a complex to real mapping of the data which leads to a real covariance estimation directly linked to covariance and pseudo-covariances.

See for example who gives the relationship:

http://www.lss.supelec.fr/files/QmVybmFyZCBQSUNJTkJPTk8=_96_1.pdf

Labels: Bug