scikit-learn-intelex 2025.0.0__py312-none-manylinux_2_28_x86_64.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.
- daal4py/__init__.py +73 -0
- daal4py/__main__.py +58 -0
- daal4py/_daal4py.cpython-312-x86_64-linux-gnu.so +0 -0
- daal4py/doc/third-party-programs.txt +424 -0
- daal4py/mb/__init__.py +19 -0
- daal4py/mb/model_builders.py +377 -0
- daal4py/mpi_transceiver.cpython-312-x86_64-linux-gnu.so +0 -0
- daal4py/sklearn/__init__.py +40 -0
- daal4py/sklearn/_n_jobs_support.py +242 -0
- daal4py/sklearn/_utils.py +241 -0
- daal4py/sklearn/cluster/__init__.py +20 -0
- daal4py/sklearn/cluster/dbscan.py +165 -0
- daal4py/sklearn/cluster/k_means.py +597 -0
- daal4py/sklearn/cluster/tests/test_dbscan.py +109 -0
- daal4py/sklearn/decomposition/__init__.py +19 -0
- daal4py/sklearn/decomposition/_pca.py +524 -0
- daal4py/sklearn/ensemble/AdaBoostClassifier.py +192 -0
- daal4py/sklearn/ensemble/GBTDAAL.py +318 -0
- daal4py/sklearn/ensemble/__init__.py +27 -0
- daal4py/sklearn/ensemble/_forest.py +1397 -0
- daal4py/sklearn/ensemble/tests/test_decision_forest.py +206 -0
- daal4py/sklearn/linear_model/__init__.py +29 -0
- daal4py/sklearn/linear_model/_coordinate_descent.py +848 -0
- daal4py/sklearn/linear_model/_linear.py +272 -0
- daal4py/sklearn/linear_model/_ridge.py +325 -0
- daal4py/sklearn/linear_model/coordinate_descent.py +17 -0
- daal4py/sklearn/linear_model/linear.py +17 -0
- daal4py/sklearn/linear_model/logistic_loss.py +195 -0
- daal4py/sklearn/linear_model/logistic_path.py +1026 -0
- daal4py/sklearn/linear_model/ridge.py +17 -0
- daal4py/sklearn/linear_model/tests/test_linear.py +196 -0
- daal4py/sklearn/linear_model/tests/test_ridge.py +69 -0
- daal4py/sklearn/manifold/__init__.py +19 -0
- daal4py/sklearn/manifold/_t_sne.py +405 -0
- daal4py/sklearn/metrics/__init__.py +20 -0
- daal4py/sklearn/metrics/_pairwise.py +155 -0
- daal4py/sklearn/metrics/_ranking.py +210 -0
- daal4py/sklearn/model_selection/__init__.py +19 -0
- daal4py/sklearn/model_selection/_split.py +309 -0
- daal4py/sklearn/model_selection/tests/test_split.py +56 -0
- daal4py/sklearn/monkeypatch/__init__.py +0 -0
- daal4py/sklearn/monkeypatch/dispatcher.py +232 -0
- daal4py/sklearn/monkeypatch/tests/_models_info.py +161 -0
- daal4py/sklearn/monkeypatch/tests/test_monkeypatch.py +71 -0
- daal4py/sklearn/monkeypatch/tests/test_patching.py +87 -0
- daal4py/sklearn/monkeypatch/tests/utils/_launch_algorithms.py +118 -0
- daal4py/sklearn/neighbors/__init__.py +21 -0
- daal4py/sklearn/neighbors/_base.py +503 -0
- daal4py/sklearn/neighbors/_classification.py +139 -0
- daal4py/sklearn/neighbors/_regression.py +74 -0
- daal4py/sklearn/neighbors/_unsupervised.py +55 -0
- daal4py/sklearn/neighbors/tests/test_kneighbors.py +113 -0
- daal4py/sklearn/svm/__init__.py +19 -0
- daal4py/sklearn/svm/svm.py +734 -0
- daal4py/sklearn/utils/__init__.py +21 -0
- daal4py/sklearn/utils/base.py +75 -0
- daal4py/sklearn/utils/tests/test_utils.py +51 -0
- daal4py/sklearn/utils/validation.py +693 -0
- onedal/__init__.py +83 -0
- onedal/_config.py +53 -0
- onedal/_device_offload.py +229 -0
- onedal/_onedal_py_dpc.cpython-312-x86_64-linux-gnu.so +0 -0
- onedal/_onedal_py_host.cpython-312-x86_64-linux-gnu.so +0 -0
- onedal/_onedal_py_spmd_dpc.cpython-312-x86_64-linux-gnu.so +0 -0
- onedal/basic_statistics/__init__.py +20 -0
- onedal/basic_statistics/basic_statistics.py +107 -0
- onedal/basic_statistics/incremental_basic_statistics.py +160 -0
- onedal/basic_statistics/tests/test_basic_statistics.py +298 -0
- onedal/basic_statistics/tests/test_incremental_basic_statistics.py +196 -0
- onedal/cluster/__init__.py +27 -0
- onedal/cluster/dbscan.py +110 -0
- onedal/cluster/kmeans.py +560 -0
- onedal/cluster/kmeans_init.py +115 -0
- onedal/cluster/tests/test_dbscan.py +125 -0
- onedal/cluster/tests/test_kmeans.py +88 -0
- onedal/cluster/tests/test_kmeans_init.py +93 -0
- onedal/common/_base.py +38 -0
- onedal/common/_estimator_checks.py +47 -0
- onedal/common/_mixin.py +62 -0
- onedal/common/_policy.py +59 -0
- onedal/common/_spmd_policy.py +30 -0
- onedal/common/hyperparameters.py +116 -0
- onedal/common/tests/test_policy.py +75 -0
- onedal/covariance/__init__.py +20 -0
- onedal/covariance/covariance.py +125 -0
- onedal/covariance/incremental_covariance.py +146 -0
- onedal/covariance/tests/test_covariance.py +50 -0
- onedal/covariance/tests/test_incremental_covariance.py +122 -0
- onedal/datatypes/__init__.py +19 -0
- onedal/datatypes/_data_conversion.py +95 -0
- onedal/datatypes/tests/test_data.py +235 -0
- onedal/decomposition/__init__.py +20 -0
- onedal/decomposition/incremental_pca.py +204 -0
- onedal/decomposition/pca.py +186 -0
- onedal/decomposition/tests/test_incremental_pca.py +198 -0
- onedal/ensemble/__init__.py +29 -0
- onedal/ensemble/forest.py +720 -0
- onedal/ensemble/tests/test_random_forest.py +97 -0
- onedal/linear_model/__init__.py +27 -0
- onedal/linear_model/incremental_linear_model.py +258 -0
- onedal/linear_model/linear_model.py +329 -0
- onedal/linear_model/logistic_regression.py +249 -0
- onedal/linear_model/tests/test_incremental_linear_regression.py +168 -0
- onedal/linear_model/tests/test_incremental_ridge_regression.py +107 -0
- onedal/linear_model/tests/test_linear_regression.py +149 -0
- onedal/linear_model/tests/test_logistic_regression.py +95 -0
- onedal/linear_model/tests/test_ridge.py +95 -0
- onedal/neighbors/__init__.py +19 -0
- onedal/neighbors/neighbors.py +778 -0
- onedal/neighbors/tests/test_knn_classification.py +49 -0
- onedal/primitives/__init__.py +27 -0
- onedal/primitives/get_tree.py +25 -0
- onedal/primitives/kernel_functions.py +153 -0
- onedal/primitives/tests/test_kernel_functions.py +159 -0
- onedal/spmd/__init__.py +25 -0
- onedal/spmd/_base.py +30 -0
- onedal/spmd/basic_statistics/__init__.py +20 -0
- onedal/spmd/basic_statistics/basic_statistics.py +30 -0
- onedal/spmd/basic_statistics/incremental_basic_statistics.py +69 -0
- onedal/spmd/cluster/__init__.py +28 -0
- onedal/spmd/cluster/dbscan.py +23 -0
- onedal/spmd/cluster/kmeans.py +56 -0
- onedal/spmd/covariance/__init__.py +20 -0
- onedal/spmd/covariance/covariance.py +26 -0
- onedal/spmd/covariance/incremental_covariance.py +82 -0
- onedal/spmd/decomposition/__init__.py +20 -0
- onedal/spmd/decomposition/incremental_pca.py +117 -0
- onedal/spmd/decomposition/pca.py +26 -0
- onedal/spmd/ensemble/__init__.py +19 -0
- onedal/spmd/ensemble/forest.py +28 -0
- onedal/spmd/linear_model/__init__.py +21 -0
- onedal/spmd/linear_model/incremental_linear_model.py +97 -0
- onedal/spmd/linear_model/linear_model.py +30 -0
- onedal/spmd/linear_model/logistic_regression.py +38 -0
- onedal/spmd/neighbors/__init__.py +19 -0
- onedal/spmd/neighbors/neighbors.py +75 -0
- onedal/svm/__init__.py +19 -0
- onedal/svm/svm.py +556 -0
- onedal/svm/tests/test_csr_svm.py +351 -0
- onedal/svm/tests/test_nusvc.py +204 -0
- onedal/svm/tests/test_nusvr.py +210 -0
- onedal/svm/tests/test_svc.py +168 -0
- onedal/svm/tests/test_svr.py +243 -0
- onedal/tests/test_common.py +41 -0
- onedal/tests/utils/_dataframes_support.py +168 -0
- onedal/tests/utils/_device_selection.py +107 -0
- onedal/utils/__init__.py +49 -0
- onedal/utils/_array_api.py +91 -0
- onedal/utils/validation.py +432 -0
- scikit_learn_intelex-2025.0.0.dist-info/LICENSE.txt +202 -0
- scikit_learn_intelex-2025.0.0.dist-info/METADATA +231 -0
- scikit_learn_intelex-2025.0.0.dist-info/RECORD +278 -0
- scikit_learn_intelex-2025.0.0.dist-info/WHEEL +5 -0
- scikit_learn_intelex-2025.0.0.dist-info/top_level.txt +3 -0
- sklearnex/__init__.py +65 -0
- sklearnex/__main__.py +58 -0
- sklearnex/_config.py +98 -0
- sklearnex/_device_offload.py +121 -0
- sklearnex/_utils.py +109 -0
- sklearnex/basic_statistics/__init__.py +20 -0
- sklearnex/basic_statistics/basic_statistics.py +140 -0
- sklearnex/basic_statistics/incremental_basic_statistics.py +288 -0
- sklearnex/basic_statistics/tests/test_basic_statistics.py +251 -0
- sklearnex/basic_statistics/tests/test_incremental_basic_statistics.py +384 -0
- sklearnex/cluster/__init__.py +20 -0
- sklearnex/cluster/dbscan.py +192 -0
- sklearnex/cluster/k_means.py +383 -0
- sklearnex/cluster/tests/test_dbscan.py +38 -0
- sklearnex/cluster/tests/test_kmeans.py +153 -0
- sklearnex/conftest.py +73 -0
- sklearnex/covariance/__init__.py +19 -0
- sklearnex/covariance/incremental_covariance.py +368 -0
- sklearnex/covariance/tests/test_incremental_covariance.py +226 -0
- sklearnex/decomposition/__init__.py +19 -0
- sklearnex/decomposition/pca.py +414 -0
- sklearnex/decomposition/tests/test_pca.py +58 -0
- sklearnex/dispatcher.py +543 -0
- sklearnex/doc/third-party-programs.txt +424 -0
- sklearnex/ensemble/__init__.py +29 -0
- sklearnex/ensemble/_forest.py +2016 -0
- sklearnex/ensemble/tests/test_forest.py +120 -0
- sklearnex/glob/__main__.py +72 -0
- sklearnex/glob/dispatcher.py +101 -0
- sklearnex/linear_model/__init__.py +32 -0
- sklearnex/linear_model/coordinate_descent.py +30 -0
- sklearnex/linear_model/incremental_linear.py +463 -0
- sklearnex/linear_model/incremental_ridge.py +418 -0
- sklearnex/linear_model/linear.py +302 -0
- sklearnex/linear_model/logistic_path.py +17 -0
- sklearnex/linear_model/logistic_regression.py +403 -0
- sklearnex/linear_model/ridge.py +24 -0
- sklearnex/linear_model/tests/test_incremental_linear.py +203 -0
- sklearnex/linear_model/tests/test_incremental_ridge.py +153 -0
- sklearnex/linear_model/tests/test_linear.py +142 -0
- sklearnex/linear_model/tests/test_logreg.py +134 -0
- sklearnex/manifold/__init__.py +19 -0
- sklearnex/manifold/t_sne.py +21 -0
- sklearnex/manifold/tests/test_tsne.py +26 -0
- sklearnex/metrics/__init__.py +23 -0
- sklearnex/metrics/pairwise.py +22 -0
- sklearnex/metrics/ranking.py +20 -0
- sklearnex/metrics/tests/test_metrics.py +39 -0
- sklearnex/model_selection/__init__.py +21 -0
- sklearnex/model_selection/split.py +22 -0
- sklearnex/model_selection/tests/test_model_selection.py +34 -0
- sklearnex/neighbors/__init__.py +27 -0
- sklearnex/neighbors/_lof.py +231 -0
- sklearnex/neighbors/common.py +310 -0
- sklearnex/neighbors/knn_classification.py +226 -0
- sklearnex/neighbors/knn_regression.py +203 -0
- sklearnex/neighbors/knn_unsupervised.py +170 -0
- sklearnex/neighbors/tests/test_neighbors.py +80 -0
- sklearnex/preview/__init__.py +17 -0
- sklearnex/preview/covariance/__init__.py +19 -0
- sklearnex/preview/covariance/covariance.py +133 -0
- sklearnex/preview/covariance/tests/test_covariance.py +66 -0
- sklearnex/preview/decomposition/__init__.py +19 -0
- sklearnex/preview/decomposition/incremental_pca.py +228 -0
- sklearnex/preview/decomposition/tests/test_incremental_pca.py +266 -0
- sklearnex/preview/linear_model/__init__.py +19 -0
- sklearnex/preview/linear_model/ridge.py +419 -0
- sklearnex/preview/linear_model/tests/test_ridge.py +102 -0
- sklearnex/spmd/__init__.py +25 -0
- sklearnex/spmd/basic_statistics/__init__.py +20 -0
- sklearnex/spmd/basic_statistics/basic_statistics.py +21 -0
- sklearnex/spmd/basic_statistics/incremental_basic_statistics.py +30 -0
- sklearnex/spmd/basic_statistics/tests/test_basic_statistics_spmd.py +107 -0
- sklearnex/spmd/basic_statistics/tests/test_incremental_basic_statistics_spmd.py +307 -0
- sklearnex/spmd/cluster/__init__.py +30 -0
- sklearnex/spmd/cluster/dbscan.py +50 -0
- sklearnex/spmd/cluster/kmeans.py +21 -0
- sklearnex/spmd/cluster/tests/test_dbscan_spmd.py +97 -0
- sklearnex/spmd/cluster/tests/test_kmeans_spmd.py +172 -0
- sklearnex/spmd/covariance/__init__.py +20 -0
- sklearnex/spmd/covariance/covariance.py +21 -0
- sklearnex/spmd/covariance/incremental_covariance.py +37 -0
- sklearnex/spmd/covariance/tests/test_covariance_spmd.py +107 -0
- sklearnex/spmd/covariance/tests/test_incremental_covariance_spmd.py +184 -0
- sklearnex/spmd/decomposition/__init__.py +20 -0
- sklearnex/spmd/decomposition/incremental_pca.py +30 -0
- sklearnex/spmd/decomposition/pca.py +21 -0
- sklearnex/spmd/decomposition/tests/test_incremental_pca_spmd.py +269 -0
- sklearnex/spmd/decomposition/tests/test_pca_spmd.py +128 -0
- sklearnex/spmd/ensemble/__init__.py +19 -0
- sklearnex/spmd/ensemble/forest.py +71 -0
- sklearnex/spmd/ensemble/tests/test_forest_spmd.py +265 -0
- sklearnex/spmd/linear_model/__init__.py +21 -0
- sklearnex/spmd/linear_model/incremental_linear_model.py +35 -0
- sklearnex/spmd/linear_model/linear_model.py +21 -0
- sklearnex/spmd/linear_model/logistic_regression.py +21 -0
- sklearnex/spmd/linear_model/tests/test_incremental_linear_spmd.py +329 -0
- sklearnex/spmd/linear_model/tests/test_linear_regression_spmd.py +145 -0
- sklearnex/spmd/linear_model/tests/test_logistic_regression_spmd.py +166 -0
- sklearnex/spmd/neighbors/__init__.py +19 -0
- sklearnex/spmd/neighbors/neighbors.py +25 -0
- sklearnex/spmd/neighbors/tests/test_neighbors_spmd.py +288 -0
- sklearnex/svm/__init__.py +29 -0
- sklearnex/svm/_common.py +328 -0
- sklearnex/svm/nusvc.py +332 -0
- sklearnex/svm/nusvr.py +148 -0
- sklearnex/svm/svc.py +360 -0
- sklearnex/svm/svr.py +149 -0
- sklearnex/svm/tests/test_svm.py +93 -0
- sklearnex/tests/_utils.py +328 -0
- sklearnex/tests/_utils_spmd.py +198 -0
- sklearnex/tests/test_common.py +54 -0
- sklearnex/tests/test_config.py +43 -0
- sklearnex/tests/test_memory_usage.py +291 -0
- sklearnex/tests/test_monkeypatch.py +276 -0
- sklearnex/tests/test_n_jobs_support.py +103 -0
- sklearnex/tests/test_parallel.py +48 -0
- sklearnex/tests/test_patching.py +385 -0
- sklearnex/tests/test_run_to_run_stability.py +296 -0
- sklearnex/utils/__init__.py +19 -0
- sklearnex/utils/_array_api.py +82 -0
- sklearnex/utils/parallel.py +59 -0
- sklearnex/utils/tests/test_finite.py +89 -0
- sklearnex/utils/validation.py +17 -0
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
# ==============================================================================
|
|
2
|
+
# Copyright 2021 Intel Corporation
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
# ==============================================================================
|
|
16
|
+
|
|
17
|
+
import numpy as np
|
|
18
|
+
import pytest
|
|
19
|
+
from numpy.testing import assert_array_almost_equal, assert_array_equal
|
|
20
|
+
from scipy import sparse as sp
|
|
21
|
+
from sklearn import datasets
|
|
22
|
+
from sklearn.datasets import make_classification
|
|
23
|
+
|
|
24
|
+
from onedal.common._mixin import ClassifierMixin
|
|
25
|
+
from onedal.svm import SVC, SVR
|
|
26
|
+
from onedal.tests.utils._device_selection import (
|
|
27
|
+
get_queues,
|
|
28
|
+
pass_if_not_implemented_for_gpu,
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def check_svm_model_equal(
|
|
33
|
+
queue, dense_svm, sparse_svm, X_train, y_train, X_test, decimal=6
|
|
34
|
+
):
|
|
35
|
+
dense_svm.fit(X_train.toarray(), y_train, queue=queue)
|
|
36
|
+
if sp.issparse(X_test):
|
|
37
|
+
X_test_dense = X_test.toarray()
|
|
38
|
+
else:
|
|
39
|
+
X_test_dense = X_test
|
|
40
|
+
sparse_svm.fit(X_train, y_train, queue=queue)
|
|
41
|
+
assert sp.issparse(sparse_svm.support_vectors_)
|
|
42
|
+
assert sp.issparse(sparse_svm.dual_coef_)
|
|
43
|
+
assert_array_almost_equal(
|
|
44
|
+
dense_svm.support_vectors_, sparse_svm.support_vectors_.toarray(), decimal
|
|
45
|
+
)
|
|
46
|
+
assert_array_almost_equal(
|
|
47
|
+
dense_svm.dual_coef_, sparse_svm.dual_coef_.toarray(), decimal
|
|
48
|
+
)
|
|
49
|
+
assert_array_almost_equal(dense_svm.support_, sparse_svm.support_)
|
|
50
|
+
assert_array_almost_equal(
|
|
51
|
+
dense_svm.predict(X_test_dense, queue=queue),
|
|
52
|
+
sparse_svm.predict(X_test, queue=queue),
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
if isinstance(dense_svm, ClassifierMixin) and isinstance(sparse_svm, ClassifierMixin):
|
|
56
|
+
assert_array_almost_equal(
|
|
57
|
+
dense_svm.decision_function(X_test_dense, queue=queue),
|
|
58
|
+
sparse_svm.decision_function(X_test, queue=queue),
|
|
59
|
+
decimal,
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def _test_simple_dataset(queue, kernel):
|
|
64
|
+
X = np.array([[-2, -1], [-1, -1], [-1, -2], [1, 1], [1, 2], [2, 1]])
|
|
65
|
+
sparse_X = sp.lil_matrix(X)
|
|
66
|
+
Y = [1, 1, 1, 2, 2, 2]
|
|
67
|
+
|
|
68
|
+
X2 = np.array([[-1, -1], [2, 2], [3, 2]])
|
|
69
|
+
sparse_X2 = sp.dok_matrix(X2)
|
|
70
|
+
|
|
71
|
+
dataset = sparse_X, Y, sparse_X2
|
|
72
|
+
clf0 = SVC(kernel=kernel, gamma=1)
|
|
73
|
+
clf1 = SVC(kernel=kernel, gamma=1)
|
|
74
|
+
check_svm_model_equal(queue, clf0, clf1, *dataset)
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
@pass_if_not_implemented_for_gpu(reason="csr svm is not implemented")
|
|
78
|
+
@pytest.mark.parametrize(
|
|
79
|
+
"queue",
|
|
80
|
+
get_queues("cpu")
|
|
81
|
+
+ [
|
|
82
|
+
pytest.param(
|
|
83
|
+
get_queues("gpu"),
|
|
84
|
+
marks=pytest.mark.xfail(
|
|
85
|
+
reason="raises UnknownError instead of RuntimeError "
|
|
86
|
+
"with unimplemented message"
|
|
87
|
+
),
|
|
88
|
+
)
|
|
89
|
+
],
|
|
90
|
+
)
|
|
91
|
+
@pytest.mark.parametrize("kernel", ["linear", "rbf"])
|
|
92
|
+
def test_simple_dataset(queue, kernel):
|
|
93
|
+
_test_simple_dataset(queue, kernel)
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def _test_binary_dataset(queue, kernel):
|
|
97
|
+
X, y = make_classification(n_samples=80, n_features=20, n_classes=2, random_state=0)
|
|
98
|
+
sparse_X = sp.csr_matrix(X)
|
|
99
|
+
|
|
100
|
+
dataset = sparse_X, y, sparse_X
|
|
101
|
+
clf0 = SVC(kernel=kernel)
|
|
102
|
+
clf1 = SVC(kernel=kernel)
|
|
103
|
+
check_svm_model_equal(queue, clf0, clf1, *dataset)
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
@pass_if_not_implemented_for_gpu(reason="csr svm is not implemented")
|
|
107
|
+
@pytest.mark.parametrize(
|
|
108
|
+
"queue",
|
|
109
|
+
get_queues("cpu")
|
|
110
|
+
+ [
|
|
111
|
+
pytest.param(
|
|
112
|
+
get_queues("gpu"),
|
|
113
|
+
marks=pytest.mark.xfail(
|
|
114
|
+
reason="raises UnknownError for linear and rbf, "
|
|
115
|
+
"Unimplemented error with inconsistent error message "
|
|
116
|
+
"for poly and sigmoid"
|
|
117
|
+
),
|
|
118
|
+
)
|
|
119
|
+
],
|
|
120
|
+
)
|
|
121
|
+
@pytest.mark.parametrize("kernel", ["linear", "rbf", "poly", "sigmoid"])
|
|
122
|
+
def test_binary_dataset(queue, kernel):
|
|
123
|
+
_test_binary_dataset(queue, kernel)
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
def _test_iris(queue, kernel):
|
|
127
|
+
iris = datasets.load_iris()
|
|
128
|
+
rng = np.random.RandomState(0)
|
|
129
|
+
perm = rng.permutation(iris.target.size)
|
|
130
|
+
iris.data = iris.data[perm]
|
|
131
|
+
iris.target = iris.target[perm]
|
|
132
|
+
sparse_iris_data = sp.csr_matrix(iris.data)
|
|
133
|
+
|
|
134
|
+
dataset = sparse_iris_data, iris.target, sparse_iris_data
|
|
135
|
+
|
|
136
|
+
clf0 = SVC(kernel=kernel)
|
|
137
|
+
clf1 = SVC(kernel=kernel)
|
|
138
|
+
check_svm_model_equal(queue, clf0, clf1, *dataset, decimal=2)
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
@pass_if_not_implemented_for_gpu(reason="csr svm is not implemented")
|
|
142
|
+
@pytest.mark.parametrize("queue", get_queues())
|
|
143
|
+
@pytest.mark.parametrize("kernel", ["linear", "rbf", "poly", "sigmoid"])
|
|
144
|
+
def test_iris(queue, kernel):
|
|
145
|
+
if kernel == "rbf":
|
|
146
|
+
pytest.skip("RBF CSR SVM test failing in 2025.0.")
|
|
147
|
+
_test_iris(queue, kernel)
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
def _test_diabetes(queue, kernel):
|
|
151
|
+
diabetes = datasets.load_diabetes()
|
|
152
|
+
|
|
153
|
+
sparse_diabetes_data = sp.csr_matrix(diabetes.data)
|
|
154
|
+
dataset = sparse_diabetes_data, diabetes.target, sparse_diabetes_data
|
|
155
|
+
|
|
156
|
+
clf0 = SVR(kernel=kernel, C=0.1)
|
|
157
|
+
clf1 = SVR(kernel=kernel, C=0.1)
|
|
158
|
+
check_svm_model_equal(queue, clf0, clf1, *dataset)
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
@pass_if_not_implemented_for_gpu(reason="csr svm is not implemented")
|
|
162
|
+
@pytest.mark.parametrize("queue", get_queues())
|
|
163
|
+
@pytest.mark.parametrize("kernel", ["linear", "rbf", "poly", "sigmoid"])
|
|
164
|
+
def test_diabetes(queue, kernel):
|
|
165
|
+
if kernel == "sigmoid":
|
|
166
|
+
pytest.skip("Sparse sigmoid kernel function is buggy.")
|
|
167
|
+
_test_diabetes(queue, kernel)
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
@pass_if_not_implemented_for_gpu(reason="csr svm is not implemented")
|
|
171
|
+
@pytest.mark.xfail(reason="Failed test. Need investigate")
|
|
172
|
+
@pytest.mark.parametrize("queue", get_queues())
|
|
173
|
+
def test_sparse_realdata(queue):
|
|
174
|
+
data = np.array([0.03771744, 0.1003567, 0.01174647, 0.027069])
|
|
175
|
+
indices = np.array([6, 5, 35, 31])
|
|
176
|
+
indptr = np.array(
|
|
177
|
+
[
|
|
178
|
+
0,
|
|
179
|
+
0,
|
|
180
|
+
0,
|
|
181
|
+
0,
|
|
182
|
+
0,
|
|
183
|
+
0,
|
|
184
|
+
0,
|
|
185
|
+
0,
|
|
186
|
+
1,
|
|
187
|
+
1,
|
|
188
|
+
1,
|
|
189
|
+
1,
|
|
190
|
+
1,
|
|
191
|
+
1,
|
|
192
|
+
1,
|
|
193
|
+
1,
|
|
194
|
+
1,
|
|
195
|
+
1,
|
|
196
|
+
1,
|
|
197
|
+
1,
|
|
198
|
+
1,
|
|
199
|
+
1,
|
|
200
|
+
1,
|
|
201
|
+
1,
|
|
202
|
+
1,
|
|
203
|
+
1,
|
|
204
|
+
1,
|
|
205
|
+
1,
|
|
206
|
+
1,
|
|
207
|
+
1,
|
|
208
|
+
1,
|
|
209
|
+
1,
|
|
210
|
+
1,
|
|
211
|
+
1,
|
|
212
|
+
1,
|
|
213
|
+
1,
|
|
214
|
+
1,
|
|
215
|
+
1,
|
|
216
|
+
1,
|
|
217
|
+
1,
|
|
218
|
+
2,
|
|
219
|
+
2,
|
|
220
|
+
2,
|
|
221
|
+
2,
|
|
222
|
+
2,
|
|
223
|
+
2,
|
|
224
|
+
2,
|
|
225
|
+
2,
|
|
226
|
+
2,
|
|
227
|
+
2,
|
|
228
|
+
2,
|
|
229
|
+
2,
|
|
230
|
+
2,
|
|
231
|
+
2,
|
|
232
|
+
2,
|
|
233
|
+
2,
|
|
234
|
+
2,
|
|
235
|
+
2,
|
|
236
|
+
2,
|
|
237
|
+
2,
|
|
238
|
+
2,
|
|
239
|
+
2,
|
|
240
|
+
2,
|
|
241
|
+
2,
|
|
242
|
+
2,
|
|
243
|
+
2,
|
|
244
|
+
2,
|
|
245
|
+
2,
|
|
246
|
+
2,
|
|
247
|
+
2,
|
|
248
|
+
2,
|
|
249
|
+
2,
|
|
250
|
+
2,
|
|
251
|
+
2,
|
|
252
|
+
2,
|
|
253
|
+
2,
|
|
254
|
+
2,
|
|
255
|
+
2,
|
|
256
|
+
4,
|
|
257
|
+
4,
|
|
258
|
+
4,
|
|
259
|
+
]
|
|
260
|
+
)
|
|
261
|
+
X = sp.csr_matrix((data, indices, indptr))
|
|
262
|
+
y = np.array(
|
|
263
|
+
[
|
|
264
|
+
1.0,
|
|
265
|
+
0.0,
|
|
266
|
+
2.0,
|
|
267
|
+
2.0,
|
|
268
|
+
1.0,
|
|
269
|
+
1.0,
|
|
270
|
+
1.0,
|
|
271
|
+
2.0,
|
|
272
|
+
2.0,
|
|
273
|
+
0.0,
|
|
274
|
+
1.0,
|
|
275
|
+
2.0,
|
|
276
|
+
2.0,
|
|
277
|
+
0.0,
|
|
278
|
+
2.0,
|
|
279
|
+
0.0,
|
|
280
|
+
3.0,
|
|
281
|
+
0.0,
|
|
282
|
+
3.0,
|
|
283
|
+
0.0,
|
|
284
|
+
1.0,
|
|
285
|
+
1.0,
|
|
286
|
+
3.0,
|
|
287
|
+
2.0,
|
|
288
|
+
3.0,
|
|
289
|
+
2.0,
|
|
290
|
+
0.0,
|
|
291
|
+
3.0,
|
|
292
|
+
1.0,
|
|
293
|
+
0.0,
|
|
294
|
+
2.0,
|
|
295
|
+
1.0,
|
|
296
|
+
2.0,
|
|
297
|
+
0.0,
|
|
298
|
+
1.0,
|
|
299
|
+
0.0,
|
|
300
|
+
2.0,
|
|
301
|
+
3.0,
|
|
302
|
+
1.0,
|
|
303
|
+
3.0,
|
|
304
|
+
0.0,
|
|
305
|
+
1.0,
|
|
306
|
+
0.0,
|
|
307
|
+
0.0,
|
|
308
|
+
2.0,
|
|
309
|
+
0.0,
|
|
310
|
+
1.0,
|
|
311
|
+
2.0,
|
|
312
|
+
2.0,
|
|
313
|
+
2.0,
|
|
314
|
+
3.0,
|
|
315
|
+
2.0,
|
|
316
|
+
0.0,
|
|
317
|
+
3.0,
|
|
318
|
+
2.0,
|
|
319
|
+
1.0,
|
|
320
|
+
2.0,
|
|
321
|
+
3.0,
|
|
322
|
+
2.0,
|
|
323
|
+
2.0,
|
|
324
|
+
0.0,
|
|
325
|
+
1.0,
|
|
326
|
+
0.0,
|
|
327
|
+
1.0,
|
|
328
|
+
2.0,
|
|
329
|
+
3.0,
|
|
330
|
+
0.0,
|
|
331
|
+
0.0,
|
|
332
|
+
2.0,
|
|
333
|
+
2.0,
|
|
334
|
+
1.0,
|
|
335
|
+
3.0,
|
|
336
|
+
1.0,
|
|
337
|
+
1.0,
|
|
338
|
+
0.0,
|
|
339
|
+
1.0,
|
|
340
|
+
2.0,
|
|
341
|
+
1.0,
|
|
342
|
+
1.0,
|
|
343
|
+
3.0,
|
|
344
|
+
]
|
|
345
|
+
)
|
|
346
|
+
|
|
347
|
+
clf = SVC(kernel="linear").fit(X.toarray(), y, queue=queue)
|
|
348
|
+
sp_clf = SVC(kernel="linear").fit(X, y, queue=queue)
|
|
349
|
+
|
|
350
|
+
assert_array_equal(clf.support_vectors_, sp_clf.support_vectors_.toarray())
|
|
351
|
+
assert_array_equal(clf.dual_coef_, sp_clf.dual_coef_.toarray())
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
# ==============================================================================
|
|
2
|
+
# Copyright 2021 Intel Corporation
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
# ==============================================================================
|
|
16
|
+
|
|
17
|
+
import numpy as np
|
|
18
|
+
import pytest
|
|
19
|
+
from numpy.testing import assert_array_almost_equal, assert_array_equal
|
|
20
|
+
from sklearn import datasets
|
|
21
|
+
from sklearn.datasets import make_blobs
|
|
22
|
+
from sklearn.metrics.pairwise import rbf_kernel
|
|
23
|
+
from sklearn.model_selection import train_test_split
|
|
24
|
+
from sklearn.svm import NuSVC as SklearnNuSVC
|
|
25
|
+
|
|
26
|
+
from onedal.svm import NuSVC
|
|
27
|
+
from onedal.tests.utils._device_selection import (
|
|
28
|
+
get_queues,
|
|
29
|
+
pass_if_not_implemented_for_gpu,
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def _test_libsvm_parameters(queue, array_constr, dtype):
|
|
34
|
+
X = array_constr([[-2, -1], [-1, -1], [-1, -2], [1, 1], [1, 2], [2, 1]], dtype=dtype)
|
|
35
|
+
y = array_constr([1, 1, 1, 2, 2, 2], dtype=dtype)
|
|
36
|
+
|
|
37
|
+
clf = NuSVC(kernel="linear").fit(X, y, queue=queue)
|
|
38
|
+
assert_array_almost_equal(
|
|
39
|
+
clf.dual_coef_, [[-0.04761905, -0.0952381, 0.0952381, 0.04761905]]
|
|
40
|
+
)
|
|
41
|
+
assert_array_equal(clf.support_, [0, 1, 3, 4])
|
|
42
|
+
assert_array_equal(clf.support_vectors_, X[clf.support_])
|
|
43
|
+
assert_array_equal(clf.intercept_, [0.0])
|
|
44
|
+
assert_array_equal(clf.predict(X, queue=queue), y)
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
@pass_if_not_implemented_for_gpu(reason="nusvc is not implemented")
|
|
48
|
+
@pytest.mark.parametrize("queue", get_queues())
|
|
49
|
+
@pytest.mark.parametrize("array_constr", [np.array])
|
|
50
|
+
@pytest.mark.parametrize("dtype", [np.float32, np.float64])
|
|
51
|
+
def test_libsvm_parameters(queue, array_constr, dtype):
|
|
52
|
+
_test_libsvm_parameters(queue, array_constr, dtype)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
@pass_if_not_implemented_for_gpu(reason="nusvc is not implemented")
|
|
56
|
+
@pytest.mark.parametrize("queue", get_queues())
|
|
57
|
+
def test_class_weight(queue):
|
|
58
|
+
X = np.array([[-2, -1], [-1, -1], [-1, -2], [1, 1], [1, 2], [2, 1]])
|
|
59
|
+
y = np.array([1, 1, 1, 2, 2, 2])
|
|
60
|
+
|
|
61
|
+
clf = NuSVC(class_weight={1: 0.1})
|
|
62
|
+
clf.fit(X, y, queue=queue)
|
|
63
|
+
assert_array_almost_equal(clf.predict(X, queue=queue), [2] * 6)
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
@pass_if_not_implemented_for_gpu(reason="nusvc is not implemented")
|
|
67
|
+
@pytest.mark.parametrize("queue", get_queues())
|
|
68
|
+
def test_sample_weight(queue):
|
|
69
|
+
X = np.array([[-2, 0], [-1, -1], [0, -2], [0, 2], [1, 1], [2, 2]])
|
|
70
|
+
y = np.array([1, 1, 1, 2, 2, 2])
|
|
71
|
+
|
|
72
|
+
clf = NuSVC(kernel="linear")
|
|
73
|
+
clf.fit(X, y, sample_weight=[1] * 6, queue=queue)
|
|
74
|
+
assert_array_almost_equal(clf.intercept_, [0.0])
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
@pass_if_not_implemented_for_gpu(reason="nusvc is not implemented")
|
|
78
|
+
@pytest.mark.parametrize("queue", get_queues())
|
|
79
|
+
def test_decision_function(queue):
|
|
80
|
+
X = [[-2, -1], [-1, -1], [-1, -2], [1, 1], [1, 2], [2, 1]]
|
|
81
|
+
Y = [1, 1, 1, 2, 2, 2]
|
|
82
|
+
|
|
83
|
+
clf = NuSVC(kernel="rbf", gamma=1, decision_function_shape="ovo")
|
|
84
|
+
clf.fit(X, Y, queue=queue)
|
|
85
|
+
|
|
86
|
+
rbfs = rbf_kernel(X, clf.support_vectors_, gamma=clf.gamma)
|
|
87
|
+
dec = np.dot(rbfs, clf.dual_coef_.T) + clf.intercept_
|
|
88
|
+
assert_array_almost_equal(dec.ravel(), clf.decision_function(X, queue=queue))
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
@pass_if_not_implemented_for_gpu(reason="nusvc is not implemented")
|
|
92
|
+
@pytest.mark.parametrize("queue", get_queues())
|
|
93
|
+
def test_iris(queue):
|
|
94
|
+
iris = datasets.load_iris()
|
|
95
|
+
clf = NuSVC(kernel="linear").fit(iris.data, iris.target, queue=queue)
|
|
96
|
+
assert clf.score(iris.data, iris.target, queue=queue) > 0.9
|
|
97
|
+
assert_array_equal(clf.classes_, np.sort(clf.classes_))
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
@pass_if_not_implemented_for_gpu(reason="nusvc is not implemented")
|
|
101
|
+
@pytest.mark.parametrize("queue", get_queues())
|
|
102
|
+
def test_decision_function_shape(queue):
|
|
103
|
+
X, y = make_blobs(n_samples=80, centers=5, random_state=0)
|
|
104
|
+
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
|
|
105
|
+
|
|
106
|
+
# check shape of ovo_decition_function=True
|
|
107
|
+
clf = NuSVC(kernel="linear", decision_function_shape="ovo").fit(
|
|
108
|
+
X_train, y_train, queue=queue
|
|
109
|
+
)
|
|
110
|
+
dec = clf.decision_function(X_train, queue=queue)
|
|
111
|
+
assert dec.shape == (len(X_train), 10)
|
|
112
|
+
|
|
113
|
+
# with pytest.raises(ValueError, match="must be either 'ovr' or 'ovo'"):
|
|
114
|
+
# SVC(decision_function_shape='bad').fit(X_train, y_train)
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
@pass_if_not_implemented_for_gpu(reason="nusvc is not implemented")
|
|
118
|
+
@pytest.mark.parametrize("queue", get_queues())
|
|
119
|
+
def test_pickle(queue):
|
|
120
|
+
iris = datasets.load_iris()
|
|
121
|
+
clf = NuSVC(kernel="linear").fit(iris.data, iris.target, queue=queue)
|
|
122
|
+
expected = clf.decision_function(iris.data, queue=queue)
|
|
123
|
+
|
|
124
|
+
import pickle
|
|
125
|
+
|
|
126
|
+
dump = pickle.dumps(clf)
|
|
127
|
+
clf2 = pickle.loads(dump)
|
|
128
|
+
|
|
129
|
+
assert type(clf2) == clf.__class__
|
|
130
|
+
result = clf2.decision_function(iris.data, queue=queue)
|
|
131
|
+
assert_array_equal(expected, result)
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
def _test_cancer_rbf_compare_with_sklearn(queue, nu, gamma):
|
|
135
|
+
cancer = datasets.load_breast_cancer()
|
|
136
|
+
|
|
137
|
+
clf = NuSVC(kernel="rbf", gamma=gamma, nu=nu)
|
|
138
|
+
clf.fit(cancer.data, cancer.target, queue=queue)
|
|
139
|
+
result = clf.score(cancer.data, cancer.target, queue=queue)
|
|
140
|
+
|
|
141
|
+
clf = SklearnNuSVC(kernel="rbf", gamma=gamma, nu=nu)
|
|
142
|
+
clf.fit(cancer.data, cancer.target)
|
|
143
|
+
expected = clf.score(cancer.data, cancer.target)
|
|
144
|
+
|
|
145
|
+
assert result > 0.4
|
|
146
|
+
assert abs(result - expected) < 1e-4
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
@pass_if_not_implemented_for_gpu(reason="nusvc is not implemented")
|
|
150
|
+
@pytest.mark.parametrize("queue", get_queues())
|
|
151
|
+
@pytest.mark.parametrize("gamma", ["scale", "auto"])
|
|
152
|
+
@pytest.mark.parametrize("nu", [0.25, 0.5])
|
|
153
|
+
def test_cancer_rbf_compare_with_sklearn(queue, nu, gamma):
|
|
154
|
+
_test_cancer_rbf_compare_with_sklearn(queue, nu, gamma)
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
def _test_cancer_linear_compare_with_sklearn(queue, nu):
|
|
158
|
+
cancer = datasets.load_breast_cancer()
|
|
159
|
+
|
|
160
|
+
clf = NuSVC(kernel="linear", nu=nu)
|
|
161
|
+
clf.fit(cancer.data, cancer.target, queue=queue)
|
|
162
|
+
result = clf.score(cancer.data, cancer.target, queue=queue)
|
|
163
|
+
|
|
164
|
+
clf = SklearnNuSVC(kernel="linear", nu=nu)
|
|
165
|
+
clf.fit(cancer.data, cancer.target)
|
|
166
|
+
expected = clf.score(cancer.data, cancer.target)
|
|
167
|
+
|
|
168
|
+
assert result > 0.5
|
|
169
|
+
assert abs(result - expected) < 1e-3
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
@pass_if_not_implemented_for_gpu(reason="nusvc is not implemented")
|
|
173
|
+
@pytest.mark.parametrize("queue", get_queues())
|
|
174
|
+
@pytest.mark.parametrize("nu", [0.25, 0.5])
|
|
175
|
+
def test_cancer_linear_compare_with_sklearn(queue, nu):
|
|
176
|
+
_test_cancer_linear_compare_with_sklearn(queue, nu)
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
def _test_cancer_poly_compare_with_sklearn(queue, params):
|
|
180
|
+
cancer = datasets.load_breast_cancer()
|
|
181
|
+
|
|
182
|
+
clf = NuSVC(kernel="poly", **params)
|
|
183
|
+
clf.fit(cancer.data, cancer.target, queue=queue)
|
|
184
|
+
result = clf.score(cancer.data, cancer.target, queue=queue)
|
|
185
|
+
|
|
186
|
+
clf = SklearnNuSVC(kernel="poly", **params)
|
|
187
|
+
clf.fit(cancer.data, cancer.target)
|
|
188
|
+
expected = clf.score(cancer.data, cancer.target)
|
|
189
|
+
|
|
190
|
+
assert result > 0.5
|
|
191
|
+
assert abs(result - expected) < 1e-4
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
@pass_if_not_implemented_for_gpu(reason="nusvc is not implemented")
|
|
195
|
+
@pytest.mark.parametrize("queue", get_queues())
|
|
196
|
+
@pytest.mark.parametrize(
|
|
197
|
+
"params",
|
|
198
|
+
[
|
|
199
|
+
{"degree": 2, "coef0": 0.1, "gamma": "scale", "nu": 0.25},
|
|
200
|
+
{"degree": 3, "coef0": 0.0, "gamma": "scale", "nu": 0.5},
|
|
201
|
+
],
|
|
202
|
+
)
|
|
203
|
+
def test_cancer_poly_compare_with_sklearn(queue, params):
|
|
204
|
+
_test_cancer_poly_compare_with_sklearn(queue, params)
|