Talip7/scikit-learn-issues-multilabel huggingface dataset:
RFC BayesSearchCV in scikit-learn

### Discussed in https://github.com/scikit-learn/scikit-learn/discussions/26141

<div type='discussions-op-text'>

<sup>Originally posted by **earlev4** April 11, 2023</sup>
**Hi! First off, thanks so much to the excellent work done by all the scikit-learn contributors! The project is truly a gift and your work is greatly appreciated!**

I still consider myself a novice when it comes to scikit-learn. In my usage, I typically will attempt to use GridSearchCV when searching for the best parameters. However, depending on the search space, GridSearchCV might not always be the best option and can be computationally expensive and time-consuming in some scenarios. RandomizedSearchCV can be an alternative in these situations, but does not always seem to provide the best parameters compared to scikit-optimize BayesSearchCV. In my humble opinion, scikit-optimize BayesSearchCV seems to be a nice compromise between GridSearchCV and RandomizedSearchCV, providing good parameters in a reasonable time.

Unfortunately, scikit-optimize BayesSearchCV seems to be no longer supported. The last commit was in 2021. As of NumPy 1.24, NumPy now results in an error, unless a workaround of `np.int = int` is used. This is just one example. There are numerous issues that have not been touched since 2021. It would be a shame to lose a project such as scikit-optimize BayesSearchCV and _humbly ask the contributors of scikit-learn if a similar version could be implemented in scikit-learn_.

**Thanks so much for your consideration! Looking forward to the discussion.**</div>

----------------------------------------

I thought `scikit-optimize` was a maintained project, but it seems it isn't, and I agree it'd be nice for the community to have a maintained `BayesSearchCV` available. 

I'm not sure if we should include it here, or `scikit-learn-extra`, but would be nice to have it.

COMMENT:
Seems like this is becoming more of a documentation issue then. We should probably make sure we refer people to good examples from all SearchCV classes to make sure they do best practices.

Labels: module:model_selection, Needs Decision - Include Feature
RFC BayesSearchCV in scikit-learn

### Discussed in https://github.com/scikit-learn/scikit-learn/discussions/26141

<div type='discussions-op-text'>

<sup>Originally posted by **earlev4** April 11, 2023</sup>
**Hi! First off, thanks so much to the excellent work done by all the scikit-learn contributors! The project is truly a gift and your work is greatly appreciated!**

I still consider myself a novice when it comes to scikit-learn. In my usage, I typically will attempt to use GridSearchCV when searching for the best parameters. However, depending on the search space, GridSearchCV might not always be the best option and can be computationally expensive and time-consuming in some scenarios. RandomizedSearchCV can be an alternative in these situations, but does not always seem to provide the best parameters compared to scikit-optimize BayesSearchCV. In my humble opinion, scikit-optimize BayesSearchCV seems to be a nice compromise between GridSearchCV and RandomizedSearchCV, providing good parameters in a reasonable time.

Unfortunately, scikit-optimize BayesSearchCV seems to be no longer supported. The last commit was in 2021. As of NumPy 1.24, NumPy now results in an error, unless a workaround of `np.int = int` is used. This is just one example. There are numerous issues that have not been touched since 2021. It would be a shame to lose a project such as scikit-optimize BayesSearchCV and _humbly ask the contributors of scikit-learn if a similar version could be implemented in scikit-learn_.

**Thanks so much for your consideration! Looking forward to the discussion.**</div>

----------------------------------------

I thought `scikit-optimize` was a maintained project, but it seems it isn't, and I agree it'd be nice for the community to have a maintained `BayesSearchCV` available. 

I'm not sure if we should include it here, or `scikit-learn-extra`, but would be nice to have it.

COMMENT:
In the pointers/docs we add can we add "keywords" like "hyperopt" and the like to help people (including me - I always have to look up the paper to remind myself that it is basically the same) realise that the, somewhat obscurely named, `HalvingSeachCV` is what they are looking for if they want "hyperopt"? Or is it hyperband?

👍  improved docs and examples and references within the docs.

Labels: module:model_selection, Needs Decision - Include Feature
Adding validation split in train_test_split

### Describe the workflow you want to enable

Hi, this is my first time. Help and suggestions are really appreciated. I wanted to include **validation split** with a simple `want_valid : bool` parameter in the **model_selection.train_test_split()** function given `stratified=None`. Will this be a good thing to introduce?

