scikit-learn-intelex 2024.5.0__py39-none-win_amd64.whl → 2024.6.0__py39-none-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of scikit-learn-intelex might be problematic. Click here for more details.
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/cluster/dbscan.py +3 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/cluster/tests/test_dbscan.py +8 -6
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/conftest.py +11 -1
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/decomposition/tests/test_pca.py +4 -2
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/dispatcher.py +15 -1
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/ensemble/_forest.py +114 -23
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/ensemble/tests/test_forest.py +13 -3
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/glob/dispatcher.py +16 -2
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/linear_model/incremental_linear.py +102 -25
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/linear_model/linear.py +25 -7
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/linear_model/logistic_regression.py +13 -15
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/linear_model/tests/test_incremental_linear.py +10 -10
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/linear_model/tests/test_linear.py +2 -2
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/neighbors/knn_regression.py +24 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/preview/__init__.py +1 -1
- scikit_learn_intelex-2024.6.0.data/data/Lib/site-packages/sklearnex/preview/decomposition/__init__.py +19 -0
- scikit_learn_intelex-2024.6.0.data/data/Lib/site-packages/sklearnex/preview/decomposition/incremental_pca.py +228 -0
- scikit_learn_intelex-2024.6.0.data/data/Lib/site-packages/sklearnex/preview/decomposition/tests/test_incremental_pca.py +266 -0
- scikit_learn_intelex-2024.6.0.data/data/Lib/site-packages/sklearnex/svm/_common.py +330 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/svm/nusvc.py +40 -4
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/svm/nusvr.py +31 -2
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/svm/svc.py +40 -4
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/svm/svr.py +31 -2
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/tests/_utils.py +49 -17
- scikit_learn_intelex-2024.6.0.data/data/Lib/site-packages/sklearnex/tests/test_common.py +54 -0
- scikit_learn_intelex-2024.6.0.data/data/Lib/site-packages/sklearnex/tests/test_memory_usage.py +290 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/tests/test_patching.py +5 -12
- scikit_learn_intelex-2024.6.0.data/data/Lib/site-packages/sklearnex/tests/test_run_to_run_stability.py +283 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/utils/_namespace.py +1 -1
- {scikit_learn_intelex-2024.5.0.dist-info → scikit_learn_intelex-2024.6.0.dist-info}/METADATA +5 -2
- scikit_learn_intelex-2024.6.0.dist-info/RECORD +108 -0
- {scikit_learn_intelex-2024.5.0.dist-info → scikit_learn_intelex-2024.6.0.dist-info}/WHEEL +1 -1
- scikit_learn_intelex-2024.5.0.data/data/Lib/site-packages/sklearnex/svm/_common.py +0 -185
- scikit_learn_intelex-2024.5.0.data/data/Lib/site-packages/sklearnex/tests/test_memory_usage.py +0 -231
- scikit_learn_intelex-2024.5.0.data/data/Lib/site-packages/sklearnex/tests/test_run_to_run_stability_tests.py +0 -428
- scikit_learn_intelex-2024.5.0.dist-info/RECORD +0 -104
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/__init__.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/__main__.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/_config.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/_device_offload.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/_utils.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/basic_statistics/__init__.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/basic_statistics/basic_statistics.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/basic_statistics/incremental_basic_statistics.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/basic_statistics/tests/test_incremental_basic_statistics.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/cluster/__init__.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/cluster/k_means.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/cluster/tests/test_kmeans.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/covariance/__init__.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/covariance/incremental_covariance.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/covariance/tests/test_incremental_covariance.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/decomposition/__init__.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/decomposition/pca.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/doc/third-party-programs.txt +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/ensemble/__init__.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/glob/__main__.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/linear_model/__init__.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/linear_model/coordinate_descent.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/linear_model/logistic_path.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/linear_model/ridge.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/linear_model/tests/test_logreg.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/manifold/__init__.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/manifold/t_sne.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/manifold/tests/test_tsne.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/metrics/__init__.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/metrics/pairwise.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/metrics/ranking.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/metrics/tests/test_metrics.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/model_selection/__init__.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/model_selection/split.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/model_selection/tests/test_model_selection.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/neighbors/__init__.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/neighbors/_lof.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/neighbors/common.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/neighbors/knn_classification.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/neighbors/knn_unsupervised.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/neighbors/tests/test_neighbors.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/preview/cluster/__init__.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/preview/cluster/_common.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/preview/cluster/k_means.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/preview/covariance/__init__.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/preview/covariance/covariance.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/preview/covariance/tests/test_covariance.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/__init__.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/basic_statistics/__init__.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/basic_statistics/basic_statistics.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/cluster/__init__.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/cluster/dbscan.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/cluster/kmeans.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/covariance/__init__.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/covariance/covariance.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/decomposition/__init__.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/decomposition/pca.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/ensemble/__init__.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/ensemble/forest.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/linear_model/__init__.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/linear_model/linear_model.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/linear_model/logistic_regression.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/neighbors/__init__.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/neighbors/neighbors.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/svm/__init__.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/svm/tests/test_svm.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/tests/test_config.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/tests/test_monkeypatch.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/tests/test_n_jobs_support.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/tests/test_parallel.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/utils/__init__.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/utils/parallel.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/utils/tests/test_finite.py +0 -0
- {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/utils/validation.py +0 -0
- {scikit_learn_intelex-2024.5.0.dist-info → scikit_learn_intelex-2024.6.0.dist-info}/LICENSE.txt +0 -0
- {scikit_learn_intelex-2024.5.0.dist-info → scikit_learn_intelex-2024.6.0.dist-info}/top_level.txt +0 -0
|
@@ -85,6 +85,9 @@ class DBSCAN(sklearn_DBSCAN, BaseDBSCAN):
|
|
|
85
85
|
self.n_jobs = n_jobs
|
|
86
86
|
|
|
87
87
|
def _onedal_fit(self, X, y, sample_weight=None, queue=None):
|
|
88
|
+
if sklearn_check_version("1.0"):
|
|
89
|
+
X = self._validate_data(X, force_all_finite=False)
|
|
90
|
+
|
|
88
91
|
onedal_params = {
|
|
89
92
|
"eps": self.eps,
|
|
90
93
|
"min_samples": self.min_samples,
|
|
@@ -18,16 +18,18 @@ import numpy as np
|
|
|
18
18
|
import pytest
|
|
19
19
|
from numpy.testing import assert_allclose
|
|
20
20
|
|
|
21
|
+
from onedal.tests.utils._dataframes_support import (
|
|
22
|
+
_convert_to_dataframe,
|
|
23
|
+
get_dataframes_and_queues,
|
|
24
|
+
)
|
|
21
25
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
# sklearnex/tests/test_monkeypatch.py::test_preview_namespace.
|
|
26
|
-
# @pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
|
|
27
|
-
def test_sklearnex_import_dbscan():
|
|
26
|
+
|
|
27
|
+
@pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
|
|
28
|
+
def test_sklearnex_import_dbscan(dataframe, queue):
|
|
28
29
|
from sklearnex.cluster import DBSCAN
|
|
29
30
|
|
|
30
31
|
X = np.array([[1, 2], [2, 2], [2, 3], [8, 7], [8, 8], [25, 80]])
|
|
32
|
+
X = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
|
|
31
33
|
dbscan = DBSCAN(eps=3, min_samples=2).fit(X)
|
|
32
34
|
assert "sklearnex" in dbscan.__module__
|
|
33
35
|
|
|
@@ -19,7 +19,8 @@ import logging
|
|
|
19
19
|
|
|
20
20
|
import pytest
|
|
21
21
|
|
|
22
|
-
from
|
|
22
|
+
from daal4py.sklearn._utils import sklearn_check_version
|
|
23
|
+
from sklearnex import config_context, patch_sklearn, unpatch_sklearn
|
|
23
24
|
|
|
24
25
|
|
|
25
26
|
def pytest_configure(config):
|
|
@@ -61,3 +62,12 @@ def with_sklearnex():
|
|
|
61
62
|
patch_sklearn()
|
|
62
63
|
yield
|
|
63
64
|
unpatch_sklearn()
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
@pytest.fixture
|
|
68
|
+
def with_array_api():
|
|
69
|
+
if sklearn_check_version("1.2"):
|
|
70
|
+
with config_context(array_api_dispatch=True):
|
|
71
|
+
yield
|
|
72
|
+
else:
|
|
73
|
+
yield
|
|
@@ -51,6 +51,8 @@ def test_sklearnex_import(dataframe, queue):
|
|
|
51
51
|
assert hasattr(pca, "_onedal_estimator")
|
|
52
52
|
else:
|
|
53
53
|
assert "daal4py" in pca.__module__
|
|
54
|
+
|
|
55
|
+
tol = 1e-5 if _as_numpy(X_transformed).dtype == np.float32 else 1e-7
|
|
54
56
|
assert_allclose([6.30061232, 0.54980396], _as_numpy(pca.singular_values_))
|
|
55
|
-
assert_allclose(X_transformed_expected, _as_numpy(X_transformed))
|
|
56
|
-
assert_allclose(X_transformed_expected, _as_numpy(X_fit_transformed))
|
|
57
|
+
assert_allclose(X_transformed_expected, _as_numpy(X_transformed), rtol=tol)
|
|
58
|
+
assert_allclose(X_transformed_expected, _as_numpy(X_fit_transformed), rtol=tol)
|
|
@@ -45,12 +45,14 @@ def get_patch_map_core(preview=False):
|
|
|
45
45
|
|
|
46
46
|
if _is_new_patching_available():
|
|
47
47
|
import sklearn.covariance as covariance_module
|
|
48
|
+
import sklearn.decomposition as decomposition_module
|
|
48
49
|
|
|
49
50
|
# Preview classes for patching
|
|
50
51
|
from .preview.cluster import KMeans as KMeans_sklearnex
|
|
51
52
|
from .preview.covariance import (
|
|
52
53
|
EmpiricalCovariance as EmpiricalCovariance_sklearnex,
|
|
53
54
|
)
|
|
55
|
+
from .preview.decomposition import IncrementalPCA as IncrementalPCA_sklearnex
|
|
54
56
|
|
|
55
57
|
# Since the state of the lru_cache without preview cannot be
|
|
56
58
|
# guaranteed to not have already enabled sklearnex algorithms
|
|
@@ -62,7 +64,7 @@ def get_patch_map_core(preview=False):
|
|
|
62
64
|
sklearn_obj = mapping["kmeans"][0][1]
|
|
63
65
|
mapping.pop("kmeans")
|
|
64
66
|
mapping["kmeans"] = [
|
|
65
|
-
[(cluster_module, "
|
|
67
|
+
[(cluster_module, "KMeans", KMeans_sklearnex), sklearn_obj]
|
|
66
68
|
]
|
|
67
69
|
|
|
68
70
|
# Covariance
|
|
@@ -76,6 +78,18 @@ def get_patch_map_core(preview=False):
|
|
|
76
78
|
None,
|
|
77
79
|
]
|
|
78
80
|
]
|
|
81
|
+
|
|
82
|
+
# IncrementalPCA
|
|
83
|
+
mapping["incrementalpca"] = [
|
|
84
|
+
[
|
|
85
|
+
(
|
|
86
|
+
decomposition_module,
|
|
87
|
+
"IncrementalPCA",
|
|
88
|
+
IncrementalPCA_sklearnex,
|
|
89
|
+
),
|
|
90
|
+
None,
|
|
91
|
+
]
|
|
92
|
+
]
|
|
79
93
|
return mapping
|
|
80
94
|
|
|
81
95
|
from daal4py.sklearn.monkeypatch.dispatcher import _get_map_of_algorithms
|
|
@@ -29,7 +29,7 @@ from sklearn.ensemble._forest import ForestClassifier as sklearn_ForestClassifie
|
|
|
29
29
|
from sklearn.ensemble._forest import ForestRegressor as sklearn_ForestRegressor
|
|
30
30
|
from sklearn.ensemble._forest import _get_n_samples_bootstrap
|
|
31
31
|
from sklearn.exceptions import DataConversionWarning
|
|
32
|
-
from sklearn.metrics import accuracy_score
|
|
32
|
+
from sklearn.metrics import accuracy_score, r2_score
|
|
33
33
|
from sklearn.tree import (
|
|
34
34
|
DecisionTreeClassifier,
|
|
35
35
|
DecisionTreeRegressor,
|
|
@@ -38,7 +38,7 @@ from sklearn.tree import (
|
|
|
38
38
|
)
|
|
39
39
|
from sklearn.tree._tree import Tree
|
|
40
40
|
from sklearn.utils import check_random_state, deprecated
|
|
41
|
-
from sklearn.utils.validation import check_array, check_is_fitted
|
|
41
|
+
from sklearn.utils.validation import check_array, check_is_fitted, check_X_y
|
|
42
42
|
|
|
43
43
|
from daal4py.sklearn._n_jobs_support import control_n_jobs
|
|
44
44
|
from daal4py.sklearn._utils import (
|
|
@@ -74,6 +74,7 @@ class BaseForest(ABC):
|
|
|
74
74
|
accept_sparse=False,
|
|
75
75
|
dtype=[np.float64, np.float32],
|
|
76
76
|
force_all_finite=False,
|
|
77
|
+
ensure_2d=True,
|
|
77
78
|
)
|
|
78
79
|
|
|
79
80
|
if sample_weight is not None:
|
|
@@ -97,8 +98,6 @@ class BaseForest(ABC):
|
|
|
97
98
|
|
|
98
99
|
y, expanded_class_weight = self._validate_y_class_weight(y)
|
|
99
100
|
|
|
100
|
-
self.n_features_in_ = X.shape[1]
|
|
101
|
-
|
|
102
101
|
if expanded_class_weight is not None:
|
|
103
102
|
if sample_weight is not None:
|
|
104
103
|
sample_weight = sample_weight * expanded_class_weight
|
|
@@ -114,7 +113,9 @@ class BaseForest(ABC):
|
|
|
114
113
|
"min_samples_split": self.min_samples_split,
|
|
115
114
|
"min_samples_leaf": self.min_samples_leaf,
|
|
116
115
|
"min_weight_fraction_leaf": self.min_weight_fraction_leaf,
|
|
117
|
-
"max_features": self.
|
|
116
|
+
"max_features": self._to_absolute_max_features(
|
|
117
|
+
self.max_features, self.n_features_in_
|
|
118
|
+
),
|
|
118
119
|
"max_leaf_nodes": self.max_leaf_nodes,
|
|
119
120
|
"min_impurity_decrease": self.min_impurity_decrease,
|
|
120
121
|
"bootstrap": self.bootstrap,
|
|
@@ -174,6 +175,45 @@ class BaseForest(ABC):
|
|
|
174
175
|
self._validate_estimator()
|
|
175
176
|
return self
|
|
176
177
|
|
|
178
|
+
def _to_absolute_max_features(self, max_features, n_features):
|
|
179
|
+
if max_features is None:
|
|
180
|
+
return n_features
|
|
181
|
+
if isinstance(max_features, str):
|
|
182
|
+
if max_features == "auto":
|
|
183
|
+
if not sklearn_check_version("1.3"):
|
|
184
|
+
if sklearn_check_version("1.1"):
|
|
185
|
+
warnings.warn(
|
|
186
|
+
"`max_features='auto'` has been deprecated in 1.1 "
|
|
187
|
+
"and will be removed in 1.3. To keep the past behaviour, "
|
|
188
|
+
"explicitly set `max_features=1.0` or remove this "
|
|
189
|
+
"parameter as it is also the default value for "
|
|
190
|
+
"RandomForestRegressors and ExtraTreesRegressors.",
|
|
191
|
+
FutureWarning,
|
|
192
|
+
)
|
|
193
|
+
return (
|
|
194
|
+
max(1, int(np.sqrt(n_features)))
|
|
195
|
+
if isinstance(self, ForestClassifier)
|
|
196
|
+
else n_features
|
|
197
|
+
)
|
|
198
|
+
if max_features == "sqrt":
|
|
199
|
+
return max(1, int(np.sqrt(n_features)))
|
|
200
|
+
if max_features == "log2":
|
|
201
|
+
return max(1, int(np.log2(n_features)))
|
|
202
|
+
allowed_string_values = (
|
|
203
|
+
'"sqrt" or "log2"'
|
|
204
|
+
if sklearn_check_version("1.3")
|
|
205
|
+
else '"auto", "sqrt" or "log2"'
|
|
206
|
+
)
|
|
207
|
+
raise ValueError(
|
|
208
|
+
"Invalid value for max_features. Allowed string "
|
|
209
|
+
f"values are {allowed_string_values}."
|
|
210
|
+
)
|
|
211
|
+
if isinstance(max_features, (numbers.Integral, np.integer)):
|
|
212
|
+
return max_features
|
|
213
|
+
if max_features > 0.0:
|
|
214
|
+
return max(1, int(max_features * n_features))
|
|
215
|
+
return 0
|
|
216
|
+
|
|
177
217
|
def _check_parameters(self):
|
|
178
218
|
if isinstance(self.min_samples_leaf, numbers.Integral):
|
|
179
219
|
if not 1 <= self.min_samples_leaf:
|
|
@@ -518,7 +558,7 @@ class ForestClassifier(sklearn_ForestClassifier, BaseForest):
|
|
|
518
558
|
)
|
|
519
559
|
|
|
520
560
|
if patching_status.get_status():
|
|
521
|
-
X, y =
|
|
561
|
+
X, y = check_X_y(
|
|
522
562
|
X,
|
|
523
563
|
y,
|
|
524
564
|
multi_output=True,
|
|
@@ -738,6 +778,10 @@ class ForestClassifier(sklearn_ForestClassifier, BaseForest):
|
|
|
738
778
|
or self.estimator.__class__ == DecisionTreeClassifier,
|
|
739
779
|
"ExtraTrees only supported starting from oneDAL version 2023.1",
|
|
740
780
|
),
|
|
781
|
+
(
|
|
782
|
+
not self.oob_score,
|
|
783
|
+
"oob_scores using r2 or accuracy not implemented.",
|
|
784
|
+
),
|
|
741
785
|
(sample_weight is None, "sample_weight is not supported."),
|
|
742
786
|
]
|
|
743
787
|
)
|
|
@@ -780,24 +824,43 @@ class ForestClassifier(sklearn_ForestClassifier, BaseForest):
|
|
|
780
824
|
check_is_fitted(self, "_onedal_estimator")
|
|
781
825
|
|
|
782
826
|
if sklearn_check_version("1.0"):
|
|
783
|
-
self.
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
827
|
+
X = self._validate_data(
|
|
828
|
+
X,
|
|
829
|
+
dtype=[np.float64, np.float32],
|
|
830
|
+
force_all_finite=False,
|
|
831
|
+
reset=False,
|
|
832
|
+
ensure_2d=True,
|
|
833
|
+
)
|
|
834
|
+
else:
|
|
835
|
+
X = check_array(
|
|
836
|
+
X,
|
|
837
|
+
dtype=[np.float64, np.float32],
|
|
838
|
+
force_all_finite=False,
|
|
839
|
+
) # Warning, order of dtype matters
|
|
840
|
+
self._check_n_features(X, reset=False)
|
|
790
841
|
|
|
791
842
|
res = self._onedal_estimator.predict(X, queue=queue)
|
|
792
843
|
return np.take(self.classes_, res.ravel().astype(np.int64, casting="unsafe"))
|
|
793
844
|
|
|
794
845
|
def _onedal_predict_proba(self, X, queue=None):
|
|
795
|
-
X = check_array(X, dtype=[np.float64, np.float32], force_all_finite=False)
|
|
796
846
|
check_is_fitted(self, "_onedal_estimator")
|
|
797
847
|
|
|
798
|
-
self._check_n_features(X, reset=False)
|
|
799
848
|
if sklearn_check_version("1.0"):
|
|
800
|
-
self.
|
|
849
|
+
X = self._validate_data(
|
|
850
|
+
X,
|
|
851
|
+
dtype=[np.float64, np.float32],
|
|
852
|
+
force_all_finite=False,
|
|
853
|
+
reset=False,
|
|
854
|
+
ensure_2d=True,
|
|
855
|
+
)
|
|
856
|
+
else:
|
|
857
|
+
X = check_array(
|
|
858
|
+
X,
|
|
859
|
+
dtype=[np.float64, np.float32],
|
|
860
|
+
force_all_finite=False,
|
|
861
|
+
) # Warning, order of dtype matters
|
|
862
|
+
self._check_n_features(X, reset=False)
|
|
863
|
+
|
|
801
864
|
return self._onedal_estimator.predict_proba(X, queue=queue)
|
|
802
865
|
|
|
803
866
|
def _onedal_score(self, X, y, sample_weight=None, queue=None):
|
|
@@ -914,7 +977,7 @@ class ForestRegressor(sklearn_ForestRegressor, BaseForest):
|
|
|
914
977
|
)
|
|
915
978
|
|
|
916
979
|
if patching_status.get_status():
|
|
917
|
-
X, y =
|
|
980
|
+
X, y = check_X_y(
|
|
918
981
|
X,
|
|
919
982
|
y,
|
|
920
983
|
multi_output=True,
|
|
@@ -996,7 +1059,7 @@ class ForestRegressor(sklearn_ForestRegressor, BaseForest):
|
|
|
996
1059
|
]
|
|
997
1060
|
)
|
|
998
1061
|
|
|
999
|
-
elif method_name
|
|
1062
|
+
elif method_name in ["predict", "score"]:
|
|
1000
1063
|
X = data[0]
|
|
1001
1064
|
|
|
1002
1065
|
patching_status.and_conditions(
|
|
@@ -1046,11 +1109,12 @@ class ForestRegressor(sklearn_ForestRegressor, BaseForest):
|
|
|
1046
1109
|
or self.estimator.__class__ == DecisionTreeClassifier,
|
|
1047
1110
|
"ExtraTrees only supported starting from oneDAL version 2023.1",
|
|
1048
1111
|
),
|
|
1112
|
+
(not self.oob_score, "oob_score value is not sklearn conformant."),
|
|
1049
1113
|
(sample_weight is None, "sample_weight is not supported."),
|
|
1050
1114
|
]
|
|
1051
1115
|
)
|
|
1052
1116
|
|
|
1053
|
-
elif method_name
|
|
1117
|
+
elif method_name in ["predict", "score"]:
|
|
1054
1118
|
X = data[0]
|
|
1055
1119
|
|
|
1056
1120
|
patching_status.and_conditions(
|
|
@@ -1083,16 +1147,28 @@ class ForestRegressor(sklearn_ForestRegressor, BaseForest):
|
|
|
1083
1147
|
return patching_status
|
|
1084
1148
|
|
|
1085
1149
|
def _onedal_predict(self, X, queue=None):
|
|
1086
|
-
X = check_array(
|
|
1087
|
-
X, dtype=[np.float64, np.float32], force_all_finite=False
|
|
1088
|
-
) # Warning, order of dtype matters
|
|
1089
1150
|
check_is_fitted(self, "_onedal_estimator")
|
|
1090
1151
|
|
|
1091
1152
|
if sklearn_check_version("1.0"):
|
|
1092
|
-
self.
|
|
1153
|
+
X = self._validate_data(
|
|
1154
|
+
X,
|
|
1155
|
+
dtype=[np.float64, np.float32],
|
|
1156
|
+
force_all_finite=False,
|
|
1157
|
+
reset=False,
|
|
1158
|
+
ensure_2d=True,
|
|
1159
|
+
) # Warning, order of dtype matters
|
|
1160
|
+
else:
|
|
1161
|
+
X = check_array(
|
|
1162
|
+
X, dtype=[np.float64, np.float32], force_all_finite=False
|
|
1163
|
+
) # Warning, order of dtype matters
|
|
1093
1164
|
|
|
1094
1165
|
return self._onedal_estimator.predict(X, queue=queue)
|
|
1095
1166
|
|
|
1167
|
+
def _onedal_score(self, X, y, sample_weight=None, queue=None):
|
|
1168
|
+
return r2_score(
|
|
1169
|
+
y, self._onedal_predict(X, queue=queue), sample_weight=sample_weight
|
|
1170
|
+
)
|
|
1171
|
+
|
|
1096
1172
|
def fit(self, X, y, sample_weight=None):
|
|
1097
1173
|
dispatch(
|
|
1098
1174
|
self,
|
|
@@ -1119,8 +1195,23 @@ class ForestRegressor(sklearn_ForestRegressor, BaseForest):
|
|
|
1119
1195
|
X,
|
|
1120
1196
|
)
|
|
1121
1197
|
|
|
1198
|
+
@wrap_output_data
|
|
1199
|
+
def score(self, X, y, sample_weight=None):
|
|
1200
|
+
return dispatch(
|
|
1201
|
+
self,
|
|
1202
|
+
"score",
|
|
1203
|
+
{
|
|
1204
|
+
"onedal": self.__class__._onedal_score,
|
|
1205
|
+
"sklearn": sklearn_ForestRegressor.score,
|
|
1206
|
+
},
|
|
1207
|
+
X,
|
|
1208
|
+
y,
|
|
1209
|
+
sample_weight=sample_weight,
|
|
1210
|
+
)
|
|
1211
|
+
|
|
1122
1212
|
fit.__doc__ = sklearn_ForestRegressor.fit.__doc__
|
|
1123
1213
|
predict.__doc__ = sklearn_ForestRegressor.predict.__doc__
|
|
1214
|
+
score.__doc__ = sklearn_ForestRegressor.score.__doc__
|
|
1124
1215
|
|
|
1125
1216
|
|
|
1126
1217
|
@control_n_jobs(decorated_methods=["fit", "predict", "predict_proba", "score"])
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
# limitations under the License.
|
|
15
15
|
# ===============================================================================
|
|
16
16
|
|
|
17
|
+
import numpy as np
|
|
17
18
|
import pytest
|
|
18
19
|
from numpy.testing import assert_allclose
|
|
19
20
|
from sklearn.datasets import make_classification, make_regression
|
|
@@ -45,7 +46,10 @@ def test_sklearnex_import_rf_classifier(dataframe, queue):
|
|
|
45
46
|
assert_allclose([1], _as_numpy(rf.predict([[0, 0, 0, 0]])))
|
|
46
47
|
|
|
47
48
|
|
|
48
|
-
|
|
49
|
+
# TODO: fix RF regressor predict for the GPU sycl_queue.
|
|
50
|
+
@pytest.mark.parametrize(
|
|
51
|
+
"dataframe,queue", get_dataframes_and_queues(device_filter_="cpu")
|
|
52
|
+
)
|
|
49
53
|
def test_sklearnex_import_rf_regression(dataframe, queue):
|
|
50
54
|
from sklearnex.ensemble import RandomForestRegressor
|
|
51
55
|
|
|
@@ -65,7 +69,10 @@ def test_sklearnex_import_rf_regression(dataframe, queue):
|
|
|
65
69
|
assert_allclose([-6.839], pred, atol=1e-2)
|
|
66
70
|
|
|
67
71
|
|
|
68
|
-
|
|
72
|
+
# TODO: fix ET classifier predict for the GPU sycl_queue.
|
|
73
|
+
@pytest.mark.parametrize(
|
|
74
|
+
"dataframe,queue", get_dataframes_and_queues(device_filter_="cpu")
|
|
75
|
+
)
|
|
69
76
|
def test_sklearnex_import_et_classifier(dataframe, queue):
|
|
70
77
|
from sklearnex.ensemble import ExtraTreesClassifier
|
|
71
78
|
|
|
@@ -86,7 +93,10 @@ def test_sklearnex_import_et_classifier(dataframe, queue):
|
|
|
86
93
|
assert_allclose([1], _as_numpy(rf.predict([[0, 0, 0, 0]])))
|
|
87
94
|
|
|
88
95
|
|
|
89
|
-
|
|
96
|
+
# TODO: fix ET regressor predict for the GPU sycl_queue.
|
|
97
|
+
@pytest.mark.parametrize(
|
|
98
|
+
"dataframe,queue", get_dataframes_and_queues(device_filter_="cpu")
|
|
99
|
+
)
|
|
90
100
|
def test_sklearnex_import_et_regression(dataframe, queue):
|
|
91
101
|
from sklearnex.ensemble import ExtraTreesRegressor
|
|
92
102
|
|
|
@@ -17,18 +17,32 @@
|
|
|
17
17
|
|
|
18
18
|
def get_patch_str(name=None, verbose=True):
|
|
19
19
|
return f"""try:
|
|
20
|
+
# TEMP. FIX: sklearnex.patch_sklearn imports sklearn beforehand
|
|
21
|
+
# when it didn't initialized _threadpool_controller required for
|
|
22
|
+
# pairwise distances dispatching during imports.
|
|
23
|
+
# Manually setting and deleting _threadpool_controller during patch fixes it.
|
|
24
|
+
import sklearn
|
|
25
|
+
from threadpoolctl import ThreadpoolController
|
|
26
|
+
sklearn._threadpool_controller = ThreadpoolController()
|
|
20
27
|
from sklearnex import patch_sklearn
|
|
21
28
|
patch_sklearn(name={str(name)}, verbose={str(verbose)})
|
|
22
|
-
del patch_sklearn
|
|
29
|
+
del patch_sklearn, sklearn._threadpool_controller
|
|
23
30
|
except ImportError:
|
|
24
31
|
pass"""
|
|
25
32
|
|
|
26
33
|
|
|
27
34
|
def get_patch_str_re():
|
|
28
35
|
return r"""\ntry:
|
|
36
|
+
\# TEMP. FIX: sklearnex.patch_sklearn imports sklearn beforehand
|
|
37
|
+
\# when it didn't initialized _threadpool_controller required for
|
|
38
|
+
\# pairwise distances dispatching during imports.
|
|
39
|
+
\# Manually setting and deleting _threadpool_controller during patch fixes it.
|
|
40
|
+
import sklearn
|
|
41
|
+
from threadpoolctl import ThreadpoolController
|
|
42
|
+
sklearn._threadpool_controller = ThreadpoolController\(\)
|
|
29
43
|
from sklearnex import patch_sklearn
|
|
30
44
|
patch_sklearn\(name=.*, verbose=.*\)
|
|
31
|
-
del patch_sklearn
|
|
45
|
+
del patch_sklearn, sklearn._threadpool_controller
|
|
32
46
|
except ImportError:
|
|
33
47
|
pass\n"""
|
|
34
48
|
|
|
@@ -20,6 +20,7 @@ import warnings
|
|
|
20
20
|
import numpy as np
|
|
21
21
|
from sklearn.base import BaseEstimator, MultiOutputMixin, RegressorMixin
|
|
22
22
|
from sklearn.exceptions import NotFittedError
|
|
23
|
+
from sklearn.metrics import r2_score
|
|
23
24
|
from sklearn.utils import check_array, gen_batches
|
|
24
25
|
|
|
25
26
|
from daal4py.sklearn._n_jobs_support import control_n_jobs
|
|
@@ -134,6 +135,7 @@ class IncrementalLinearRegression(MultiOutputMixin, RegressorMixin, BaseEstimato
|
|
|
134
135
|
X,
|
|
135
136
|
dtype=[np.float64, np.float32],
|
|
136
137
|
copy=self.copy_X,
|
|
138
|
+
reset=False,
|
|
137
139
|
)
|
|
138
140
|
else:
|
|
139
141
|
X = check_array(
|
|
@@ -147,33 +149,42 @@ class IncrementalLinearRegression(MultiOutputMixin, RegressorMixin, BaseEstimato
|
|
|
147
149
|
self._onedal_finalize_fit()
|
|
148
150
|
return self._onedal_estimator.predict(X, queue)
|
|
149
151
|
|
|
150
|
-
def
|
|
152
|
+
def _onedal_score(self, X, y, sample_weight=None, queue=None):
|
|
153
|
+
return r2_score(
|
|
154
|
+
y, self._onedal_predict(X, queue=queue), sample_weight=sample_weight
|
|
155
|
+
)
|
|
156
|
+
|
|
157
|
+
def _onedal_partial_fit(self, X, y, check_input=True, queue=None):
|
|
151
158
|
first_pass = not hasattr(self, "n_samples_seen_") or self.n_samples_seen_ == 0
|
|
152
159
|
|
|
153
160
|
if sklearn_check_version("1.2"):
|
|
154
161
|
self._validate_params()
|
|
155
162
|
|
|
156
|
-
if
|
|
157
|
-
|
|
158
|
-
X,
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
163
|
+
if check_input:
|
|
164
|
+
if sklearn_check_version("1.0"):
|
|
165
|
+
X, y = self._validate_data(
|
|
166
|
+
X,
|
|
167
|
+
y,
|
|
168
|
+
dtype=[np.float64, np.float32],
|
|
169
|
+
reset=first_pass,
|
|
170
|
+
copy=self.copy_X,
|
|
171
|
+
multi_output=True,
|
|
172
|
+
force_all_finite=False,
|
|
173
|
+
)
|
|
174
|
+
else:
|
|
175
|
+
X = check_array(
|
|
176
|
+
X,
|
|
177
|
+
dtype=[np.float64, np.float32],
|
|
178
|
+
copy=self.copy_X,
|
|
179
|
+
force_all_finite=False,
|
|
180
|
+
)
|
|
181
|
+
y = check_array(
|
|
182
|
+
y,
|
|
183
|
+
dtype=[np.float64, np.float32],
|
|
184
|
+
copy=False,
|
|
185
|
+
ensure_2d=False,
|
|
186
|
+
force_all_finite=False,
|
|
187
|
+
)
|
|
177
188
|
|
|
178
189
|
if first_pass:
|
|
179
190
|
self.n_samples_seen_ = X.shape[0]
|
|
@@ -202,7 +213,12 @@ class IncrementalLinearRegression(MultiOutputMixin, RegressorMixin, BaseEstimato
|
|
|
202
213
|
|
|
203
214
|
if sklearn_check_version("1.0"):
|
|
204
215
|
X, y = self._validate_data(
|
|
205
|
-
X,
|
|
216
|
+
X,
|
|
217
|
+
y,
|
|
218
|
+
dtype=[np.float64, np.float32],
|
|
219
|
+
copy=self.copy_X,
|
|
220
|
+
multi_output=True,
|
|
221
|
+
ensure_2d=True,
|
|
206
222
|
)
|
|
207
223
|
else:
|
|
208
224
|
X = check_array(
|
|
@@ -234,7 +250,7 @@ class IncrementalLinearRegression(MultiOutputMixin, RegressorMixin, BaseEstimato
|
|
|
234
250
|
|
|
235
251
|
for batch in gen_batches(n_samples, self.batch_size_):
|
|
236
252
|
X_batch, y_batch = X[batch], y[batch]
|
|
237
|
-
self._onedal_partial_fit(X_batch, y_batch, queue=queue)
|
|
253
|
+
self._onedal_partial_fit(X_batch, y_batch, check_input=False, queue=queue)
|
|
238
254
|
|
|
239
255
|
if sklearn_check_version("1.2"):
|
|
240
256
|
self._validate_params()
|
|
@@ -288,7 +304,7 @@ class IncrementalLinearRegression(MultiOutputMixin, RegressorMixin, BaseEstimato
|
|
|
288
304
|
coef_ = property(get_coef_, set_coef_)
|
|
289
305
|
intercept_ = property(get_intercept_, set_intercept_)
|
|
290
306
|
|
|
291
|
-
def partial_fit(self, X, y):
|
|
307
|
+
def partial_fit(self, X, y, check_input=True):
|
|
292
308
|
"""
|
|
293
309
|
Incremental fit linear model with X and y. All of X and y is
|
|
294
310
|
processed as a single batch.
|
|
@@ -318,6 +334,7 @@ class IncrementalLinearRegression(MultiOutputMixin, RegressorMixin, BaseEstimato
|
|
|
318
334
|
},
|
|
319
335
|
X,
|
|
320
336
|
y,
|
|
337
|
+
check_input=check_input,
|
|
321
338
|
)
|
|
322
339
|
return self
|
|
323
340
|
|
|
@@ -385,3 +402,63 @@ class IncrementalLinearRegression(MultiOutputMixin, RegressorMixin, BaseEstimato
|
|
|
385
402
|
},
|
|
386
403
|
X,
|
|
387
404
|
)
|
|
405
|
+
|
|
406
|
+
@wrap_output_data
|
|
407
|
+
def score(self, X, y, sample_weight=None):
|
|
408
|
+
"""Return the coefficient of determination of the prediction.
|
|
409
|
+
|
|
410
|
+
The coefficient of determination :math:`R^2` is defined as
|
|
411
|
+
:math:`(1 - \\frac{u}{v})`, where :math:`u` is the residual
|
|
412
|
+
sum of squares ``((y_true - y_pred)** 2).sum()`` and :math:`v`
|
|
413
|
+
is the total sum of squares ``((y_true - y_true.mean()) ** 2).sum()``.
|
|
414
|
+
The best possible score is 1.0 and it can be negative (because the
|
|
415
|
+
model can be arbitrarily worse). A constant model that always predicts
|
|
416
|
+
the expected value of `y`, disregarding the input features, would get
|
|
417
|
+
a :math:`R^2` score of 0.0.
|
|
418
|
+
|
|
419
|
+
Parameters
|
|
420
|
+
----------
|
|
421
|
+
X : array-like of shape (n_samples, n_features)
|
|
422
|
+
Test samples. For some estimators this may be a precomputed
|
|
423
|
+
kernel matrix or a list of generic objects instead with shape
|
|
424
|
+
``(n_samples, n_samples_fitted)``, where ``n_samples_fitted``
|
|
425
|
+
is the number of samples used in the fitting for the estimator.
|
|
426
|
+
|
|
427
|
+
y : array-like of shape (n_samples,) or (n_samples, n_outputs)
|
|
428
|
+
True values for `X`.
|
|
429
|
+
|
|
430
|
+
sample_weight : array-like of shape (n_samples,), default=None
|
|
431
|
+
Sample weights.
|
|
432
|
+
|
|
433
|
+
Returns
|
|
434
|
+
-------
|
|
435
|
+
score : float
|
|
436
|
+
:math:`R^2` of ``self.predict(X)`` w.r.t. `y`.
|
|
437
|
+
|
|
438
|
+
Notes
|
|
439
|
+
-----
|
|
440
|
+
The :math:`R^2` score used when calling ``score`` on a regressor uses
|
|
441
|
+
``multioutput='uniform_average'`` from version 0.23 to keep consistent
|
|
442
|
+
with default value of :func:`~sklearn.metrics.r2_score`.
|
|
443
|
+
This influences the ``score`` method of all the multioutput
|
|
444
|
+
regressors (except for
|
|
445
|
+
:class:`~sklearn.multioutput.MultiOutputRegressor`).
|
|
446
|
+
"""
|
|
447
|
+
if not hasattr(self, "coef_"):
|
|
448
|
+
msg = (
|
|
449
|
+
"This %(name)s instance is not fitted yet. Call 'fit' or 'partial_fit' "
|
|
450
|
+
"with appropriate arguments before using this estimator."
|
|
451
|
+
)
|
|
452
|
+
raise NotFittedError(msg % {"name": self.__class__.__name__})
|
|
453
|
+
|
|
454
|
+
return dispatch(
|
|
455
|
+
self,
|
|
456
|
+
"score",
|
|
457
|
+
{
|
|
458
|
+
"onedal": self.__class__._onedal_score,
|
|
459
|
+
"sklearn": None,
|
|
460
|
+
},
|
|
461
|
+
X,
|
|
462
|
+
y,
|
|
463
|
+
sample_weight=sample_weight,
|
|
464
|
+
)
|