scikit-learn-intelex 2025.0.0__py311-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 (278) hide show
  1. daal4py/__init__.py +73 -0
  2. daal4py/__main__.py +58 -0
  3. daal4py/_daal4py.cpython-311-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-311-x86_64-linux-gnu.so +0 -0
  8. daal4py/sklearn/__init__.py +40 -0
  9. daal4py/sklearn/_n_jobs_support.py +242 -0
  10. daal4py/sklearn/_utils.py +241 -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 +192 -0
  18. daal4py/sklearn/ensemble/GBTDAAL.py +318 -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 +196 -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 +155 -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 +87 -0
  46. daal4py/sklearn/monkeypatch/tests/utils/_launch_algorithms.py +118 -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 +693 -0
  59. onedal/__init__.py +83 -0
  60. onedal/_config.py +53 -0
  61. onedal/_device_offload.py +229 -0
  62. onedal/_onedal_py_dpc.cpython-311-x86_64-linux-gnu.so +0 -0
  63. onedal/_onedal_py_host.cpython-311-x86_64-linux-gnu.so +0 -0
  64. onedal/_onedal_py_spmd_dpc.cpython-311-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 +160 -0
  68. onedal/basic_statistics/tests/test_basic_statistics.py +298 -0
  69. onedal/basic_statistics/tests/test_incremental_basic_statistics.py +196 -0
  70. onedal/cluster/__init__.py +27 -0
  71. onedal/cluster/dbscan.py +110 -0
  72. onedal/cluster/kmeans.py +560 -0
  73. onedal/cluster/kmeans_init.py +115 -0
  74. onedal/cluster/tests/test_dbscan.py +125 -0
  75. onedal/cluster/tests/test_kmeans.py +88 -0
  76. onedal/cluster/tests/test_kmeans_init.py +93 -0
  77. onedal/common/_base.py +38 -0
  78. onedal/common/_estimator_checks.py +47 -0
  79. onedal/common/_mixin.py +62 -0
  80. onedal/common/_policy.py +59 -0
  81. onedal/common/_spmd_policy.py +30 -0
  82. onedal/common/hyperparameters.py +116 -0
  83. onedal/common/tests/test_policy.py +75 -0
  84. onedal/covariance/__init__.py +20 -0
  85. onedal/covariance/covariance.py +125 -0
  86. onedal/covariance/incremental_covariance.py +146 -0
  87. onedal/covariance/tests/test_covariance.py +50 -0
  88. onedal/covariance/tests/test_incremental_covariance.py +122 -0
  89. onedal/datatypes/__init__.py +19 -0
  90. onedal/datatypes/_data_conversion.py +95 -0
  91. onedal/datatypes/tests/test_data.py +235 -0
  92. onedal/decomposition/__init__.py +20 -0
  93. onedal/decomposition/incremental_pca.py +204 -0
  94. onedal/decomposition/pca.py +186 -0
  95. onedal/decomposition/tests/test_incremental_pca.py +198 -0
  96. onedal/ensemble/__init__.py +29 -0
  97. onedal/ensemble/forest.py +720 -0
  98. onedal/ensemble/tests/test_random_forest.py +97 -0
  99. onedal/linear_model/__init__.py +27 -0
  100. onedal/linear_model/incremental_linear_model.py +258 -0
  101. onedal/linear_model/linear_model.py +329 -0
  102. onedal/linear_model/logistic_regression.py +249 -0
  103. onedal/linear_model/tests/test_incremental_linear_regression.py +168 -0
  104. onedal/linear_model/tests/test_incremental_ridge_regression.py +107 -0
  105. onedal/linear_model/tests/test_linear_regression.py +149 -0
  106. onedal/linear_model/tests/test_logistic_regression.py +95 -0
  107. onedal/linear_model/tests/test_ridge.py +95 -0
  108. onedal/neighbors/__init__.py +19 -0
  109. onedal/neighbors/neighbors.py +778 -0
  110. onedal/neighbors/tests/test_knn_classification.py +49 -0
  111. onedal/primitives/__init__.py +27 -0
  112. onedal/primitives/get_tree.py +25 -0
  113. onedal/primitives/kernel_functions.py +153 -0
  114. onedal/primitives/tests/test_kernel_functions.py +159 -0
  115. onedal/spmd/__init__.py +25 -0
  116. onedal/spmd/_base.py +30 -0
  117. onedal/spmd/basic_statistics/__init__.py +20 -0
  118. onedal/spmd/basic_statistics/basic_statistics.py +30 -0
  119. onedal/spmd/basic_statistics/incremental_basic_statistics.py +69 -0
  120. onedal/spmd/cluster/__init__.py +28 -0
  121. onedal/spmd/cluster/dbscan.py +23 -0
  122. onedal/spmd/cluster/kmeans.py +56 -0
  123. onedal/spmd/covariance/__init__.py +20 -0
  124. onedal/spmd/covariance/covariance.py +26 -0
  125. onedal/spmd/covariance/incremental_covariance.py +82 -0
  126. onedal/spmd/decomposition/__init__.py +20 -0
  127. onedal/spmd/decomposition/incremental_pca.py +117 -0
  128. onedal/spmd/decomposition/pca.py +26 -0
  129. onedal/spmd/ensemble/__init__.py +19 -0
  130. onedal/spmd/ensemble/forest.py +28 -0
  131. onedal/spmd/linear_model/__init__.py +21 -0
  132. onedal/spmd/linear_model/incremental_linear_model.py +97 -0
  133. onedal/spmd/linear_model/linear_model.py +30 -0
  134. onedal/spmd/linear_model/logistic_regression.py +38 -0
  135. onedal/spmd/neighbors/__init__.py +19 -0
  136. onedal/spmd/neighbors/neighbors.py +75 -0
  137. onedal/svm/__init__.py +19 -0
  138. onedal/svm/svm.py +556 -0
  139. onedal/svm/tests/test_csr_svm.py +351 -0
  140. onedal/svm/tests/test_nusvc.py +204 -0
  141. onedal/svm/tests/test_nusvr.py +210 -0
  142. onedal/svm/tests/test_svc.py +168 -0
  143. onedal/svm/tests/test_svr.py +243 -0
  144. onedal/tests/test_common.py +41 -0
  145. onedal/tests/utils/_dataframes_support.py +168 -0
  146. onedal/tests/utils/_device_selection.py +107 -0
  147. onedal/utils/__init__.py +49 -0
  148. onedal/utils/_array_api.py +91 -0
  149. onedal/utils/validation.py +432 -0
  150. scikit_learn_intelex-2025.0.0.dist-info/LICENSE.txt +202 -0
  151. scikit_learn_intelex-2025.0.0.dist-info/METADATA +231 -0
  152. scikit_learn_intelex-2025.0.0.dist-info/RECORD +278 -0
  153. scikit_learn_intelex-2025.0.0.dist-info/WHEEL +5 -0
  154. scikit_learn_intelex-2025.0.0.dist-info/top_level.txt +3 -0
  155. sklearnex/__init__.py +65 -0
  156. sklearnex/__main__.py +58 -0
  157. sklearnex/_config.py +98 -0
  158. sklearnex/_device_offload.py +121 -0
  159. sklearnex/_utils.py +109 -0
  160. sklearnex/basic_statistics/__init__.py +20 -0
  161. sklearnex/basic_statistics/basic_statistics.py +140 -0
  162. sklearnex/basic_statistics/incremental_basic_statistics.py +288 -0
  163. sklearnex/basic_statistics/tests/test_basic_statistics.py +251 -0
  164. sklearnex/basic_statistics/tests/test_incremental_basic_statistics.py +384 -0
  165. sklearnex/cluster/__init__.py +20 -0
  166. sklearnex/cluster/dbscan.py +192 -0
  167. sklearnex/cluster/k_means.py +383 -0
  168. sklearnex/cluster/tests/test_dbscan.py +38 -0
  169. sklearnex/cluster/tests/test_kmeans.py +153 -0
  170. sklearnex/conftest.py +73 -0
  171. sklearnex/covariance/__init__.py +19 -0
  172. sklearnex/covariance/incremental_covariance.py +368 -0
  173. sklearnex/covariance/tests/test_incremental_covariance.py +226 -0
  174. sklearnex/decomposition/__init__.py +19 -0
  175. sklearnex/decomposition/pca.py +414 -0
  176. sklearnex/decomposition/tests/test_pca.py +58 -0
  177. sklearnex/dispatcher.py +543 -0
  178. sklearnex/doc/third-party-programs.txt +424 -0
  179. sklearnex/ensemble/__init__.py +29 -0
  180. sklearnex/ensemble/_forest.py +2016 -0
  181. sklearnex/ensemble/tests/test_forest.py +120 -0
  182. sklearnex/glob/__main__.py +72 -0
  183. sklearnex/glob/dispatcher.py +101 -0
  184. sklearnex/linear_model/__init__.py +32 -0
  185. sklearnex/linear_model/coordinate_descent.py +30 -0
  186. sklearnex/linear_model/incremental_linear.py +463 -0
  187. sklearnex/linear_model/incremental_ridge.py +418 -0
  188. sklearnex/linear_model/linear.py +302 -0
  189. sklearnex/linear_model/logistic_path.py +17 -0
  190. sklearnex/linear_model/logistic_regression.py +403 -0
  191. sklearnex/linear_model/ridge.py +24 -0
  192. sklearnex/linear_model/tests/test_incremental_linear.py +203 -0
  193. sklearnex/linear_model/tests/test_incremental_ridge.py +153 -0
  194. sklearnex/linear_model/tests/test_linear.py +142 -0
  195. sklearnex/linear_model/tests/test_logreg.py +134 -0
  196. sklearnex/manifold/__init__.py +19 -0
  197. sklearnex/manifold/t_sne.py +21 -0
  198. sklearnex/manifold/tests/test_tsne.py +26 -0
  199. sklearnex/metrics/__init__.py +23 -0
  200. sklearnex/metrics/pairwise.py +22 -0
  201. sklearnex/metrics/ranking.py +20 -0
  202. sklearnex/metrics/tests/test_metrics.py +39 -0
  203. sklearnex/model_selection/__init__.py +21 -0
  204. sklearnex/model_selection/split.py +22 -0
  205. sklearnex/model_selection/tests/test_model_selection.py +34 -0
  206. sklearnex/neighbors/__init__.py +27 -0
  207. sklearnex/neighbors/_lof.py +231 -0
  208. sklearnex/neighbors/common.py +310 -0
  209. sklearnex/neighbors/knn_classification.py +226 -0
  210. sklearnex/neighbors/knn_regression.py +203 -0
  211. sklearnex/neighbors/knn_unsupervised.py +170 -0
  212. sklearnex/neighbors/tests/test_neighbors.py +80 -0
  213. sklearnex/preview/__init__.py +17 -0
  214. sklearnex/preview/covariance/__init__.py +19 -0
  215. sklearnex/preview/covariance/covariance.py +133 -0
  216. sklearnex/preview/covariance/tests/test_covariance.py +66 -0
  217. sklearnex/preview/decomposition/__init__.py +19 -0
  218. sklearnex/preview/decomposition/incremental_pca.py +228 -0
  219. sklearnex/preview/decomposition/tests/test_incremental_pca.py +266 -0
  220. sklearnex/preview/linear_model/__init__.py +19 -0
  221. sklearnex/preview/linear_model/ridge.py +419 -0
  222. sklearnex/preview/linear_model/tests/test_ridge.py +102 -0
  223. sklearnex/spmd/__init__.py +25 -0
  224. sklearnex/spmd/basic_statistics/__init__.py +20 -0
  225. sklearnex/spmd/basic_statistics/basic_statistics.py +21 -0
  226. sklearnex/spmd/basic_statistics/incremental_basic_statistics.py +30 -0
  227. sklearnex/spmd/basic_statistics/tests/test_basic_statistics_spmd.py +107 -0
  228. sklearnex/spmd/basic_statistics/tests/test_incremental_basic_statistics_spmd.py +307 -0
  229. sklearnex/spmd/cluster/__init__.py +30 -0
  230. sklearnex/spmd/cluster/dbscan.py +50 -0
  231. sklearnex/spmd/cluster/kmeans.py +21 -0
  232. sklearnex/spmd/cluster/tests/test_dbscan_spmd.py +97 -0
  233. sklearnex/spmd/cluster/tests/test_kmeans_spmd.py +172 -0
  234. sklearnex/spmd/covariance/__init__.py +20 -0
  235. sklearnex/spmd/covariance/covariance.py +21 -0
  236. sklearnex/spmd/covariance/incremental_covariance.py +37 -0
  237. sklearnex/spmd/covariance/tests/test_covariance_spmd.py +107 -0
  238. sklearnex/spmd/covariance/tests/test_incremental_covariance_spmd.py +184 -0
  239. sklearnex/spmd/decomposition/__init__.py +20 -0
  240. sklearnex/spmd/decomposition/incremental_pca.py +30 -0
  241. sklearnex/spmd/decomposition/pca.py +21 -0
  242. sklearnex/spmd/decomposition/tests/test_incremental_pca_spmd.py +269 -0
  243. sklearnex/spmd/decomposition/tests/test_pca_spmd.py +128 -0
  244. sklearnex/spmd/ensemble/__init__.py +19 -0
  245. sklearnex/spmd/ensemble/forest.py +71 -0
  246. sklearnex/spmd/ensemble/tests/test_forest_spmd.py +265 -0
  247. sklearnex/spmd/linear_model/__init__.py +21 -0
  248. sklearnex/spmd/linear_model/incremental_linear_model.py +35 -0
  249. sklearnex/spmd/linear_model/linear_model.py +21 -0
  250. sklearnex/spmd/linear_model/logistic_regression.py +21 -0
  251. sklearnex/spmd/linear_model/tests/test_incremental_linear_spmd.py +329 -0
  252. sklearnex/spmd/linear_model/tests/test_linear_regression_spmd.py +145 -0
  253. sklearnex/spmd/linear_model/tests/test_logistic_regression_spmd.py +166 -0
  254. sklearnex/spmd/neighbors/__init__.py +19 -0
  255. sklearnex/spmd/neighbors/neighbors.py +25 -0
  256. sklearnex/spmd/neighbors/tests/test_neighbors_spmd.py +288 -0
  257. sklearnex/svm/__init__.py +29 -0
  258. sklearnex/svm/_common.py +328 -0
  259. sklearnex/svm/nusvc.py +332 -0
  260. sklearnex/svm/nusvr.py +148 -0
  261. sklearnex/svm/svc.py +360 -0
  262. sklearnex/svm/svr.py +149 -0
  263. sklearnex/svm/tests/test_svm.py +93 -0
  264. sklearnex/tests/_utils.py +328 -0
  265. sklearnex/tests/_utils_spmd.py +198 -0
  266. sklearnex/tests/test_common.py +54 -0
  267. sklearnex/tests/test_config.py +43 -0
  268. sklearnex/tests/test_memory_usage.py +291 -0
  269. sklearnex/tests/test_monkeypatch.py +276 -0
  270. sklearnex/tests/test_n_jobs_support.py +103 -0
  271. sklearnex/tests/test_parallel.py +48 -0
  272. sklearnex/tests/test_patching.py +385 -0
  273. sklearnex/tests/test_run_to_run_stability.py +296 -0
  274. sklearnex/utils/__init__.py +19 -0
  275. sklearnex/utils/_array_api.py +82 -0
  276. sklearnex/utils/parallel.py +59 -0
  277. sklearnex/utils/tests/test_finite.py +89 -0
  278. sklearnex/utils/validation.py +17 -0
