scikit-learn-intelex 2024.4.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.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/_device_offload.py +8 -1
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/basic_statistics/tests/test_incremental_basic_statistics.py +2 -4
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/cluster/dbscan.py +3 -0
- {scikit_learn_intelex-2024.4.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.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/conftest.py +11 -1
- scikit_learn_intelex-2024.6.0.data/data/Lib/site-packages/sklearnex/covariance/incremental_covariance.py +317 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/covariance/tests/test_incremental_covariance.py +54 -17
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/decomposition/pca.py +68 -13
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/decomposition/tests/test_pca.py +6 -4
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/dispatcher.py +46 -1
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/ensemble/_forest.py +114 -22
- {scikit_learn_intelex-2024.4.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.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/glob/dispatcher.py +16 -2
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/linear_model/__init__.py +5 -3
- scikit_learn_intelex-2024.6.0.data/data/Lib/site-packages/sklearnex/linear_model/incremental_linear.py +464 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/linear_model/linear.py +27 -9
- {scikit_learn_intelex-2024.4.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.6.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_incremental_linear.py +200 -0
- {scikit_learn_intelex-2024.4.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.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/neighbors/knn_regression.py +24 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/neighbors/tests/test_neighbors.py +2 -2
- {scikit_learn_intelex-2024.4.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.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/svm/nusvc.py +40 -4
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/svm/nusvr.py +31 -2
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/svm/svc.py +40 -4
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/svm/svr.py +31 -2
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/tests/_utils.py +70 -29
- 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.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/tests/test_n_jobs_support.py +4 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/tests/test_patching.py +22 -10
- 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.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/utils/_namespace.py +1 -1
- scikit_learn_intelex-2024.6.0.data/data/Lib/site-packages/sklearnex/utils/tests/test_finite.py +89 -0
- {scikit_learn_intelex-2024.4.0.dist-info → scikit_learn_intelex-2024.6.0.dist-info}/METADATA +230 -230
- scikit_learn_intelex-2024.6.0.dist-info/RECORD +108 -0
- {scikit_learn_intelex-2024.4.0.dist-info → scikit_learn_intelex-2024.6.0.dist-info}/WHEEL +1 -1
- scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/covariance/incremental_covariance.py +0 -130
- scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/svm/_common.py +0 -185
- scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/tests/test_memory_usage.py +0 -227
- scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/tests/test_run_to_run_stability_tests.py +0 -428
- scikit_learn_intelex-2024.4.0.dist-info/RECORD +0 -101
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/__init__.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/__main__.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/_config.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/_utils.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/basic_statistics/__init__.py +0 -0
- {scikit_learn_intelex-2024.4.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.4.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.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/cluster/__init__.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/cluster/k_means.py +0 -0
- {scikit_learn_intelex-2024.4.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.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/covariance/__init__.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/decomposition/__init__.py +0 -0
- {scikit_learn_intelex-2024.4.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.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/ensemble/__init__.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/glob/__main__.py +0 -0
- {scikit_learn_intelex-2024.4.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.4.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.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/linear_model/ridge.py +0 -0
- {scikit_learn_intelex-2024.4.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.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/manifold/__init__.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/manifold/t_sne.py +0 -0
- {scikit_learn_intelex-2024.4.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.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/metrics/__init__.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/metrics/pairwise.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/metrics/ranking.py +0 -0
- {scikit_learn_intelex-2024.4.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.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/model_selection/__init__.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/model_selection/split.py +0 -0
- {scikit_learn_intelex-2024.4.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.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/neighbors/__init__.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/neighbors/_lof.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/neighbors/common.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/neighbors/knn_classification.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/neighbors/knn_unsupervised.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/preview/cluster/__init__.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/preview/cluster/_common.py +0 -0
- {scikit_learn_intelex-2024.4.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.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/preview/covariance/__init__.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/preview/covariance/covariance.py +0 -0
- {scikit_learn_intelex-2024.4.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.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/__init__.py +0 -0
- {scikit_learn_intelex-2024.4.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.4.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.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/cluster/__init__.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/cluster/dbscan.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/cluster/kmeans.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/covariance/__init__.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/covariance/covariance.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/decomposition/__init__.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/decomposition/pca.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/ensemble/__init__.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/ensemble/forest.py +0 -0
- {scikit_learn_intelex-2024.4.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.4.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.4.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.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/neighbors/__init__.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/neighbors/neighbors.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/svm/__init__.py +0 -0
- {scikit_learn_intelex-2024.4.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.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/tests/test_config.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/tests/test_monkeypatch.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/tests/test_parallel.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/utils/__init__.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/utils/parallel.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/utils/validation.py +0 -0
- {scikit_learn_intelex-2024.4.0.dist-info → scikit_learn_intelex-2024.6.0.dist-info}/LICENSE.txt +0 -0
- {scikit_learn_intelex-2024.4.0.dist-info → scikit_learn_intelex-2024.6.0.dist-info}/top_level.txt +0 -0
|
@@ -21,6 +21,7 @@ from daal4py.sklearn._utils import daal_check_version
|
|
|
21
21
|
if daal_check_version((2024, "P", 100)):
|
|
22
22
|
import numbers
|
|
23
23
|
from math import sqrt
|
|
24
|
+
from warnings import warn
|
|
24
25
|
|
|
25
26
|
import numpy as np
|
|
26
27
|
from scipy.sparse import issparse
|
|
@@ -35,9 +36,13 @@ if daal_check_version((2024, "P", 100)):
|
|
|
35
36
|
if sklearn_check_version("1.1") and not sklearn_check_version("1.2"):
|
|
36
37
|
from sklearn.utils import check_scalar
|
|
37
38
|
|
|
39
|
+
if sklearn_check_version("1.2"):
|
|
40
|
+
from sklearn.utils._param_validation import StrOptions
|
|
41
|
+
|
|
38
42
|
from sklearn.decomposition import PCA as sklearn_PCA
|
|
39
43
|
|
|
40
44
|
from onedal.decomposition import PCA as onedal_PCA
|
|
45
|
+
from sklearnex.utils import get_namespace
|
|
41
46
|
|
|
42
47
|
@control_n_jobs(decorated_methods=["fit", "transform", "fit_transform"])
|
|
43
48
|
class PCA(sklearn_PCA):
|
|
@@ -45,6 +50,16 @@ if daal_check_version((2024, "P", 100)):
|
|
|
45
50
|
|
|
46
51
|
if sklearn_check_version("1.2"):
|
|
47
52
|
_parameter_constraints: dict = {**sklearn_PCA._parameter_constraints}
|
|
53
|
+
# "onedal_svd" solver uses oneDAL's PCA-SVD algorithm
|
|
54
|
+
# and required for testing purposes to fully enable it in future.
|
|
55
|
+
# "covariance_eigh" solver is added for ability to explicitly request
|
|
56
|
+
# oneDAL's PCA-Covariance algorithm using any sklearn version < 1.5.
|
|
57
|
+
_parameter_constraints["svd_solver"] = [
|
|
58
|
+
StrOptions(
|
|
59
|
+
_parameter_constraints["svd_solver"][0].options
|
|
60
|
+
| {"onedal_svd", "covariance_eigh"}
|
|
61
|
+
)
|
|
62
|
+
]
|
|
48
63
|
|
|
49
64
|
if sklearn_check_version("1.1"):
|
|
50
65
|
|
|
@@ -107,7 +122,7 @@ if daal_check_version((2024, "P", 100)):
|
|
|
107
122
|
target_type=numbers.Integral,
|
|
108
123
|
)
|
|
109
124
|
|
|
110
|
-
|
|
125
|
+
return dispatch(
|
|
111
126
|
self,
|
|
112
127
|
"fit",
|
|
113
128
|
{
|
|
@@ -116,7 +131,6 @@ if daal_check_version((2024, "P", 100)):
|
|
|
116
131
|
},
|
|
117
132
|
X,
|
|
118
133
|
)
|
|
119
|
-
return U, S, Vt
|
|
120
134
|
|
|
121
135
|
def _onedal_fit(self, X, queue=None):
|
|
122
136
|
X = self._validate_data(
|
|
@@ -129,7 +143,7 @@ if daal_check_version((2024, "P", 100)):
|
|
|
129
143
|
onedal_params = {
|
|
130
144
|
"n_components": self.n_components,
|
|
131
145
|
"is_deterministic": True,
|
|
132
|
-
"method": "cov",
|
|
146
|
+
"method": "svd" if self._fit_svd_solver == "onedal_svd" else "cov",
|
|
133
147
|
"whiten": self.whiten,
|
|
134
148
|
}
|
|
135
149
|
self._onedal_estimator = onedal_PCA(**onedal_params)
|
|
@@ -140,7 +154,13 @@ if daal_check_version((2024, "P", 100)):
|
|
|
140
154
|
S = self.singular_values_
|
|
141
155
|
Vt = self.components_
|
|
142
156
|
|
|
143
|
-
|
|
157
|
+
if sklearn_check_version("1.5"):
|
|
158
|
+
xp, _ = get_namespace(X)
|
|
159
|
+
x_is_centered = not self.copy
|
|
160
|
+
|
|
161
|
+
return U, S, Vt, X, x_is_centered, xp
|
|
162
|
+
else:
|
|
163
|
+
return U, S, Vt
|
|
144
164
|
|
|
145
165
|
@wrap_output_data
|
|
146
166
|
def transform(self, X):
|
|
@@ -156,32 +176,39 @@ if daal_check_version((2024, "P", 100)):
|
|
|
156
176
|
|
|
157
177
|
def _onedal_transform(self, X, queue=None):
|
|
158
178
|
check_is_fitted(self)
|
|
179
|
+
if sklearn_check_version("1.0"):
|
|
180
|
+
self._check_feature_names(X, reset=False)
|
|
159
181
|
X = self._validate_data(
|
|
160
182
|
X,
|
|
161
183
|
dtype=[np.float64, np.float32],
|
|
162
184
|
reset=False,
|
|
163
185
|
)
|
|
164
186
|
self._validate_n_features_in_after_fitting(X)
|
|
165
|
-
if sklearn_check_version("1.0"):
|
|
166
|
-
self._check_feature_names(X, reset=False)
|
|
167
187
|
|
|
168
188
|
return self._onedal_estimator.predict(X, queue=queue)
|
|
169
189
|
|
|
170
190
|
def fit_transform(self, X, y=None):
|
|
171
|
-
|
|
172
|
-
|
|
191
|
+
if sklearn_check_version("1.5"):
|
|
192
|
+
U, S, Vt, X_fit, x_is_centered, xp = self._fit(X)
|
|
193
|
+
else:
|
|
194
|
+
U, S, Vt = self._fit(X)
|
|
195
|
+
X_fit = X
|
|
196
|
+
if hasattr(self, "_onedal_estimator"):
|
|
173
197
|
# oneDAL PCA was fit
|
|
174
198
|
return self.transform(X)
|
|
175
|
-
|
|
199
|
+
elif U is not None:
|
|
176
200
|
# Scikit-learn PCA was fit
|
|
177
201
|
U = U[:, : self.n_components_]
|
|
178
202
|
|
|
179
203
|
if self.whiten:
|
|
180
|
-
U *= sqrt(
|
|
204
|
+
U *= sqrt(X_fit.shape[0] - 1)
|
|
181
205
|
else:
|
|
182
206
|
U *= S[: self.n_components_]
|
|
183
207
|
|
|
184
208
|
return U
|
|
209
|
+
else:
|
|
210
|
+
# Scikit-learn PCA["covariance_eigh"] was fit
|
|
211
|
+
return self._transform(X_fit, xp, x_is_centered=x_is_centered)
|
|
185
212
|
|
|
186
213
|
def _onedal_supported(self, method_name, X):
|
|
187
214
|
class_name = self.__class__.__name__
|
|
@@ -199,7 +226,13 @@ if daal_check_version((2024, "P", 100)):
|
|
|
199
226
|
),
|
|
200
227
|
(
|
|
201
228
|
self._is_solver_compatible_with_onedal(shape_tuple),
|
|
202
|
-
|
|
229
|
+
(
|
|
230
|
+
"Only 'covariance_eigh' and 'onedal_svd' "
|
|
231
|
+
"solvers are supported."
|
|
232
|
+
if sklearn_check_version("1.5")
|
|
233
|
+
else "Only 'full', 'covariance_eigh' and 'onedal_svd' "
|
|
234
|
+
"solvers are supported."
|
|
235
|
+
),
|
|
203
236
|
),
|
|
204
237
|
(not issparse(X), "oneDAL PCA does not support sparse data"),
|
|
205
238
|
]
|
|
@@ -254,7 +287,13 @@ if daal_check_version((2024, "P", 100)):
|
|
|
254
287
|
|
|
255
288
|
if self._fit_svd_solver == "auto":
|
|
256
289
|
if sklearn_check_version("1.1"):
|
|
257
|
-
if
|
|
290
|
+
if (
|
|
291
|
+
sklearn_check_version("1.5")
|
|
292
|
+
and shape_tuple[1] <= 1_000
|
|
293
|
+
and shape_tuple[0] >= 10 * shape_tuple[1]
|
|
294
|
+
):
|
|
295
|
+
self._fit_svd_solver = "covariance_eigh"
|
|
296
|
+
elif max(shape_tuple) <= 500 or n_components == "mle":
|
|
258
297
|
self._fit_svd_solver = "full"
|
|
259
298
|
elif 1 <= n_components < 0.8 * n_sf_min:
|
|
260
299
|
self._fit_svd_solver = "randomized"
|
|
@@ -288,7 +327,23 @@ if daal_check_version((2024, "P", 100)):
|
|
|
288
327
|
else:
|
|
289
328
|
self._fit_svd_solver = "full"
|
|
290
329
|
|
|
291
|
-
|
|
330
|
+
# Use oneDAL in next cases:
|
|
331
|
+
# 1. oneDAL SVD solver is explicitly set
|
|
332
|
+
# 2. solver is set or dispatched to "covariance_eigh"
|
|
333
|
+
# 3. solver is set or dispatched to "full" and sklearn version < 1.5
|
|
334
|
+
# 4. solver is set to "auto" and dispatched to "full"
|
|
335
|
+
if self._fit_svd_solver in ["onedal_svd", "covariance_eigh"]:
|
|
336
|
+
return True
|
|
337
|
+
elif not sklearn_check_version("1.5") and self._fit_svd_solver == "full":
|
|
338
|
+
self._fit_svd_solver = "covariance_eigh"
|
|
339
|
+
return True
|
|
340
|
+
elif self.svd_solver == "auto" and self._fit_svd_solver == "full":
|
|
341
|
+
warn(
|
|
342
|
+
"Sklearnex always uses `covariance_eigh` solver instead of `full` "
|
|
343
|
+
"when `svd_solver` parameter is set to `auto` "
|
|
344
|
+
"for performance purposes."
|
|
345
|
+
)
|
|
346
|
+
self._fit_svd_solver = "covariance_eigh"
|
|
292
347
|
return True
|
|
293
348
|
else:
|
|
294
349
|
return False
|
|
@@ -41,16 +41,18 @@ def test_sklearnex_import(dataframe, queue):
|
|
|
41
41
|
[3.6053038, 0.04224385],
|
|
42
42
|
]
|
|
43
43
|
|
|
44
|
-
pca = PCA(n_components=2, svd_solver="
|
|
44
|
+
pca = PCA(n_components=2, svd_solver="covariance_eigh")
|
|
45
45
|
pca.fit(X)
|
|
46
46
|
X_transformed = pca.transform(X)
|
|
47
|
-
X_fit_transformed = PCA(n_components=2, svd_solver="
|
|
47
|
+
X_fit_transformed = PCA(n_components=2, svd_solver="covariance_eigh").fit_transform(X)
|
|
48
48
|
|
|
49
49
|
if daal_check_version((2024, "P", 100)):
|
|
50
50
|
assert "sklearnex" in pca.__module__
|
|
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
|
|
@@ -93,6 +107,7 @@ def get_patch_map_core(preview=False):
|
|
|
93
107
|
# Scikit-learn* modules
|
|
94
108
|
import sklearn as base_module
|
|
95
109
|
import sklearn.cluster as cluster_module
|
|
110
|
+
import sklearn.covariance as covariance_module
|
|
96
111
|
import sklearn.decomposition as decomposition_module
|
|
97
112
|
import sklearn.ensemble as ensemble_module
|
|
98
113
|
import sklearn.linear_model as linear_model_module
|
|
@@ -115,11 +130,17 @@ def get_patch_map_core(preview=False):
|
|
|
115
130
|
from .utils.parallel import _FuncWrapperOld as _FuncWrapper_sklearnex
|
|
116
131
|
|
|
117
132
|
from .cluster import DBSCAN as DBSCAN_sklearnex
|
|
133
|
+
from .covariance import (
|
|
134
|
+
IncrementalEmpiricalCovariance as IncrementalEmpiricalCovariance_sklearnex,
|
|
135
|
+
)
|
|
118
136
|
from .decomposition import PCA as PCA_sklearnex
|
|
119
137
|
from .ensemble import ExtraTreesClassifier as ExtraTreesClassifier_sklearnex
|
|
120
138
|
from .ensemble import ExtraTreesRegressor as ExtraTreesRegressor_sklearnex
|
|
121
139
|
from .ensemble import RandomForestClassifier as RandomForestClassifier_sklearnex
|
|
122
140
|
from .ensemble import RandomForestRegressor as RandomForestRegressor_sklearnex
|
|
141
|
+
from .linear_model import (
|
|
142
|
+
IncrementalLinearRegression as IncrementalLinearRegression_sklearnex,
|
|
143
|
+
)
|
|
123
144
|
from .linear_model import LinearRegression as LinearRegression_sklearnex
|
|
124
145
|
from .linear_model import LogisticRegression as LogisticRegression_sklearnex
|
|
125
146
|
from .neighbors import KNeighborsClassifier as KNeighborsClassifier_sklearnex
|
|
@@ -273,6 +294,30 @@ def get_patch_map_core(preview=False):
|
|
|
273
294
|
]
|
|
274
295
|
mapping["localoutlierfactor"] = mapping["lof"]
|
|
275
296
|
|
|
297
|
+
# IncrementalEmpiricalCovariance
|
|
298
|
+
mapping["incrementalempiricalcovariance"] = [
|
|
299
|
+
[
|
|
300
|
+
(
|
|
301
|
+
covariance_module,
|
|
302
|
+
"IncrementalEmpiricalCovariance",
|
|
303
|
+
IncrementalEmpiricalCovariance_sklearnex,
|
|
304
|
+
),
|
|
305
|
+
None,
|
|
306
|
+
]
|
|
307
|
+
]
|
|
308
|
+
|
|
309
|
+
# IncrementalLinearRegression
|
|
310
|
+
mapping["incrementallinearregression"] = [
|
|
311
|
+
[
|
|
312
|
+
(
|
|
313
|
+
linear_model_module,
|
|
314
|
+
"IncrementalLinearRegression",
|
|
315
|
+
IncrementalLinearRegression_sklearnex,
|
|
316
|
+
),
|
|
317
|
+
None,
|
|
318
|
+
]
|
|
319
|
+
]
|
|
320
|
+
|
|
276
321
|
# Configs
|
|
277
322
|
mapping["set_config"] = [
|
|
278
323
|
[(base_module, "set_config", set_config_sklearnex), None]
|
|
@@ -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
|
)
|
|
@@ -777,26 +821,46 @@ class ForestClassifier(sklearn_ForestClassifier, BaseForest):
|
|
|
777
821
|
return patching_status
|
|
778
822
|
|
|
779
823
|
def _onedal_predict(self, X, queue=None):
|
|
780
|
-
X = check_array(
|
|
781
|
-
X,
|
|
782
|
-
dtype=[np.float64, np.float32],
|
|
783
|
-
force_all_finite=False,
|
|
784
|
-
) # Warning, order of dtype matters
|
|
785
824
|
check_is_fitted(self, "_onedal_estimator")
|
|
786
825
|
|
|
787
826
|
if sklearn_check_version("1.0"):
|
|
788
|
-
self.
|
|
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)
|
|
789
841
|
|
|
790
842
|
res = self._onedal_estimator.predict(X, queue=queue)
|
|
791
843
|
return np.take(self.classes_, res.ravel().astype(np.int64, casting="unsafe"))
|
|
792
844
|
|
|
793
845
|
def _onedal_predict_proba(self, X, queue=None):
|
|
794
|
-
X = check_array(X, dtype=[np.float64, np.float32], force_all_finite=False)
|
|
795
846
|
check_is_fitted(self, "_onedal_estimator")
|
|
796
847
|
|
|
797
|
-
self._check_n_features(X, reset=False)
|
|
798
848
|
if sklearn_check_version("1.0"):
|
|
799
|
-
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
|
+
|
|
800
864
|
return self._onedal_estimator.predict_proba(X, queue=queue)
|
|
801
865
|
|
|
802
866
|
def _onedal_score(self, X, y, sample_weight=None, queue=None):
|
|
@@ -913,7 +977,7 @@ class ForestRegressor(sklearn_ForestRegressor, BaseForest):
|
|
|
913
977
|
)
|
|
914
978
|
|
|
915
979
|
if patching_status.get_status():
|
|
916
|
-
X, y =
|
|
980
|
+
X, y = check_X_y(
|
|
917
981
|
X,
|
|
918
982
|
y,
|
|
919
983
|
multi_output=True,
|
|
@@ -995,7 +1059,7 @@ class ForestRegressor(sklearn_ForestRegressor, BaseForest):
|
|
|
995
1059
|
]
|
|
996
1060
|
)
|
|
997
1061
|
|
|
998
|
-
elif method_name
|
|
1062
|
+
elif method_name in ["predict", "score"]:
|
|
999
1063
|
X = data[0]
|
|
1000
1064
|
|
|
1001
1065
|
patching_status.and_conditions(
|
|
@@ -1045,11 +1109,12 @@ class ForestRegressor(sklearn_ForestRegressor, BaseForest):
|
|
|
1045
1109
|
or self.estimator.__class__ == DecisionTreeClassifier,
|
|
1046
1110
|
"ExtraTrees only supported starting from oneDAL version 2023.1",
|
|
1047
1111
|
),
|
|
1112
|
+
(not self.oob_score, "oob_score value is not sklearn conformant."),
|
|
1048
1113
|
(sample_weight is None, "sample_weight is not supported."),
|
|
1049
1114
|
]
|
|
1050
1115
|
)
|
|
1051
1116
|
|
|
1052
|
-
elif method_name
|
|
1117
|
+
elif method_name in ["predict", "score"]:
|
|
1053
1118
|
X = data[0]
|
|
1054
1119
|
|
|
1055
1120
|
patching_status.and_conditions(
|
|
@@ -1082,16 +1147,28 @@ class ForestRegressor(sklearn_ForestRegressor, BaseForest):
|
|
|
1082
1147
|
return patching_status
|
|
1083
1148
|
|
|
1084
1149
|
def _onedal_predict(self, X, queue=None):
|
|
1085
|
-
X = check_array(
|
|
1086
|
-
X, dtype=[np.float64, np.float32], force_all_finite=False
|
|
1087
|
-
) # Warning, order of dtype matters
|
|
1088
1150
|
check_is_fitted(self, "_onedal_estimator")
|
|
1089
1151
|
|
|
1090
1152
|
if sklearn_check_version("1.0"):
|
|
1091
|
-
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
|
|
1092
1164
|
|
|
1093
1165
|
return self._onedal_estimator.predict(X, queue=queue)
|
|
1094
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
|
+
|
|
1095
1172
|
def fit(self, X, y, sample_weight=None):
|
|
1096
1173
|
dispatch(
|
|
1097
1174
|
self,
|
|
@@ -1118,8 +1195,23 @@ class ForestRegressor(sklearn_ForestRegressor, BaseForest):
|
|
|
1118
1195
|
X,
|
|
1119
1196
|
)
|
|
1120
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
|
+
|
|
1121
1212
|
fit.__doc__ = sklearn_ForestRegressor.fit.__doc__
|
|
1122
1213
|
predict.__doc__ = sklearn_ForestRegressor.predict.__doc__
|
|
1214
|
+
score.__doc__ = sklearn_ForestRegressor.score.__doc__
|
|
1123
1215
|
|
|
1124
1216
|
|
|
1125
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
|
|
|
@@ -15,14 +15,16 @@
|
|
|
15
15
|
# ===============================================================================
|
|
16
16
|
|
|
17
17
|
from .coordinate_descent import ElasticNet, Lasso
|
|
18
|
+
from .incremental_linear import IncrementalLinearRegression
|
|
18
19
|
from .linear import LinearRegression
|
|
19
20
|
from .logistic_regression import LogisticRegression
|
|
20
21
|
from .ridge import Ridge
|
|
21
22
|
|
|
22
23
|
__all__ = [
|
|
23
|
-
"Ridge",
|
|
24
|
-
"LinearRegression",
|
|
25
|
-
"LogisticRegression",
|
|
26
24
|
"ElasticNet",
|
|
25
|
+
"IncrementalLinearRegression",
|
|
27
26
|
"Lasso",
|
|
27
|
+
"LinearRegression",
|
|
28
|
+
"LogisticRegression",
|
|
29
|
+
"Ridge",
|
|
28
30
|
]
|