scikit-learn-intelex 2025.4.0__py313-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.

Files changed (282) hide show
  1. daal4py/__init__.py +73 -0
  2. daal4py/__main__.py +58 -0
  3. daal4py/_daal4py.cpython-313-x86_64-linux-gnu.so +0 -0
  4. daal4py/doc/third-party-programs.txt +424 -0
  5. daal4py/mb/__init__.py +19 -0
  6. daal4py/mb/model_builders.py +377 -0
  7. daal4py/mpi_transceiver.cpython-313-x86_64-linux-gnu.so +0 -0
  8. daal4py/sklearn/__init__.py +40 -0
  9. daal4py/sklearn/_n_jobs_support.py +248 -0
  10. daal4py/sklearn/_utils.py +245 -0
  11. daal4py/sklearn/cluster/__init__.py +20 -0
  12. daal4py/sklearn/cluster/dbscan.py +165 -0
  13. daal4py/sklearn/cluster/k_means.py +597 -0
  14. daal4py/sklearn/cluster/tests/test_dbscan.py +109 -0
  15. daal4py/sklearn/decomposition/__init__.py +19 -0
  16. daal4py/sklearn/decomposition/_pca.py +524 -0
  17. daal4py/sklearn/ensemble/AdaBoostClassifier.py +196 -0
  18. daal4py/sklearn/ensemble/GBTDAAL.py +337 -0
  19. daal4py/sklearn/ensemble/__init__.py +27 -0
  20. daal4py/sklearn/ensemble/_forest.py +1397 -0
  21. daal4py/sklearn/ensemble/tests/test_decision_forest.py +206 -0
  22. daal4py/sklearn/linear_model/__init__.py +29 -0
  23. daal4py/sklearn/linear_model/_coordinate_descent.py +848 -0
  24. daal4py/sklearn/linear_model/_linear.py +272 -0
  25. daal4py/sklearn/linear_model/_ridge.py +325 -0
  26. daal4py/sklearn/linear_model/coordinate_descent.py +17 -0
  27. daal4py/sklearn/linear_model/linear.py +17 -0
  28. daal4py/sklearn/linear_model/logistic_loss.py +195 -0
  29. daal4py/sklearn/linear_model/logistic_path.py +1026 -0
  30. daal4py/sklearn/linear_model/ridge.py +17 -0
  31. daal4py/sklearn/linear_model/tests/test_linear.py +208 -0
  32. daal4py/sklearn/linear_model/tests/test_ridge.py +69 -0
  33. daal4py/sklearn/manifold/__init__.py +19 -0
  34. daal4py/sklearn/manifold/_t_sne.py +405 -0
  35. daal4py/sklearn/metrics/__init__.py +20 -0
  36. daal4py/sklearn/metrics/_pairwise.py +236 -0
  37. daal4py/sklearn/metrics/_ranking.py +210 -0
  38. daal4py/sklearn/model_selection/__init__.py +19 -0
  39. daal4py/sklearn/model_selection/_split.py +309 -0
  40. daal4py/sklearn/model_selection/tests/test_split.py +56 -0
  41. daal4py/sklearn/monkeypatch/__init__.py +0 -0
  42. daal4py/sklearn/monkeypatch/dispatcher.py +232 -0
  43. daal4py/sklearn/monkeypatch/tests/_models_info.py +161 -0
  44. daal4py/sklearn/monkeypatch/tests/test_monkeypatch.py +71 -0
  45. daal4py/sklearn/monkeypatch/tests/test_patching.py +90 -0
  46. daal4py/sklearn/monkeypatch/tests/utils/_launch_algorithms.py +117 -0
  47. daal4py/sklearn/neighbors/__init__.py +21 -0
  48. daal4py/sklearn/neighbors/_base.py +503 -0
  49. daal4py/sklearn/neighbors/_classification.py +139 -0
  50. daal4py/sklearn/neighbors/_regression.py +74 -0
  51. daal4py/sklearn/neighbors/_unsupervised.py +55 -0
  52. daal4py/sklearn/neighbors/tests/test_kneighbors.py +113 -0
  53. daal4py/sklearn/svm/__init__.py +19 -0
  54. daal4py/sklearn/svm/svm.py +734 -0
  55. daal4py/sklearn/utils/__init__.py +21 -0
  56. daal4py/sklearn/utils/base.py +75 -0
  57. daal4py/sklearn/utils/tests/test_utils.py +51 -0
  58. daal4py/sklearn/utils/validation.py +696 -0
  59. onedal/__init__.py +83 -0
  60. onedal/_config.py +54 -0
  61. onedal/_device_offload.py +204 -0
  62. onedal/_onedal_py_dpc.cpython-313-x86_64-linux-gnu.so +0 -0
  63. onedal/_onedal_py_host.cpython-313-x86_64-linux-gnu.so +0 -0
  64. onedal/_onedal_py_spmd_dpc.cpython-313-x86_64-linux-gnu.so +0 -0
  65. onedal/basic_statistics/__init__.py +20 -0
  66. onedal/basic_statistics/basic_statistics.py +107 -0
  67. onedal/basic_statistics/incremental_basic_statistics.py +175 -0
  68. onedal/basic_statistics/tests/test_basic_statistics.py +242 -0
  69. onedal/basic_statistics/tests/test_incremental_basic_statistics.py +279 -0
  70. onedal/basic_statistics/tests/utils.py +50 -0
  71. onedal/cluster/__init__.py +27 -0
  72. onedal/cluster/dbscan.py +105 -0
  73. onedal/cluster/kmeans.py +557 -0
  74. onedal/cluster/kmeans_init.py +112 -0
  75. onedal/cluster/tests/test_dbscan.py +125 -0
  76. onedal/cluster/tests/test_kmeans.py +88 -0
  77. onedal/cluster/tests/test_kmeans_init.py +93 -0
  78. onedal/common/_base.py +38 -0
  79. onedal/common/_estimator_checks.py +47 -0
  80. onedal/common/_mixin.py +62 -0
  81. onedal/common/_policy.py +55 -0
  82. onedal/common/_spmd_policy.py +30 -0
  83. onedal/common/hyperparameters.py +125 -0
  84. onedal/common/tests/test_policy.py +76 -0
  85. onedal/common/tests/test_sycl.py +128 -0
  86. onedal/covariance/__init__.py +20 -0
  87. onedal/covariance/covariance.py +122 -0
  88. onedal/covariance/incremental_covariance.py +161 -0
  89. onedal/covariance/tests/test_covariance.py +50 -0
  90. onedal/covariance/tests/test_incremental_covariance.py +190 -0
  91. onedal/datatypes/__init__.py +19 -0
  92. onedal/datatypes/_data_conversion.py +121 -0
  93. onedal/datatypes/tests/common.py +126 -0
  94. onedal/datatypes/tests/test_data.py +475 -0
  95. onedal/decomposition/__init__.py +20 -0
  96. onedal/decomposition/incremental_pca.py +214 -0
  97. onedal/decomposition/pca.py +186 -0
  98. onedal/decomposition/tests/test_incremental_pca.py +285 -0
  99. onedal/ensemble/__init__.py +29 -0
  100. onedal/ensemble/forest.py +736 -0
  101. onedal/ensemble/tests/test_random_forest.py +97 -0
  102. onedal/linear_model/__init__.py +27 -0
  103. onedal/linear_model/incremental_linear_model.py +292 -0
  104. onedal/linear_model/linear_model.py +325 -0
  105. onedal/linear_model/logistic_regression.py +247 -0
  106. onedal/linear_model/tests/test_incremental_linear_regression.py +213 -0
  107. onedal/linear_model/tests/test_incremental_ridge_regression.py +171 -0
  108. onedal/linear_model/tests/test_linear_regression.py +259 -0
  109. onedal/linear_model/tests/test_logistic_regression.py +95 -0
  110. onedal/linear_model/tests/test_ridge.py +95 -0
  111. onedal/neighbors/__init__.py +19 -0
  112. onedal/neighbors/neighbors.py +763 -0
  113. onedal/neighbors/tests/test_knn_classification.py +49 -0
  114. onedal/primitives/__init__.py +27 -0
  115. onedal/primitives/get_tree.py +25 -0
  116. onedal/primitives/kernel_functions.py +152 -0
  117. onedal/primitives/tests/test_kernel_functions.py +159 -0
  118. onedal/spmd/__init__.py +25 -0
  119. onedal/spmd/_base.py +30 -0
  120. onedal/spmd/basic_statistics/__init__.py +20 -0
  121. onedal/spmd/basic_statistics/basic_statistics.py +30 -0
  122. onedal/spmd/basic_statistics/incremental_basic_statistics.py +71 -0
  123. onedal/spmd/cluster/__init__.py +28 -0
  124. onedal/spmd/cluster/dbscan.py +23 -0
  125. onedal/spmd/cluster/kmeans.py +56 -0
  126. onedal/spmd/covariance/__init__.py +20 -0
  127. onedal/spmd/covariance/covariance.py +26 -0
  128. onedal/spmd/covariance/incremental_covariance.py +83 -0
  129. onedal/spmd/decomposition/__init__.py +20 -0
  130. onedal/spmd/decomposition/incremental_pca.py +124 -0
  131. onedal/spmd/decomposition/pca.py +26 -0
  132. onedal/spmd/ensemble/__init__.py +19 -0
  133. onedal/spmd/ensemble/forest.py +28 -0
  134. onedal/spmd/linear_model/__init__.py +21 -0
  135. onedal/spmd/linear_model/incremental_linear_model.py +101 -0
  136. onedal/spmd/linear_model/linear_model.py +30 -0
  137. onedal/spmd/linear_model/logistic_regression.py +38 -0
  138. onedal/spmd/neighbors/__init__.py +19 -0
  139. onedal/spmd/neighbors/neighbors.py +75 -0
  140. onedal/svm/__init__.py +19 -0
  141. onedal/svm/svm.py +556 -0
  142. onedal/svm/tests/test_csr_svm.py +351 -0
  143. onedal/svm/tests/test_nusvc.py +204 -0
  144. onedal/svm/tests/test_nusvr.py +210 -0
  145. onedal/svm/tests/test_svc.py +176 -0
  146. onedal/svm/tests/test_svr.py +243 -0
  147. onedal/tests/test_common.py +57 -0
  148. onedal/tests/utils/_dataframes_support.py +162 -0
  149. onedal/tests/utils/_device_selection.py +102 -0
  150. onedal/utils/__init__.py +49 -0
  151. onedal/utils/_array_api.py +81 -0
  152. onedal/utils/_dpep_helpers.py +56 -0
  153. onedal/utils/tests/test_validation.py +142 -0
  154. onedal/utils/validation.py +464 -0
  155. scikit_learn_intelex-2025.4.0.dist-info/LICENSE.txt +202 -0
  156. scikit_learn_intelex-2025.4.0.dist-info/METADATA +190 -0
  157. scikit_learn_intelex-2025.4.0.dist-info/RECORD +282 -0
  158. scikit_learn_intelex-2025.4.0.dist-info/WHEEL +5 -0
  159. scikit_learn_intelex-2025.4.0.dist-info/top_level.txt +3 -0
  160. sklearnex/__init__.py +66 -0
  161. sklearnex/__main__.py +58 -0
  162. sklearnex/_config.py +116 -0
  163. sklearnex/_device_offload.py +126 -0
  164. sklearnex/_utils.py +177 -0
  165. sklearnex/basic_statistics/__init__.py +20 -0
  166. sklearnex/basic_statistics/basic_statistics.py +261 -0
  167. sklearnex/basic_statistics/incremental_basic_statistics.py +352 -0
  168. sklearnex/basic_statistics/tests/test_basic_statistics.py +405 -0
  169. sklearnex/basic_statistics/tests/test_incremental_basic_statistics.py +455 -0
  170. sklearnex/cluster/__init__.py +20 -0
  171. sklearnex/cluster/dbscan.py +197 -0
  172. sklearnex/cluster/k_means.py +397 -0
  173. sklearnex/cluster/tests/test_dbscan.py +38 -0
  174. sklearnex/cluster/tests/test_kmeans.py +157 -0
  175. sklearnex/conftest.py +82 -0
  176. sklearnex/covariance/__init__.py +19 -0
  177. sklearnex/covariance/incremental_covariance.py +405 -0
  178. sklearnex/covariance/tests/test_incremental_covariance.py +287 -0
  179. sklearnex/decomposition/__init__.py +19 -0
  180. sklearnex/decomposition/pca.py +427 -0
  181. sklearnex/decomposition/tests/test_pca.py +58 -0
  182. sklearnex/dispatcher.py +534 -0
  183. sklearnex/doc/third-party-programs.txt +424 -0
  184. sklearnex/ensemble/__init__.py +29 -0
  185. sklearnex/ensemble/_forest.py +2029 -0
  186. sklearnex/ensemble/tests/test_forest.py +140 -0
  187. sklearnex/glob/__main__.py +72 -0
  188. sklearnex/glob/dispatcher.py +101 -0
  189. sklearnex/linear_model/__init__.py +32 -0
  190. sklearnex/linear_model/coordinate_descent.py +30 -0
  191. sklearnex/linear_model/incremental_linear.py +495 -0
  192. sklearnex/linear_model/incremental_ridge.py +432 -0
  193. sklearnex/linear_model/linear.py +346 -0
  194. sklearnex/linear_model/logistic_regression.py +415 -0
  195. sklearnex/linear_model/ridge.py +390 -0
  196. sklearnex/linear_model/tests/test_incremental_linear.py +267 -0
  197. sklearnex/linear_model/tests/test_incremental_ridge.py +214 -0
  198. sklearnex/linear_model/tests/test_linear.py +142 -0
  199. sklearnex/linear_model/tests/test_logreg.py +134 -0
  200. sklearnex/linear_model/tests/test_ridge.py +256 -0
  201. sklearnex/manifold/__init__.py +19 -0
  202. sklearnex/manifold/t_sne.py +26 -0
  203. sklearnex/manifold/tests/test_tsne.py +250 -0
  204. sklearnex/metrics/__init__.py +23 -0
  205. sklearnex/metrics/pairwise.py +22 -0
  206. sklearnex/metrics/ranking.py +20 -0
  207. sklearnex/metrics/tests/test_metrics.py +39 -0
  208. sklearnex/model_selection/__init__.py +21 -0
  209. sklearnex/model_selection/split.py +22 -0
  210. sklearnex/model_selection/tests/test_model_selection.py +34 -0
  211. sklearnex/neighbors/__init__.py +27 -0
  212. sklearnex/neighbors/_lof.py +236 -0
  213. sklearnex/neighbors/common.py +310 -0
  214. sklearnex/neighbors/knn_classification.py +231 -0
  215. sklearnex/neighbors/knn_regression.py +207 -0
  216. sklearnex/neighbors/knn_unsupervised.py +178 -0
  217. sklearnex/neighbors/tests/test_neighbors.py +82 -0
  218. sklearnex/preview/__init__.py +17 -0
  219. sklearnex/preview/covariance/__init__.py +19 -0
  220. sklearnex/preview/covariance/covariance.py +142 -0
  221. sklearnex/preview/covariance/tests/test_covariance.py +66 -0
  222. sklearnex/preview/decomposition/__init__.py +19 -0
  223. sklearnex/preview/decomposition/incremental_pca.py +244 -0
  224. sklearnex/preview/decomposition/tests/test_incremental_pca.py +336 -0
  225. sklearnex/spmd/__init__.py +25 -0
  226. sklearnex/spmd/basic_statistics/__init__.py +20 -0
  227. sklearnex/spmd/basic_statistics/basic_statistics.py +21 -0
  228. sklearnex/spmd/basic_statistics/incremental_basic_statistics.py +30 -0
  229. sklearnex/spmd/basic_statistics/tests/test_basic_statistics_spmd.py +107 -0
  230. sklearnex/spmd/basic_statistics/tests/test_incremental_basic_statistics_spmd.py +306 -0
  231. sklearnex/spmd/cluster/__init__.py +30 -0
  232. sklearnex/spmd/cluster/dbscan.py +50 -0
  233. sklearnex/spmd/cluster/kmeans.py +21 -0
  234. sklearnex/spmd/cluster/tests/test_dbscan_spmd.py +97 -0
  235. sklearnex/spmd/cluster/tests/test_kmeans_spmd.py +173 -0
  236. sklearnex/spmd/covariance/__init__.py +20 -0
  237. sklearnex/spmd/covariance/covariance.py +21 -0
  238. sklearnex/spmd/covariance/incremental_covariance.py +37 -0
  239. sklearnex/spmd/covariance/tests/test_covariance_spmd.py +107 -0
  240. sklearnex/spmd/covariance/tests/test_incremental_covariance_spmd.py +184 -0
  241. sklearnex/spmd/decomposition/__init__.py +20 -0
  242. sklearnex/spmd/decomposition/incremental_pca.py +30 -0
  243. sklearnex/spmd/decomposition/pca.py +21 -0
  244. sklearnex/spmd/decomposition/tests/test_incremental_pca_spmd.py +269 -0
  245. sklearnex/spmd/decomposition/tests/test_pca_spmd.py +128 -0
  246. sklearnex/spmd/ensemble/__init__.py +19 -0
  247. sklearnex/spmd/ensemble/forest.py +71 -0
  248. sklearnex/spmd/ensemble/tests/test_forest_spmd.py +265 -0
  249. sklearnex/spmd/linear_model/__init__.py +21 -0
  250. sklearnex/spmd/linear_model/incremental_linear_model.py +35 -0
  251. sklearnex/spmd/linear_model/linear_model.py +21 -0
  252. sklearnex/spmd/linear_model/logistic_regression.py +21 -0
  253. sklearnex/spmd/linear_model/tests/test_incremental_linear_spmd.py +331 -0
  254. sklearnex/spmd/linear_model/tests/test_linear_regression_spmd.py +145 -0
  255. sklearnex/spmd/linear_model/tests/test_logistic_regression_spmd.py +162 -0
  256. sklearnex/spmd/neighbors/__init__.py +19 -0
  257. sklearnex/spmd/neighbors/neighbors.py +25 -0
  258. sklearnex/spmd/neighbors/tests/test_neighbors_spmd.py +288 -0
  259. sklearnex/svm/__init__.py +29 -0
  260. sklearnex/svm/_common.py +339 -0
  261. sklearnex/svm/nusvc.py +371 -0
  262. sklearnex/svm/nusvr.py +170 -0
  263. sklearnex/svm/svc.py +399 -0
  264. sklearnex/svm/svr.py +167 -0
  265. sklearnex/svm/tests/test_svm.py +93 -0
  266. sklearnex/tests/test_common.py +491 -0
  267. sklearnex/tests/test_config.py +123 -0
  268. sklearnex/tests/test_hyperparameters.py +43 -0
  269. sklearnex/tests/test_memory_usage.py +347 -0
  270. sklearnex/tests/test_monkeypatch.py +269 -0
  271. sklearnex/tests/test_n_jobs_support.py +108 -0
  272. sklearnex/tests/test_parallel.py +48 -0
  273. sklearnex/tests/test_patching.py +377 -0
  274. sklearnex/tests/test_run_to_run_stability.py +326 -0
  275. sklearnex/tests/utils/__init__.py +48 -0
  276. sklearnex/tests/utils/base.py +436 -0
  277. sklearnex/tests/utils/spmd.py +198 -0
  278. sklearnex/utils/__init__.py +19 -0
  279. sklearnex/utils/_array_api.py +82 -0
  280. sklearnex/utils/parallel.py +59 -0
  281. sklearnex/utils/tests/test_validation.py +238 -0
  282. sklearnex/utils/validation.py +208 -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)