### Describe your proposed solution

I have gone through the codebase, according to my understanding this can be done by making introducing validation in  `ShuffleSplit` function [https://github.com/scikit-learn/scikit-learn/blob/main/sklearn/model_selection/_split.py#L1725](url) and the `train_test_split` function [https://github.com/scikit-learn/scikit-learn/blob/main/sklearn/model_selection/_split.py#L2484#](url) .

I have not started it yet. Wanted to know is this relevant or anyone already working on this?

### Describe alternatives you've considered, if relevant

_No response_

### Additional context

_No response_

COMMENT:
You can always call `train_test_split` twice.

Labels: wontfix
LinearRegression with zero sample_weights is not the same as excluding those rows

### Describe the bug

Excluding rows having `sample_weight == 0` in `LinearRegression` does not give the same results.

### Steps/Code to Reproduce

```python
from collections import Counter
import numpy as np
from sklearn.linear_model import LinearRegression

results = []
for i in range(100):
    rng = np.random.RandomState(i)
    n_samples, n_features = 10, 5
    X = rng.rand(n_samples, n_features)
    y = rng.rand(n_samples)
    reg = LinearRegression()
    sample_weight = rng.uniform(low=0.01, high=2, size=X.shape[0])
    sample_weight_0 = sample_weight.copy()
    sample_weight_0[-5:] = 0
    y[-5:] *= 1000  # to make excluding those samples important
    reg.fit(X, y, sample_weight=sample_weight_0)
    coef_0, intercept_0 = reg.coef_.copy(), reg.intercept_

    reg.fit(X[:-5], y[:-5], sample_weight=sample_weight[:-5])
    print(f"{coef_0=}")
    print(f"{reg.coef_=}")
    results.append(np.allclose(reg.coef_, coef_0, rtol=1e-6))
print(Counter(results))
```

### Expected Results

Always `True`.

### Actual Results

```python
Counter({True: 79, False: 21})  # it fails 20% of the time
```

The print statement gives:
```
coef_0 =    array([ 1.43516166, -1.78826443,  0.15365526,  1.82233166, -1.6       ])
reg.coef_ = array([ 2.24022351, -1.04917851,  0.45341088,  0.80315086, -0.25726798])
```


### Versions

```shell
System:
    python: 3.9.15 (main, Nov 15 2022, 05:24:15)  [Clang 14.0.0 (clang-1400.0.29.202)]
   machine: macOS-13.3.1-x86_64-i386-64bit

Python dependencies:
      sklearn: 1.2.2
        numpy: 1.23.5
        scipy: 1.10.1
       Cython: 0.29.33

       user_api: blas
   internal_api: openblas
         prefix: libopenblas
```
```

COMMENT:
Interestingly, I cannot reproduce:

```
coef_0=array([ 2.24022351, -1.04917851,  0.45341088,  0.80315086, -0.25726798])
reg.coef_=array([ 2.24022351, -1.04917851,  0.45341088,  0.80315086, -0.25726798])
```

```
System:
    python: 3.10.8 | packaged by conda-forge | (main, Nov 22 2022, 08:25:29) [Clang 14.0.6 ]
executable: /Users/glemaitre/mambaforge/envs/dev/bin/python3.10
   machine: macOS-13.2.1-arm64-arm-64bit

Python dependencies:
      sklearn: 1.3.dev0
          pip: 22.3.1
   setuptools: 65.5.1
        numpy: 1.24.2
        scipy: 1.10.1
       Cython: 0.29.33
       pandas: 1.5.3
   matplotlib: 3.7.1
       joblib: 1.3.0.dev0
threadpoolctl: 3.1.0

Built with OpenMP: True

threadpoolctl info:
       user_api: blas
   internal_api: openblas
         prefix: libopenblas
       filepath: /Users/glemaitre/mambaforge/envs/dev/lib/libopenblas.0.dylib
        version: 0.3.21
threading_layer: openmp
   architecture: VORTEX
    num_threads: 8

       user_api: openmp
   internal_api: openmp
         prefix: libomp
       filepath: /Users/glemaitre/mambaforge/envs/dev/lib/libomp.dylib
        version: None
    num_threads: 8
```

Labels: Bug, module:linear_model
LinearRegression with zero sample_weights is not the same as excluding those rows

### Describe the bug

Excluding rows having `sample_weight == 0` in `LinearRegression` does not give the same results.

### Steps/Code to Reproduce

```python
from collections import Counter
import numpy as np
from sklearn.linear_model import LinearRegression

results = []
for i in range(100):
    rng = np.random.RandomState(i)
    n_samples, n_features = 10, 5
    X = rng.rand(n_samples, n_features)
    y = rng.rand(n_samples)
    reg = LinearRegression()
    sample_weight = rng.uniform(low=0.01, high=2, size=X.shape[0])
    sample_weight_0 = sample_weight.copy()
    sample_weight_0[-5:] = 0
    y[-5:] *= 1000  # to make excluding those samples important
    reg.fit(X, y, sample_weight=sample_weight_0)
    coef_0, intercept_0 = reg.coef_.copy(), reg.intercept_

    reg.fit(X[:-5], y[:-5], sample_weight=sample_weight[:-5])
    print(f"{coef_0=}")
    print(f"{reg.coef_=}")
    results.append(np.allclose(reg.coef_, coef_0, rtol=1e-6))
print(Counter(results))
```

### Expected Results

Always `True`.

### Actual Results

```python
Counter({True: 79, False: 21})  # it fails 20% of the time
```

The print statement gives:
```
coef_0 =    array([ 1.43516166, -1.78826443,  0.15365526,  1.82233166, -1.6       ])
reg.coef_ = array([ 2.24022351, -1.04917851,  0.45341088,  0.80315086, -0.25726798])
```


### Versions

```shell
System:
    python: 3.9.15 (main, Nov 15 2022, 05:24:15)  [Clang 14.0.0 (clang-1400.0.29.202)]
   machine: macOS-13.3.1-x86_64-i386-64bit

Python dependencies:
      sklearn: 1.2.2
        numpy: 1.23.5
        scipy: 1.10.1
       Cython: 0.29.33

       user_api: blas
   internal_api: openblas
         prefix: libopenblas
```
```

COMMENT:
I can reproduce it on my Linux machine through:

```
System:
    python: 3.10.6 | packaged by conda-forge | (main, Aug 22 2022, 20:36:39) [GCC 10.4.0]
executable: /home/glemaitre/miniconda3/envs/dev/bin/python3.10
   machine: Linux-5.19.0-35-generic-x86_64-with-glibc2.35

Python dependencies:
      sklearn: 1.3.dev0
          pip: 22.3.1
   setuptools: 65.5.1
        numpy: 1.24.2
        scipy: 1.10.1
       Cython: 0.29.33
       pandas: 1.5.1
   matplotlib: 3.6.2
       joblib: 1.3.0.dev0
threadpoolctl: 3.1.0

Built with OpenMP: True

threadpoolctl info:
       user_api: blas
   internal_api: openblas
         prefix: libopenblas
       filepath: /home/glemaitre/miniconda3/envs/dev/lib/libopenblasp-r0.3.21.so
        version: 0.3.21
threading_layer: pthreads
   architecture: Haswell
    num_threads: 8

       user_api: openmp
   internal_api: openmp
         prefix: libgomp
       filepath: /home/glemaitre/miniconda3/envs/dev/lib/libgomp.so.1.0.0
        version: None
    num_threads: 8
```

Labels: Bug, module:linear_model
LinearRegression with zero sample_weights is not the same as excluding those rows

### Describe the bug

Excluding rows having `sample_weight == 0` in `LinearRegression` does not give the same results.

### Steps/Code to Reproduce

```python
from collections import Counter
import numpy as np
from sklearn.linear_model import LinearRegression

results = []
for i in range(100):
    rng = np.random.RandomState(i)
    n_samples, n_features = 10, 5
    X = rng.rand(n_samples, n_features)
    y = rng.rand(n_samples)
    reg = LinearRegression()
    sample_weight = rng.uniform(low=0.01, high=2, size=X.shape[0])
    sample_weight_0 = sample_weight.copy()
    sample_weight_0[-5:] = 0
    y[-5:] *= 1000  # to make excluding those samples important
    reg.fit(X, y, sample_weight=sample_weight_0)
    coef_0, intercept_0 = reg.coef_.copy(), reg.intercept_

    reg.fit(X[:-5], y[:-5], sample_weight=sample_weight[:-5])
    print(f"{coef_0=}")
    print(f"{reg.coef_=}")
    results.append(np.allclose(reg.coef_, coef_0, rtol=1e-6))
print(Counter(results))
```

### Expected Results

Always `True`.

### Actual Results

```python
Counter({True: 79, False: 21})  # it fails 20% of the time
```

The print statement gives:
```
coef_0 =    array([ 1.43516166, -1.78826443,  0.15365526,  1.82233166, -1.6       ])
reg.coef_ = array([ 2.24022351, -1.04917851,  0.45341088,  0.80315086, -0.25726798])
```


### Versions

```shell
System:
    python: 3.9.15 (main, Nov 15 2022, 05:24:15)  [Clang 14.0.0 (clang-1400.0.29.202)]
   machine: macOS-13.3.1-x86_64-i386-64bit

Python dependencies:
      sklearn: 1.2.2
        numpy: 1.23.5
        scipy: 1.10.1
       Cython: 0.29.33

       user_api: blas
   internal_api: openblas
         prefix: libopenblas
```
```

COMMENT:
Note that my Mac has an ARM processor.

Labels: Bug, module:linear_model
LinearRegression with zero sample_weights is not the same as excluding those rows

### Describe the bug

Excluding rows having `sample_weight == 0` in `LinearRegression` does not give the same results.

### Steps/Code to Reproduce

```python
from collections import Counter
import numpy as np
from sklearn.linear_model import LinearRegression

results = []
for i in range(100):
    rng = np.random.RandomState(i)
    n_samples, n_features = 10, 5
    X = rng.rand(n_samples, n_features)
    y = rng.rand(n_samples)
    reg = LinearRegression()
    sample_weight = rng.uniform(low=0.01, high=2, size=X.shape[0])
    sample_weight_0 = sample_weight.copy()
    sample_weight_0[-5:] = 0
    y[-5:] *= 1000  # to make excluding those samples important
    reg.fit(X, y, sample_weight=sample_weight_0)
    coef_0, intercept_0 = reg.coef_.copy(), reg.intercept_

    reg.fit(X[:-5], y[:-5], sample_weight=sample_weight[:-5])
    print(f"{coef_0=}")
    print(f"{reg.coef_=}")
    results.append(np.allclose(reg.coef_, coef_0, rtol=1e-6))
print(Counter(results))
```

### Expected Results

Always `True`.

### Actual Results

```python
Counter({True: 79, False: 21})  # it fails 20% of the time
```

The print statement gives:
```
coef_0 =    array([ 1.43516166, -1.78826443,  0.15365526,  1.82233166, -1.6       ])
reg.coef_ = array([ 2.24022351, -1.04917851,  0.45341088,  0.80315086, -0.25726798])
```


### Versions

```shell
System:
    python: 3.9.15 (main, Nov 15 2022, 05:24:15)  [Clang 14.0.0 (clang-1400.0.29.202)]
   machine: macOS-13.3.1-x86_64-i386-64bit

Python dependencies:
      sklearn: 1.2.2
        numpy: 1.23.5
        scipy: 1.10.1
       Cython: 0.29.33

       user_api: blas
   internal_api: openblas
         prefix: libopenblas
```
```

COMMENT:
Could you try different random seeds on our MAC? I detected this bug while working on #15554 and then running `SKLEARN_TESTS_GLOBAL_RANDOM_SEED="all" pytest -x sklearn/linear_model/tests/test_base.py::test_linear_regression_sample_weight_consistency`.

Labels: Bug, module:linear_model
LinearRegression with zero sample_weights is not the same as excluding those rows

### Describe the bug

Excluding rows having `sample_weight == 0` in `LinearRegression` does not give the same results.

### Steps/Code to Reproduce

```python
from collections import Counter
import numpy as np
from sklearn.linear_model import LinearRegression

results = []
for i in range(100):
    rng = np.random.RandomState(i)
    n_samples, n_features = 10, 5
    X = rng.rand(n_samples, n_features)
    y = rng.rand(n_samples)
    reg = LinearRegression()
    sample_weight = rng.uniform(low=0.01, high=2, size=X.shape[0])
    sample_weight_0 = sample_weight.copy()
    sample_weight_0[-5:] = 0
    y[-5:] *= 1000  # to make excluding those samples important
    reg.fit(X, y, sample_weight=sample_weight_0)
    coef_0, intercept_0 = reg.coef_.copy(), reg.intercept_

    reg.fit(X[:-5], y[:-5], sample_weight=sample_weight[:-5])
    print(f"{coef_0=}")
    print(f"{reg.coef_=}")
    results.append(np.allclose(reg.coef_, coef_0, rtol=1e-6))
print(Counter(results))
```

### Expected Results

Always `True`.

### Actual Results

```python
Counter({True: 79, False: 21})  # it fails 20% of the time
```

The print statement gives:
```
coef_0 =    array([ 1.43516166, -1.78826443,  0.15365526,  1.82233166, -1.6       ])
reg.coef_ = array([ 2.24022351, -1.04917851,  0.45341088,  0.80315086, -0.25726798])
```


### Versions

```shell
System:
    python: 3.9.15 (main, Nov 15 2022, 05:24:15)  [Clang 14.0.0 (clang-1400.0.29.202)]
   machine: macOS-13.3.1-x86_64-i386-64bit

Python dependencies:
      sklearn: 1.2.2
        numpy: 1.23.5
        scipy: 1.10.1
       Cython: 0.29.33

       user_api: blas
   internal_api: openblas
         prefix: libopenblas
```
```

COMMENT:
Indeed, this is an issue with the random seed. In both configs, it fails 20% of the time.

Labels: Bug, module:linear_model
LinearRegression with zero sample_weights is not the same as excluding those rows

### Describe the bug

Excluding rows having `sample_weight == 0` in `LinearRegression` does not give the same results.

### Steps/Code to Reproduce

```python
from collections import Counter
import numpy as np
from sklearn.linear_model import LinearRegression

results = []
for i in range(100):
    rng = np.random.RandomState(i)
    n_samples, n_features = 10, 5
    X = rng.rand(n_samples, n_features)
    y = rng.rand(n_samples)
    reg = LinearRegression()
    sample_weight = rng.uniform(low=0.01, high=2, size=X.shape[0])
    sample_weight_0 = sample_weight.copy()
    sample_weight_0[-5:] = 0
    y[-5:] *= 1000  # to make excluding those samples important
    reg.fit(X, y, sample_weight=sample_weight_0)
    coef_0, intercept_0 = reg.coef_.copy(), reg.intercept_

    reg.fit(X[:-5], y[:-5], sample_weight=sample_weight[:-5])
    print(f"{coef_0=}")
    print(f"{reg.coef_=}")
    results.append(np.allclose(reg.coef_, coef_0, rtol=1e-6))
print(Counter(results))
```

### Expected Results

Always `True`.

### Actual Results

```python
Counter({True: 79, False: 21})  # it fails 20% of the time
```

The print statement gives:
```
coef_0 =    array([ 1.43516166, -1.78826443,  0.15365526,  1.82233166, -1.6       ])
reg.coef_ = array([ 2.24022351, -1.04917851,  0.45341088,  0.80315086, -0.25726798])
```


### Versions

```shell
System:
    python: 3.9.15 (main, Nov 15 2022, 05:24:15)  [Clang 14.0.0 (clang-1400.0.29.202)]
   machine: macOS-13.3.1-x86_64-i386-64bit

Python dependencies:
      sklearn: 1.2.2
        numpy: 1.23.5
        scipy: 1.10.1
       Cython: 0.29.33

       user_api: blas
   internal_api: openblas
         prefix: libopenblas
```
```

COMMENT:
@lorentzenchr Does it mean that the `scipy.linalg.lstsq` is not stable and could be related to what @ogrisel experimented in https://github.com/scikit-learn/scikit-learn/issues/22855#issuecomment-1463878692?

Labels: Bug, module:linear_model
LinearRegression with zero sample_weights is not the same as excluding those rows

### Describe the bug

Excluding rows having `sample_weight == 0` in `LinearRegression` does not give the same results.

### Steps/Code to Reproduce

```python
from collections import Counter
import numpy as np
from sklearn.linear_model import LinearRegression

results = []
for i in range(100):
    rng = np.random.RandomState(i)
    n_samples, n_features = 10, 5
    X = rng.rand(n_samples, n_features)
    y = rng.rand(n_samples)
    reg = LinearRegression()
    sample_weight = rng.uniform(low=0.01, high=2, size=X.shape[0])
    sample_weight_0 = sample_weight.copy()
    sample_weight_0[-5:] = 0
    y[-5:] *= 1000  # to make excluding those samples important
    reg.fit(X, y, sample_weight=sample_weight_0)
    coef_0, intercept_0 = reg.coef_.copy(), reg.intercept_

    reg.fit(X[:-5], y[:-5], sample_weight=sample_weight[:-5])
    print(f"{coef_0=}")
    print(f"{reg.coef_=}")
    results.append(np.allclose(reg.coef_, coef_0, rtol=1e-6))
print(Counter(results))
```

### Expected Results

Always `True`.

### Actual Results

```python
Counter({True: 79, False: 21})  # it fails 20% of the time
```

The print statement gives:
```
coef_0 =    array([ 1.43516166, -1.78826443,  0.15365526,  1.82233166, -1.6       ])
reg.coef_ = array([ 2.24022351, -1.04917851,  0.45341088,  0.80315086, -0.25726798])
```


### Versions

```shell
System:
    python: 3.9.15 (main, Nov 15 2022, 05:24:15)  [Clang 14.0.0 (clang-1400.0.29.202)]
   machine: macOS-13.3.1-x86_64-i386-64bit

Python dependencies:
      sklearn: 1.2.2
        numpy: 1.23.5
        scipy: 1.10.1
       Cython: 0.29.33

       user_api: blas
   internal_api: openblas
         prefix: libopenblas
```
```

COMMENT:
> Does it mean that the scipy.linalg.lstsq is not stable

I don't know. If so, we should report to scipy.
It could also be due to our handling of intercept and sample weights.

Labels: Bug, module:linear_model
LinearRegression with zero sample_weights is not the same as excluding those rows

### Describe the bug

Excluding rows having `sample_weight == 0` in `LinearRegression` does not give the same results.

### Steps/Code to Reproduce

```python
from collections import Counter
import numpy as np
from sklearn.linear_model import LinearRegression

results = []
for i in range(100):
    rng = np.random.RandomState(i)
    n_samples, n_features = 10, 5
    X = rng.rand(n_samples, n_features)
    y = rng.rand(n_samples)
    reg = LinearRegression()
    sample_weight = rng.uniform(low=0.01, high=2, size=X.shape[0])
    sample_weight_0 = sample_weight.copy()
    sample_weight_0[-5:] = 0
    y[-5:] *= 1000  # to make excluding those samples important
    reg.fit(X, y, sample_weight=sample_weight_0)
    coef_0, intercept_0 = reg.coef_.copy(), reg.intercept_

    reg.fit(X[:-5], y[:-5], sample_weight=sample_weight[:-5])
    print(f"{coef_0=}")
    print(f"{reg.coef_=}")
    results.append(np.allclose(reg.coef_, coef_0, rtol=1e-6))
print(Counter(results))
```

### Expected Results

Always `True`.

### Actual Results

```python
Counter({True: 79, False: 21})  # it fails 20% of the time
```

The print statement gives:
```
coef_0 =    array([ 1.43516166, -1.78826443,  0.15365526,  1.82233166, -1.6       ])
reg.coef_ = array([ 2.24022351, -1.04917851,  0.45341088,  0.80315086, -0.25726798])
```


### Versions

```shell
System:
    python: 3.9.15 (main, Nov 15 2022, 05:24:15)  [Clang 14.0.0 (clang-1400.0.29.202)]
   machine: macOS-13.3.1-x86_64-i386-64bit

Python dependencies:
      sklearn: 1.2.2
        numpy: 1.23.5
        scipy: 1.10.1
       Cython: 0.29.33

       user_api: blas
   internal_api: openblas
         prefix: libopenblas
```
```

COMMENT:
I confirm it also works on my M1 mac (similar versions for the dependencies and openblas).

@lorentzenchr can you reproduce the problem with `Ridge(alpha=0)` and various solvers on your linux machine? If it works with `solver="lsqr"` that would be one more reason to use `lsqr` as the default solver for `LinearRegression`.

Can you also please try to change the lapack driver used by `LinearRegression`'s `lstsq`, e.g. `gelsy` instead of the `gelsd` default?

- https://docs.scipy.org/doc/scipy/reference/generated/scipy.linalg.lstsq.html

Labels: Bug, module:linear_model