scikit-learn-intelex 2024.3.0__py38-none-win_amd64.whl → 2024.5.0__py38-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.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/_device_offload.py +39 -5
- {scikit_learn_intelex-2024.3.0.data/data/Lib/site-packages/sklearnex/spmd → scikit_learn_intelex-2024.5.0.data/data/Lib/site-packages/sklearnex}/basic_statistics/__init__.py +2 -1
- scikit_learn_intelex-2024.5.0.data/data/Lib/site-packages/sklearnex/basic_statistics/incremental_basic_statistics.py +288 -0
- scikit_learn_intelex-2024.5.0.data/data/Lib/site-packages/sklearnex/basic_statistics/tests/test_incremental_basic_statistics.py +384 -0
- scikit_learn_intelex-2024.5.0.data/data/Lib/site-packages/sklearnex/covariance/incremental_covariance.py +317 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/covariance/tests/test_incremental_covariance.py +54 -17
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/decomposition/pca.py +71 -19
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/decomposition/tests/test_pca.py +2 -2
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/dispatcher.py +33 -2
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/ensemble/_forest.py +73 -79
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/linear_model/__init__.py +5 -3
- scikit_learn_intelex-2024.5.0.data/data/Lib/site-packages/sklearnex/linear_model/incremental_linear.py +387 -0
- scikit_learn_intelex-2024.5.0.data/data/Lib/site-packages/sklearnex/linear_model/linear.py +316 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/linear_model/logistic_regression.py +50 -9
- scikit_learn_intelex-2024.5.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_incremental_linear.py +200 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/linear_model/tests/test_linear.py +40 -5
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/neighbors/_lof.py +53 -36
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/neighbors/common.py +4 -1
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/neighbors/knn_classification.py +37 -122
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/neighbors/knn_regression.py +10 -117
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/neighbors/knn_unsupervised.py +6 -78
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/neighbors/tests/test_neighbors.py +2 -2
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/preview/cluster/k_means.py +5 -73
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/preview/covariance/covariance.py +6 -5
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/preview/covariance/tests/test_covariance.py +18 -5
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/svm/_common.py +4 -7
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/svm/nusvc.py +66 -50
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/svm/nusvr.py +3 -49
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/svm/svc.py +66 -51
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/svm/svr.py +3 -49
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/tests/_utils.py +34 -16
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/tests/test_memory_usage.py +5 -1
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/tests/test_n_jobs_support.py +12 -2
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/tests/test_patching.py +87 -58
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/tests/test_run_to_run_stability_tests.py +1 -1
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/utils/__init__.py +2 -1
- scikit_learn_intelex-2024.5.0.data/data/Lib/site-packages/sklearnex/utils/_namespace.py +97 -0
- scikit_learn_intelex-2024.5.0.data/data/Lib/site-packages/sklearnex/utils/tests/test_finite.py +89 -0
- {scikit_learn_intelex-2024.3.0.dist-info → scikit_learn_intelex-2024.5.0.dist-info}/METADATA +227 -230
- scikit_learn_intelex-2024.5.0.dist-info/RECORD +104 -0
- {scikit_learn_intelex-2024.3.0.dist-info → scikit_learn_intelex-2024.5.0.dist-info}/WHEEL +1 -1
- scikit_learn_intelex-2024.3.0.data/data/Lib/site-packages/sklearnex/covariance/incremental_covariance.py +0 -130
- scikit_learn_intelex-2024.3.0.data/data/Lib/site-packages/sklearnex/linear_model/linear.py +0 -381
- scikit_learn_intelex-2024.3.0.dist-info/RECORD +0 -98
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/__init__.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/__main__.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/_config.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/_utils.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/basic_statistics/basic_statistics.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/cluster/__init__.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/cluster/dbscan.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/cluster/k_means.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/cluster/tests/test_dbscan.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/cluster/tests/test_kmeans.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/conftest.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/covariance/__init__.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/decomposition/__init__.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/doc/third-party-programs.txt +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/ensemble/__init__.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/ensemble/tests/test_forest.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/glob/__main__.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/glob/dispatcher.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/linear_model/coordinate_descent.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/linear_model/logistic_path.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/linear_model/ridge.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/linear_model/tests/test_logreg.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/manifold/__init__.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/manifold/t_sne.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/manifold/tests/test_tsne.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/metrics/__init__.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/metrics/pairwise.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/metrics/ranking.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/metrics/tests/test_metrics.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/model_selection/__init__.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/model_selection/split.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/model_selection/tests/test_model_selection.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/neighbors/__init__.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/preview/__init__.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/preview/cluster/__init__.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/preview/cluster/_common.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/preview/covariance/__init__.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/spmd/__init__.py +0 -0
- {scikit_learn_intelex-2024.3.0.data/data/Lib/site-packages/sklearnex → scikit_learn_intelex-2024.5.0.data/data/Lib/site-packages/sklearnex/spmd}/basic_statistics/__init__.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/spmd/basic_statistics/basic_statistics.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/spmd/cluster/__init__.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/spmd/cluster/dbscan.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/spmd/cluster/kmeans.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/spmd/covariance/__init__.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/spmd/covariance/covariance.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/spmd/decomposition/__init__.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/spmd/decomposition/pca.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/spmd/ensemble/__init__.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/spmd/ensemble/forest.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/spmd/linear_model/__init__.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/spmd/linear_model/linear_model.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/spmd/linear_model/logistic_regression.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/spmd/neighbors/__init__.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/spmd/neighbors/neighbors.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/svm/__init__.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/svm/tests/test_svm.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/tests/test_config.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/tests/test_monkeypatch.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/tests/test_parallel.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/utils/parallel.py +0 -0
- {scikit_learn_intelex-2024.3.0.data → scikit_learn_intelex-2024.5.0.data}/data/Lib/site-packages/sklearnex/utils/validation.py +0 -0
- {scikit_learn_intelex-2024.3.0.dist-info → scikit_learn_intelex-2024.5.0.dist-info}/LICENSE.txt +0 -0
- {scikit_learn_intelex-2024.3.0.dist-info → scikit_learn_intelex-2024.5.0.dist-info}/top_level.txt +0 -0
|
@@ -17,6 +17,10 @@
|
|
|
17
17
|
import numpy as np
|
|
18
18
|
import pytest
|
|
19
19
|
from numpy.testing import assert_allclose
|
|
20
|
+
from sklearn.covariance.tests.test_covariance import (
|
|
21
|
+
test_covariance,
|
|
22
|
+
test_EmpiricalCovariance_validates_mahalanobis,
|
|
23
|
+
)
|
|
20
24
|
|
|
21
25
|
from onedal.tests.utils._dataframes_support import (
|
|
22
26
|
_convert_to_dataframe,
|
|
@@ -26,13 +30,14 @@ from onedal.tests.utils._dataframes_support import (
|
|
|
26
30
|
|
|
27
31
|
@pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
|
|
28
32
|
@pytest.mark.parametrize("dtype", [np.float32, np.float64])
|
|
29
|
-
|
|
33
|
+
@pytest.mark.parametrize("assume_centered", [True, False])
|
|
34
|
+
def test_sklearnex_partial_fit_on_gold_data(dataframe, queue, dtype, assume_centered):
|
|
30
35
|
from sklearnex.covariance import IncrementalEmpiricalCovariance
|
|
31
36
|
|
|
32
37
|
X = np.array([[0, 1], [0, 1]])
|
|
33
38
|
X = X.astype(dtype)
|
|
34
39
|
X_split = np.array_split(X, 2)
|
|
35
|
-
inccov = IncrementalEmpiricalCovariance()
|
|
40
|
+
inccov = IncrementalEmpiricalCovariance(assume_centered=assume_centered)
|
|
36
41
|
|
|
37
42
|
for i in range(2):
|
|
38
43
|
X_split_df = _convert_to_dataframe(
|
|
@@ -40,8 +45,12 @@ def test_sklearnex_partial_fit_on_gold_data(dataframe, queue, dtype):
|
|
|
40
45
|
)
|
|
41
46
|
result = inccov.partial_fit(X_split_df)
|
|
42
47
|
|
|
43
|
-
|
|
44
|
-
|
|
48
|
+
if assume_centered:
|
|
49
|
+
expected_covariance = np.array([[0, 0], [0, 1]])
|
|
50
|
+
expected_means = np.array([0, 0])
|
|
51
|
+
else:
|
|
52
|
+
expected_covariance = np.array([[0, 0], [0, 0]])
|
|
53
|
+
expected_means = np.array([0, 1])
|
|
45
54
|
|
|
46
55
|
assert_allclose(expected_covariance, result.covariance_)
|
|
47
56
|
assert_allclose(expected_means, result.location_)
|
|
@@ -49,7 +58,7 @@ def test_sklearnex_partial_fit_on_gold_data(dataframe, queue, dtype):
|
|
|
49
58
|
X = np.array([[1, 2], [3, 6]])
|
|
50
59
|
X = X.astype(dtype)
|
|
51
60
|
X_split = np.array_split(X, 2)
|
|
52
|
-
inccov = IncrementalEmpiricalCovariance()
|
|
61
|
+
inccov = IncrementalEmpiricalCovariance(assume_centered=assume_centered)
|
|
53
62
|
|
|
54
63
|
for i in range(2):
|
|
55
64
|
X_split_df = _convert_to_dataframe(
|
|
@@ -57,8 +66,12 @@ def test_sklearnex_partial_fit_on_gold_data(dataframe, queue, dtype):
|
|
|
57
66
|
)
|
|
58
67
|
result = inccov.partial_fit(X_split_df)
|
|
59
68
|
|
|
60
|
-
|
|
61
|
-
|
|
69
|
+
if assume_centered:
|
|
70
|
+
expected_covariance = np.array([[5, 10], [10, 20]])
|
|
71
|
+
expected_means = np.array([0, 0])
|
|
72
|
+
else:
|
|
73
|
+
expected_covariance = np.array([[1, 2], [2, 4]])
|
|
74
|
+
expected_means = np.array([2, 4])
|
|
62
75
|
|
|
63
76
|
assert_allclose(expected_covariance, result.covariance_)
|
|
64
77
|
assert_allclose(expected_means, result.location_)
|
|
@@ -87,9 +100,9 @@ def test_sklearnex_fit_on_gold_data(dataframe, queue, batch_size, dtype):
|
|
|
87
100
|
|
|
88
101
|
|
|
89
102
|
@pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
|
|
90
|
-
@pytest.mark.parametrize("num_batches", [2,
|
|
91
|
-
@pytest.mark.parametrize("row_count", [100, 1000
|
|
92
|
-
@pytest.mark.parametrize("column_count", [10, 100
|
|
103
|
+
@pytest.mark.parametrize("num_batches", [2, 10])
|
|
104
|
+
@pytest.mark.parametrize("row_count", [100, 1000])
|
|
105
|
+
@pytest.mark.parametrize("column_count", [10, 100])
|
|
93
106
|
@pytest.mark.parametrize("dtype", [np.float32, np.float64])
|
|
94
107
|
def test_sklearnex_partial_fit_on_random_data(
|
|
95
108
|
dataframe, queue, num_batches, row_count, column_count, dtype
|
|
@@ -117,12 +130,13 @@ def test_sklearnex_partial_fit_on_random_data(
|
|
|
117
130
|
|
|
118
131
|
|
|
119
132
|
@pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
|
|
120
|
-
@pytest.mark.parametrize("num_batches", [2,
|
|
121
|
-
@pytest.mark.parametrize("row_count", [100, 1000
|
|
122
|
-
@pytest.mark.parametrize("column_count", [10, 100
|
|
133
|
+
@pytest.mark.parametrize("num_batches", [2, 10])
|
|
134
|
+
@pytest.mark.parametrize("row_count", [100, 1000])
|
|
135
|
+
@pytest.mark.parametrize("column_count", [10, 100])
|
|
123
136
|
@pytest.mark.parametrize("dtype", [np.float32, np.float64])
|
|
137
|
+
@pytest.mark.parametrize("assume_centered", [True, False])
|
|
124
138
|
def test_sklearnex_fit_on_random_data(
|
|
125
|
-
dataframe, queue, num_batches, row_count, column_count, dtype
|
|
139
|
+
dataframe, queue, num_batches, row_count, column_count, dtype, assume_centered
|
|
126
140
|
):
|
|
127
141
|
from sklearnex.covariance import IncrementalEmpiricalCovariance
|
|
128
142
|
|
|
@@ -132,12 +146,35 @@ def test_sklearnex_fit_on_random_data(
|
|
|
132
146
|
X = X.astype(dtype)
|
|
133
147
|
X_df = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
|
|
134
148
|
batch_size = row_count // num_batches
|
|
135
|
-
inccov = IncrementalEmpiricalCovariance(
|
|
149
|
+
inccov = IncrementalEmpiricalCovariance(
|
|
150
|
+
batch_size=batch_size, assume_centered=assume_centered
|
|
151
|
+
)
|
|
136
152
|
|
|
137
153
|
result = inccov.fit(X_df)
|
|
138
154
|
|
|
139
|
-
|
|
140
|
-
|
|
155
|
+
if assume_centered:
|
|
156
|
+
expected_covariance = np.dot(X.T, X) / X.shape[0]
|
|
157
|
+
expected_means = np.zeros_like(X[0])
|
|
158
|
+
else:
|
|
159
|
+
expected_covariance = np.cov(X.T, bias=1)
|
|
160
|
+
expected_means = np.mean(X, axis=0)
|
|
141
161
|
|
|
142
162
|
assert_allclose(expected_covariance, result.covariance_, atol=1e-6)
|
|
143
163
|
assert_allclose(expected_means, result.location_, atol=1e-6)
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
# Monkeypatch IncrementalEmpiricalCovariance into relevant sklearn.covariance tests
|
|
167
|
+
@pytest.mark.allow_sklearn_fallback
|
|
168
|
+
@pytest.mark.parametrize(
|
|
169
|
+
"sklearn_test",
|
|
170
|
+
[
|
|
171
|
+
test_covariance,
|
|
172
|
+
test_EmpiricalCovariance_validates_mahalanobis,
|
|
173
|
+
],
|
|
174
|
+
)
|
|
175
|
+
def test_IncrementalEmpiricalCovariance_against_sklearn(monkeypatch, sklearn_test):
|
|
176
|
+
from sklearnex.covariance import IncrementalEmpiricalCovariance
|
|
177
|
+
|
|
178
|
+
class_name = ".".join([sklearn_test.__module__, "EmpiricalCovariance"])
|
|
179
|
+
monkeypatch.setattr(class_name, IncrementalEmpiricalCovariance)
|
|
180
|
+
sklearn_test()
|
|
@@ -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
|
|
|
@@ -95,6 +110,7 @@ if daal_check_version((2024, "P", 100)):
|
|
|
95
110
|
self._fit(X)
|
|
96
111
|
return self
|
|
97
112
|
|
|
113
|
+
@wrap_output_data
|
|
98
114
|
def _fit(self, X):
|
|
99
115
|
if sklearn_check_version("1.2"):
|
|
100
116
|
self._validate_params()
|
|
@@ -106,7 +122,7 @@ if daal_check_version((2024, "P", 100)):
|
|
|
106
122
|
target_type=numbers.Integral,
|
|
107
123
|
)
|
|
108
124
|
|
|
109
|
-
|
|
125
|
+
return dispatch(
|
|
110
126
|
self,
|
|
111
127
|
"fit",
|
|
112
128
|
{
|
|
@@ -115,7 +131,6 @@ if daal_check_version((2024, "P", 100)):
|
|
|
115
131
|
},
|
|
116
132
|
X,
|
|
117
133
|
)
|
|
118
|
-
return U, S, Vt
|
|
119
134
|
|
|
120
135
|
def _onedal_fit(self, X, queue=None):
|
|
121
136
|
X = self._validate_data(
|
|
@@ -128,7 +143,7 @@ if daal_check_version((2024, "P", 100)):
|
|
|
128
143
|
onedal_params = {
|
|
129
144
|
"n_components": self.n_components,
|
|
130
145
|
"is_deterministic": True,
|
|
131
|
-
"method": "cov",
|
|
146
|
+
"method": "svd" if self._fit_svd_solver == "onedal_svd" else "cov",
|
|
132
147
|
"whiten": self.whiten,
|
|
133
148
|
}
|
|
134
149
|
self._onedal_estimator = onedal_PCA(**onedal_params)
|
|
@@ -139,7 +154,13 @@ if daal_check_version((2024, "P", 100)):
|
|
|
139
154
|
S = self.singular_values_
|
|
140
155
|
Vt = self.components_
|
|
141
156
|
|
|
142
|
-
|
|
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
|
|
143
164
|
|
|
144
165
|
@wrap_output_data
|
|
145
166
|
def transform(self, X):
|
|
@@ -155,34 +176,39 @@ if daal_check_version((2024, "P", 100)):
|
|
|
155
176
|
|
|
156
177
|
def _onedal_transform(self, X, queue=None):
|
|
157
178
|
check_is_fitted(self)
|
|
179
|
+
if sklearn_check_version("1.0"):
|
|
180
|
+
self._check_feature_names(X, reset=False)
|
|
158
181
|
X = self._validate_data(
|
|
159
182
|
X,
|
|
160
183
|
dtype=[np.float64, np.float32],
|
|
161
184
|
reset=False,
|
|
162
185
|
)
|
|
163
186
|
self._validate_n_features_in_after_fitting(X)
|
|
164
|
-
if sklearn_check_version("1.0"):
|
|
165
|
-
self._check_feature_names(X, reset=False)
|
|
166
187
|
|
|
167
188
|
return self._onedal_estimator.predict(X, queue=queue)
|
|
168
189
|
|
|
169
|
-
@wrap_output_data
|
|
170
190
|
def fit_transform(self, X, y=None):
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
# oneDAL PCA was fit
|
|
174
|
-
X_transformed = self._onedal_transform(X)
|
|
175
|
-
return X_transformed
|
|
191
|
+
if sklearn_check_version("1.5"):
|
|
192
|
+
U, S, Vt, X_fit, x_is_centered, xp = self._fit(X)
|
|
176
193
|
else:
|
|
194
|
+
U, S, Vt = self._fit(X)
|
|
195
|
+
X_fit = X
|
|
196
|
+
if hasattr(self, "_onedal_estimator"):
|
|
197
|
+
# oneDAL PCA was fit
|
|
198
|
+
return self.transform(X)
|
|
199
|
+
elif U is not None:
|
|
177
200
|
# Scikit-learn PCA was fit
|
|
178
201
|
U = U[:, : self.n_components_]
|
|
179
202
|
|
|
180
203
|
if self.whiten:
|
|
181
|
-
U *= sqrt(
|
|
204
|
+
U *= sqrt(X_fit.shape[0] - 1)
|
|
182
205
|
else:
|
|
183
206
|
U *= S[: self.n_components_]
|
|
184
207
|
|
|
185
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)
|
|
186
212
|
|
|
187
213
|
def _onedal_supported(self, method_name, X):
|
|
188
214
|
class_name = self.__class__.__name__
|
|
@@ -200,7 +226,13 @@ if daal_check_version((2024, "P", 100)):
|
|
|
200
226
|
),
|
|
201
227
|
(
|
|
202
228
|
self._is_solver_compatible_with_onedal(shape_tuple),
|
|
203
|
-
|
|
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
|
+
),
|
|
204
236
|
),
|
|
205
237
|
(not issparse(X), "oneDAL PCA does not support sparse data"),
|
|
206
238
|
]
|
|
@@ -255,7 +287,13 @@ if daal_check_version((2024, "P", 100)):
|
|
|
255
287
|
|
|
256
288
|
if self._fit_svd_solver == "auto":
|
|
257
289
|
if sklearn_check_version("1.1"):
|
|
258
|
-
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":
|
|
259
297
|
self._fit_svd_solver = "full"
|
|
260
298
|
elif 1 <= n_components < 0.8 * n_sf_min:
|
|
261
299
|
self._fit_svd_solver = "randomized"
|
|
@@ -289,7 +327,23 @@ if daal_check_version((2024, "P", 100)):
|
|
|
289
327
|
else:
|
|
290
328
|
self._fit_svd_solver = "full"
|
|
291
329
|
|
|
292
|
-
|
|
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"
|
|
293
347
|
return True
|
|
294
348
|
else:
|
|
295
349
|
return False
|
|
@@ -298,11 +352,9 @@ if daal_check_version((2024, "P", 100)):
|
|
|
298
352
|
self.n_samples_ = self._onedal_estimator.n_samples_
|
|
299
353
|
if sklearn_check_version("1.2"):
|
|
300
354
|
self.n_features_in_ = self._onedal_estimator.n_features_
|
|
301
|
-
elif sklearn_check_version("0.24"):
|
|
302
|
-
self.n_features_ = self._onedal_estimator.n_features_
|
|
303
|
-
self.n_features_in_ = self._onedal_estimator.n_features_
|
|
304
355
|
else:
|
|
305
356
|
self.n_features_ = self._onedal_estimator.n_features_
|
|
357
|
+
self.n_features_in_ = self._onedal_estimator.n_features_
|
|
306
358
|
self.n_components_ = self._onedal_estimator.n_components_
|
|
307
359
|
self.components_ = self._onedal_estimator.components_
|
|
308
360
|
self.mean_ = self._onedal_estimator.mean_
|
|
@@ -41,10 +41,10 @@ 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__
|
|
@@ -93,6 +93,7 @@ def get_patch_map_core(preview=False):
|
|
|
93
93
|
# Scikit-learn* modules
|
|
94
94
|
import sklearn as base_module
|
|
95
95
|
import sklearn.cluster as cluster_module
|
|
96
|
+
import sklearn.covariance as covariance_module
|
|
96
97
|
import sklearn.decomposition as decomposition_module
|
|
97
98
|
import sklearn.ensemble as ensemble_module
|
|
98
99
|
import sklearn.linear_model as linear_model_module
|
|
@@ -115,11 +116,17 @@ def get_patch_map_core(preview=False):
|
|
|
115
116
|
from .utils.parallel import _FuncWrapperOld as _FuncWrapper_sklearnex
|
|
116
117
|
|
|
117
118
|
from .cluster import DBSCAN as DBSCAN_sklearnex
|
|
119
|
+
from .covariance import (
|
|
120
|
+
IncrementalEmpiricalCovariance as IncrementalEmpiricalCovariance_sklearnex,
|
|
121
|
+
)
|
|
118
122
|
from .decomposition import PCA as PCA_sklearnex
|
|
119
123
|
from .ensemble import ExtraTreesClassifier as ExtraTreesClassifier_sklearnex
|
|
120
124
|
from .ensemble import ExtraTreesRegressor as ExtraTreesRegressor_sklearnex
|
|
121
125
|
from .ensemble import RandomForestClassifier as RandomForestClassifier_sklearnex
|
|
122
126
|
from .ensemble import RandomForestRegressor as RandomForestRegressor_sklearnex
|
|
127
|
+
from .linear_model import (
|
|
128
|
+
IncrementalLinearRegression as IncrementalLinearRegression_sklearnex,
|
|
129
|
+
)
|
|
123
130
|
from .linear_model import LinearRegression as LinearRegression_sklearnex
|
|
124
131
|
from .linear_model import LogisticRegression as LogisticRegression_sklearnex
|
|
125
132
|
from .neighbors import KNeighborsClassifier as KNeighborsClassifier_sklearnex
|
|
@@ -273,6 +280,30 @@ def get_patch_map_core(preview=False):
|
|
|
273
280
|
]
|
|
274
281
|
mapping["localoutlierfactor"] = mapping["lof"]
|
|
275
282
|
|
|
283
|
+
# IncrementalEmpiricalCovariance
|
|
284
|
+
mapping["incrementalempiricalcovariance"] = [
|
|
285
|
+
[
|
|
286
|
+
(
|
|
287
|
+
covariance_module,
|
|
288
|
+
"IncrementalEmpiricalCovariance",
|
|
289
|
+
IncrementalEmpiricalCovariance_sklearnex,
|
|
290
|
+
),
|
|
291
|
+
None,
|
|
292
|
+
]
|
|
293
|
+
]
|
|
294
|
+
|
|
295
|
+
# IncrementalLinearRegression
|
|
296
|
+
mapping["incrementallinearregression"] = [
|
|
297
|
+
[
|
|
298
|
+
(
|
|
299
|
+
linear_model_module,
|
|
300
|
+
"IncrementalLinearRegression",
|
|
301
|
+
IncrementalLinearRegression_sklearnex,
|
|
302
|
+
),
|
|
303
|
+
None,
|
|
304
|
+
]
|
|
305
|
+
]
|
|
306
|
+
|
|
276
307
|
# Configs
|
|
277
308
|
mapping["set_config"] = [
|
|
278
309
|
[(base_module, "set_config", set_config_sklearnex), None]
|
|
@@ -314,10 +345,10 @@ def get_patch_names():
|
|
|
314
345
|
def patch_sklearn(name=None, verbose=True, global_patch=False, preview=False):
|
|
315
346
|
if preview:
|
|
316
347
|
os.environ["SKLEARNEX_PREVIEW"] = "enabled_via_patch_sklearn"
|
|
317
|
-
if not sklearn_check_version("0.
|
|
348
|
+
if not sklearn_check_version("0.24"):
|
|
318
349
|
raise NotImplementedError(
|
|
319
350
|
"Intel(R) Extension for Scikit-learn* patches apply "
|
|
320
|
-
"for scikit-learn >= 0.
|
|
351
|
+
"for scikit-learn >= 0.24 only ..."
|
|
321
352
|
)
|
|
322
353
|
|
|
323
354
|
if global_patch:
|