sklearnex/svm/svc.py ADDED
@@ -0,0 +1,360 @@
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
+ from scipy import sparse as sp
19
+ from sklearn.exceptions import NotFittedError
20
+ from sklearn.metrics import accuracy_score
21
+ from sklearn.svm import SVC as sklearn_SVC
22
+ from sklearn.utils.validation import _deprecate_positional_args
23
+
24
+ from daal4py.sklearn._n_jobs_support import control_n_jobs
25
+ from daal4py.sklearn._utils import sklearn_check_version
26
+
27
+ from .._device_offload import dispatch, wrap_output_data
28
+ from .._utils import PatchingConditionsChain
29
+ from ..utils._array_api import get_namespace
30
+ from ._common import BaseSVC
31
+
32
+ if sklearn_check_version("1.0"):
33
+ from sklearn.utils.metaestimators import available_if
34
+
35
+ from onedal.svm import SVC as onedal_SVC
36
+
37
+
38
+ @control_n_jobs(
39
+ decorated_methods=["fit", "predict", "_predict_proba", "decision_function", "score"]
40
+ )
41
+ class SVC(sklearn_SVC, BaseSVC):
42
+ __doc__ = sklearn_SVC.__doc__
43
+
44
+ if sklearn_check_version("1.2"):
45
+ _parameter_constraints: dict = {**sklearn_SVC._parameter_constraints}
46
+
47
+ @_deprecate_positional_args
48
+ def __init__(
49
+ self,
50
+ *,
51
+ C=1.0,
52
+ kernel="rbf",
53
+ degree=3,
54
+ gamma="scale",
55
+ coef0=0.0,
56
+ shrinking=True,
57
+ probability=False,
58
+ tol=1e-3,
59
+ cache_size=200,
60
+ class_weight=None,
61
+ verbose=False,
62
+ max_iter=-1,
63
+ decision_function_shape="ovr",
64
+ break_ties=False,
65
+ random_state=None,
66
+ ):
67
+ super().__init__(
68
+ C=C,
69
+ kernel=kernel,
70
+ degree=degree,
71
+ gamma=gamma,
72
+ coef0=coef0,
73
+ shrinking=shrinking,
74
+ probability=probability,
75
+ tol=tol,
76
+ cache_size=cache_size,
77
+ class_weight=class_weight,
78
+ verbose=verbose,
79
+ max_iter=max_iter,
80
+ decision_function_shape=decision_function_shape,
81
+ break_ties=break_ties,
82
+ random_state=random_state,
83
+ )
84
+
85
+ def fit(self, X, y, sample_weight=None):
86
+ if sklearn_check_version("1.2"):
87
+ self._validate_params()
88
+ elif self.C <= 0:
89
+ # else if added to correct issues with
90
+ # sklearn tests:
91
+ # svm/tests/test_sparse.py::test_error
92
+ # svm/tests/test_svm.py::test_bad_input
93
+ # for sklearn versions < 1.2 (i.e. without
94
+ # validate_params parameter checking)
95
+ # Without this, a segmentation fault with
96
+ # Windows fatal exception: access violation
97
+ # occurs
98
+ raise ValueError("C <= 0")
99
+ if sklearn_check_version("1.0"):
100
+ self._check_feature_names(X, reset=True)
101
+ dispatch(
102
+ self,
103
+ "fit",
104
+ {
105
+ "onedal": self.__class__._onedal_fit,
106
+ "sklearn": sklearn_SVC.fit,
107
+ },
108
+ X,
109
+ y,
110
+ sample_weight=sample_weight,
111
+ )
112
+
113
+ return self
114
+
115
+ @wrap_output_data
116
+ def predict(self, X):
117
+ if sklearn_check_version("1.0"):
118
+ self._check_feature_names(X, reset=False)
119
+ return dispatch(
120
+ self,
121
+ "predict",
122
+ {
123
+ "onedal": self.__class__._onedal_predict,
124
+ "sklearn": sklearn_SVC.predict,
125
+ },
126
+ X,
127
+ )
128
+
129
+ @wrap_output_data
130
+ def score(self, X, y, sample_weight=None):
131
+ if sklearn_check_version("1.0"):
132
+ self._check_feature_names(X, reset=False)
133
+ return dispatch(
134
+ self,
135
+ "score",
136
+ {
137
+ "onedal": self.__class__._onedal_score,
138
+ "sklearn": sklearn_SVC.score,
139
+ },
140
+ X,
141
+ y,
142
+ sample_weight=sample_weight,
143
+ )
144
+
145
+ if sklearn_check_version("1.0"):
146
+
147
+ @available_if(sklearn_SVC._check_proba)
148
+ def predict_proba(self, X):
149
+ """
150
+ Compute probabilities of possible outcomes for samples in X.
151
+
152
+ The model need to have probability information computed at training
153
+ time: fit with attribute `probability` set to True.
154
+
155
+ Parameters
156
+ ----------
157
+ X : array-like of shape (n_samples, n_features)
158
+ For kernel="precomputed", the expected shape of X is
159
+ (n_samples_test, n_samples_train).
160
+
161
+ Returns
162
+ -------
163
+ T : ndarray of shape (n_samples, n_classes)
164
+ Returns the probability of the sample for each class in
165
+ the model. The columns correspond to the classes in sorted
166
+ order, as they appear in the attribute :term:`classes_`.
167
+
168
+ Notes
169
+ -----
170
+ The probability model is created using cross validation, so
171
+ the results can be slightly different than those obtained by
172
+ predict. Also, it will produce meaningless results on very small
173
+ datasets.
174
+ """
175
+ return self._predict_proba(X)
176
+
177
+ @available_if(sklearn_SVC._check_proba)
178
+ def predict_log_proba(self, X):
179
+ """Compute log probabilities of possible outcomes for samples in X.
180
+
181
+ The model need to have probability information computed at training
182
+ time: fit with attribute `probability` set to True.
183
+
184
+ Parameters
185
+ ----------
186
+ X : array-like of shape (n_samples, n_features) or \
187
+ (n_samples_test, n_samples_train)
188
+ For kernel="precomputed", the expected shape of X is
189
+ (n_samples_test, n_samples_train).
190
+
191
+ Returns
192
+ -------
193
+ T : ndarray of shape (n_samples, n_classes)
194
+ Returns the log-probabilities of the sample for each class in
195
+ the model. The columns correspond to the classes in sorted
196
+ order, as they appear in the attribute :term:`classes_`.
197
+
198
+ Notes
199
+ -----
200
+ The probability model is created using cross validation, so
201
+ the results can be slightly different than those obtained by
202
+ predict. Also, it will produce meaningless results on very small
203
+ datasets.
204
+ """
205
+ xp, _ = get_namespace(X)
206
+
207
+ return xp.log(self.predict_proba(X))
208
+
209
+ else:
210
+
211
+ @property
212
+ def predict_proba(self):
213
+ self._check_proba()
214
+ return self._predict_proba
215
+
216
+ def _predict_log_proba(self, X):
217
+ xp, _ = get_namespace(X)
218
+ return xp.log(self.predict_proba(X))
219
+
220
+ predict_proba.__doc__ = sklearn_SVC.predict_proba.__doc__
221
+
222
+ @wrap_output_data
223
+ def _predict_proba(self, X):
224
+ sklearn_pred_proba = (
225
+ sklearn_SVC.predict_proba
226
+ if sklearn_check_version("1.0")
227
+ else sklearn_SVC._predict_proba
228
+ )
229
+
230
+ return dispatch(
231
+ self,
232
+ "predict_proba",
233
+ {
234
+ "onedal": self.__class__._onedal_predict_proba,
235
+ "sklearn": sklearn_pred_proba,
236
+ },
237
+ X,
238
+ )
239
+
240
+ @wrap_output_data
241
+ def decision_function(self, X):
242
+ if sklearn_check_version("1.0"):
243
+ self._check_feature_names(X, reset=False)
244
+ return dispatch(
245
+ self,
246
+ "decision_function",
247
+ {
248
+ "onedal": self.__class__._onedal_decision_function,
249
+ "sklearn": sklearn_SVC.decision_function,
250
+ },
251
+ X,
252
+ )
253
+
254
+ decision_function.__doc__ = sklearn_SVC.decision_function.__doc__
255
+
256
+ def _onedal_gpu_supported(self, method_name, *data):
257
+ class_name = self.__class__.__name__
258
+ patching_status = PatchingConditionsChain(
259
+ f"sklearn.svm.{class_name}.{method_name}"
260
+ )
261
+ if len(data) > 1:
262
+ self._class_count = len(np.unique(data[1]))
263
+ self._is_sparse = sp.issparse(data[0])
264
+ conditions = [
265
+ (
266
+ self.kernel in ["linear", "rbf"],
267
+ f'Kernel is "{self.kernel}" while '
268
+ '"linear" and "rbf" are only supported on GPU.',
269
+ ),
270
+ (self.class_weight is None, "Class weight is not supported on GPU."),
271
+ (not self._is_sparse, "Sparse input is not supported on GPU."),
272
+ (self._class_count == 2, "Multiclassification is not supported on GPU."),
273
+ ]
274
+ if method_name == "fit":
275
+ patching_status.and_conditions(conditions)
276
+ return patching_status
277
+ if method_name in ["predict", "predict_proba", "decision_function", "score"]:
278
+ conditions.append(
279
+ (hasattr(self, "_onedal_estimator"), "oneDAL model was not trained")
280
+ )
281
+ patching_status.and_conditions(conditions)
282
+ return patching_status
283
+ raise RuntimeError(f"Unknown method {method_name} in {class_name}")
284
+
285
+ def _get_sample_weight(self, X, y, sample_weight=None):
286
+ sample_weight = super()._get_sample_weight(X, y, sample_weight)
287
+ if sample_weight is None:
288
+ return sample_weight
289
+
290
+ if np.any(sample_weight <= 0) and len(np.unique(y[sample_weight > 0])) != len(
291
+ self.classes_
292
+ ):
293
+ raise ValueError(
294
+ "Invalid input - all samples with positive weights "
295
+ "belong to the same class"
296
+ if sklearn_check_version("1.2")
297
+ else "Invalid input - all samples with positive weights "
298
+ "have the same label."
299
+ )
300
+ return sample_weight
301
+
302
+ def _onedal_fit(self, X, y, sample_weight=None, queue=None):
303
+ X, _, weights = self._onedal_fit_checks(X, y, sample_weight)
304
+ onedal_params = {
305
+ "C": self.C,
306
+ "kernel": self.kernel,
307
+ "degree": self.degree,
308
+ "gamma": self._compute_gamma_sigma(X),
309
+ "coef0": self.coef0,
310
+ "tol": self.tol,
311
+ "shrinking": self.shrinking,
312
+ "cache_size": self.cache_size,
313
+ "max_iter": self.max_iter,
314
+ "class_weight": self.class_weight,
315
+ "break_ties": self.break_ties,
316
+ "decision_function_shape": self.decision_function_shape,
317
+ }
318
+
319
+ self._onedal_estimator = onedal_SVC(**onedal_params)
320
+ self._onedal_estimator.fit(X, y, weights, queue=queue)
321
+
322
+ if self.probability:
323
+ self._fit_proba(
324
+ X,
325
+ y,
326
+ sample_weight=sample_weight,
327
+ queue=queue,
328
+ )
329
+
330
+ self._save_attributes()
331
+
332
+ def _onedal_predict(self, X, queue=None):
333
+ return self._onedal_estimator.predict(X, queue=queue)
334
+
335
+ def _onedal_predict_proba(self, X, queue=None):
336
+ if getattr(self, "clf_prob", None) is None:
337
+ raise NotFittedError(
338
+ "predict_proba is not available when fitted with probability=False"
339
+ )
340
+ from .._config import config_context, get_config
341
+
342
+ # We use stock metaestimators below, so the only way
343
+ # to pass a queue is using config_context.
344
+ cfg = get_config()
345
+ cfg["target_offload"] = queue
346
+ with config_context(**cfg):
347
+ return self.clf_prob.predict_proba(X)
348
+
349
+ def _onedal_decision_function(self, X, queue=None):
350
+ return self._onedal_estimator.decision_function(X, queue=queue)
351
+
352
+ def _onedal_score(self, X, y, sample_weight=None, queue=None):
353
+ return accuracy_score(
354
+ y, self._onedal_predict(X, queue=queue), sample_weight=sample_weight
355
+ )
356
+
357
+ fit.__doc__ = sklearn_SVC.fit.__doc__
358
+ predict.__doc__ = sklearn_SVC.predict.__doc__
359
+ decision_function.__doc__ = sklearn_SVC.decision_function.__doc__
360
+ score.__doc__ = sklearn_SVC.score.__doc__
sklearnex/svm/svr.py ADDED
@@ -0,0 +1,149 @@
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
+ from sklearn.svm import SVR as sklearn_SVR
18
+ from sklearn.utils.validation import _deprecate_positional_args
19
+
20
+ from daal4py.sklearn._n_jobs_support import control_n_jobs
21
+ from daal4py.sklearn._utils import sklearn_check_version
22
+ from onedal.svm import SVR as onedal_SVR
23
+
24
+ from .._device_offload import dispatch, wrap_output_data
25
+ from ._common import BaseSVR
26
+
27
+
28
+ @control_n_jobs(decorated_methods=["fit", "predict"])
29
+ class SVR(sklearn_SVR, BaseSVR):
30
+ __doc__ = sklearn_SVR.__doc__
31
+
32
+ if sklearn_check_version("1.2"):
33
+ _parameter_constraints: dict = {**sklearn_SVR._parameter_constraints}
34
+
35
+ @_deprecate_positional_args
36
+ def __init__(
37
+ self,
38
+ *,
39
+ kernel="rbf",
40
+ degree=3,
41
+ gamma="scale",
42
+ coef0=0.0,
43
+ tol=1e-3,
44
+ C=1.0,
45
+ epsilon=0.1,
46
+ shrinking=True,
47
+ cache_size=200,
48
+ verbose=False,
49
+ max_iter=-1,
50
+ ):
51
+ super().__init__(
52
+ kernel=kernel,
53
+ degree=degree,
54
+ gamma=gamma,
55
+ coef0=coef0,
56
+ tol=tol,
57
+ C=C,
58
+ epsilon=epsilon,
59
+ shrinking=shrinking,
60
+ cache_size=cache_size,
61
+ verbose=verbose,
62
+ max_iter=max_iter,
63
+ )
64
+
65
+ def fit(self, X, y, sample_weight=None):
66
+ if sklearn_check_version("1.2"):
67
+ self._validate_params()
68
+ elif self.C <= 0:
69
+ # else if added to correct issues with
70
+ # sklearn tests:
71
+ # svm/tests/test_sparse.py::test_error
72
+ # svm/tests/test_svm.py::test_bad_input
73
+ # for sklearn versions < 1.2 (i.e. without
74
+ # validate_params parameter checking)
75
+ # Without this, a segmentation fault with
76
+ # Windows fatal exception: access violation
77
+ # occurs
78
+ raise ValueError("C <= 0")
79
+ if sklearn_check_version("1.0"):
80
+ self._check_feature_names(X, reset=True)
81
+ dispatch(
82
+ self,
83
+ "fit",
84
+ {
85
+ "onedal": self.__class__._onedal_fit,
86
+ "sklearn": sklearn_SVR.fit,
87
+ },
88
+ X,
89
+ y,
90
+ sample_weight=sample_weight,
91
+ )
92
+
93
+ return self
94
+
95
+ @wrap_output_data
96
+ def predict(self, X):
97
+ if sklearn_check_version("1.0"):
98
+ self._check_feature_names(X, reset=False)
99
+ return dispatch(
100
+ self,
101
+ "predict",
102
+ {
103
+ "onedal": self.__class__._onedal_predict,
104
+ "sklearn": sklearn_SVR.predict,
105
+ },
106
+ X,
107
+ )
108
+
109
+ @wrap_output_data
110
+ def score(self, X, y, sample_weight=None):
111
+ if sklearn_check_version("1.0"):
112
+ self._check_feature_names(X, reset=False)
113
+ return dispatch(
114
+ self,
115
+ "score",
116
+ {
117
+ "onedal": self.__class__._onedal_score,
118
+ "sklearn": sklearn_SVR.score,
119
+ },
120
+ X,
121
+ y,
122
+ sample_weight=sample_weight,
123
+ )
124
+
125
+ def _onedal_fit(self, X, y, sample_weight=None, queue=None):
126
+ X, _, sample_weight = self._onedal_fit_checks(X, y, sample_weight)
127
+ onedal_params = {
128
+ "C": self.C,
129
+ "epsilon": self.epsilon,
130
+ "kernel": self.kernel,
131
+ "degree": self.degree,
132
+ "gamma": self._compute_gamma_sigma(X),
133
+ "coef0": self.coef0,
134
+ "tol": self.tol,
135
+ "shrinking": self.shrinking,
136
+ "cache_size": self.cache_size,
137
+ "max_iter": self.max_iter,
138
+ }
139
+
140
+ self._onedal_estimator = onedal_SVR(**onedal_params)
141
+ self._onedal_estimator.fit(X, y, sample_weight, queue=queue)
142
+ self._save_attributes()
143
+
144
+ def _onedal_predict(self, X, queue=None):
145
+ return self._onedal_estimator.predict(X, queue=queue)
146
+
147
+ fit.__doc__ = sklearn_SVR.fit.__doc__
148
+ predict.__doc__ = sklearn_SVR.predict.__doc__
149
+ score.__doc__ = sklearn_SVR.score.__doc__
@@ -0,0 +1,93 @@
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_allclose
20
+
21
+ from onedal.tests.utils._dataframes_support import (
22
+ _as_numpy,
23
+ _convert_to_dataframe,
24
+ get_dataframes_and_queues,
25
+ )
26
+
27
+
28
+ @pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
29
+ def test_sklearnex_import_svc(dataframe, queue):
30
+ if queue and queue.sycl_device.is_gpu:
31
+ pytest.skip("SVC fit for the GPU sycl_queue is buggy.")
32
+ from sklearnex.svm import SVC
33
+
34
+ X = np.array([[-2, -1], [-1, -1], [-1, -2], [+1, +1], [+1, +2], [+2, +1]])
35
+ y = np.array([1, 1, 1, 2, 2, 2])
36
+ X = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
37
+ y = _convert_to_dataframe(y, sycl_queue=queue, target_df=dataframe)
38
+ svc = SVC(kernel="linear").fit(X, y)
39
+ assert "daal4py" in svc.__module__ or "sklearnex" in svc.__module__
40
+ assert_allclose(_as_numpy(svc.dual_coef_), [[-0.25, 0.25]])
41
+ assert_allclose(_as_numpy(svc.support_), [1, 3])
42
+
43
+
44
+ @pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
45
+ def test_sklearnex_import_nusvc(dataframe, queue):
46
+ if queue and queue.sycl_device.is_gpu:
47
+ pytest.skip("NuSVC fit for the GPU sycl_queue is buggy.")
48
+ from sklearnex.svm import NuSVC
49
+
50
+ X = np.array([[-2, -1], [-1, -1], [-1, -2], [+1, +1], [+1, +2], [+2, +1]])
51
+ y = np.array([1, 1, 1, 2, 2, 2])
52
+ X = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
53
+ y = _convert_to_dataframe(y, sycl_queue=queue, target_df=dataframe)
54
+ svc = NuSVC(kernel="linear").fit(X, y)
55
+ assert "daal4py" in svc.__module__ or "sklearnex" in svc.__module__
56
+ assert_allclose(
57
+ _as_numpy(svc.dual_coef_), [[-0.04761905, -0.0952381, 0.0952381, 0.04761905]]
58
+ )
59
+ assert_allclose(_as_numpy(svc.support_), [0, 1, 3, 4])
60
+
61
+
62
+ @pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
63
+ def test_sklearnex_import_svr(dataframe, queue):
64
+ if queue and queue.sycl_device.is_gpu:
65
+ pytest.skip("SVR fit for the GPU sycl_queue is buggy.")
66
+ from sklearnex.svm import SVR
67
+
68
+ X = np.array([[-2, -1], [-1, -1], [-1, -2], [+1, +1], [+1, +2], [+2, +1]])
69
+ y = np.array([1, 1, 1, 2, 2, 2])
70
+ X = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
71
+ y = _convert_to_dataframe(y, sycl_queue=queue, target_df=dataframe)
72
+ svc = SVR(kernel="linear").fit(X, y)
73
+ assert "daal4py" in svc.__module__ or "sklearnex" in svc.__module__
74
+ assert_allclose(_as_numpy(svc.dual_coef_), [[-0.1, 0.1]])
75
+ assert_allclose(_as_numpy(svc.support_), [1, 3])
76
+
77
+
78
+ @pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
79
+ def test_sklearnex_import_nusvr(dataframe, queue):
80
+ if queue and queue.sycl_device.is_gpu:
81
+ pytest.skip("NuSVR fit for the GPU sycl_queue is buggy.")
82
+ from sklearnex.svm import NuSVR
83
+
84
+ X = np.array([[-2, -1], [-1, -1], [-1, -2], [+1, +1], [+1, +2], [+2, +1]])
85
+ y = np.array([1, 1, 1, 2, 2, 2])
86
+ X = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
87
+ y = _convert_to_dataframe(y, sycl_queue=queue, target_df=dataframe)
88
+ svc = NuSVR(kernel="linear", nu=0.9).fit(X, y)
89
+ assert "daal4py" in svc.__module__ or "sklearnex" in svc.__module__
90
+ assert_allclose(
91
+ _as_numpy(svc.dual_coef_), [[-1.0, 0.611111, 1.0, -0.611111]], rtol=1e-3
92
+ )
93
+ assert_allclose(_as_numpy(svc.support_), [1, 2, 3, 5])