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

Files changed (280) hide show
  1. daal4py/__init__.py +73 -0
  2. daal4py/__main__.py +58 -0
  3. daal4py/_daal4py.cpython-312-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-312-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 +693 -0
  59. onedal/__init__.py +83 -0
  60. onedal/_config.py +54 -0
  61. onedal/_device_offload.py +222 -0
  62. onedal/_onedal_py_dpc.cpython-312-x86_64-linux-gnu.so +0 -0
  63. onedal/_onedal_py_host.cpython-312-x86_64-linux-gnu.so +0 -0
  64. onedal/_onedal_py_spmd_dpc.cpython-312-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 +564 -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 +125 -0
  83. onedal/common/tests/test_policy.py +76 -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 +154 -0
  91. onedal/datatypes/tests/common.py +126 -0
  92. onedal/datatypes/tests/test_data.py +414 -0
  93. onedal/decomposition/__init__.py +20 -0
  94. onedal/decomposition/incremental_pca.py +204 -0
  95. onedal/decomposition/pca.py +186 -0
  96. onedal/decomposition/tests/test_incremental_pca.py +198 -0
  97. onedal/ensemble/__init__.py +29 -0
  98. onedal/ensemble/forest.py +727 -0
  99. onedal/ensemble/tests/test_random_forest.py +97 -0
  100. onedal/linear_model/__init__.py +27 -0
  101. onedal/linear_model/incremental_linear_model.py +258 -0
  102. onedal/linear_model/linear_model.py +329 -0
  103. onedal/linear_model/logistic_regression.py +249 -0
  104. onedal/linear_model/tests/test_incremental_linear_regression.py +168 -0
  105. onedal/linear_model/tests/test_incremental_ridge_regression.py +107 -0
  106. onedal/linear_model/tests/test_linear_regression.py +250 -0
  107. onedal/linear_model/tests/test_logistic_regression.py +95 -0
  108. onedal/linear_model/tests/test_ridge.py +95 -0
  109. onedal/neighbors/__init__.py +19 -0
  110. onedal/neighbors/neighbors.py +767 -0
  111. onedal/neighbors/tests/test_knn_classification.py +49 -0
  112. onedal/primitives/__init__.py +27 -0
  113. onedal/primitives/get_tree.py +25 -0
  114. onedal/primitives/kernel_functions.py +153 -0
  115. onedal/primitives/tests/test_kernel_functions.py +159 -0
  116. onedal/spmd/__init__.py +25 -0
  117. onedal/spmd/_base.py +30 -0
  118. onedal/spmd/basic_statistics/__init__.py +20 -0
  119. onedal/spmd/basic_statistics/basic_statistics.py +30 -0
  120. onedal/spmd/basic_statistics/incremental_basic_statistics.py +69 -0
  121. onedal/spmd/cluster/__init__.py +28 -0
  122. onedal/spmd/cluster/dbscan.py +23 -0
  123. onedal/spmd/cluster/kmeans.py +56 -0
  124. onedal/spmd/covariance/__init__.py +20 -0
  125. onedal/spmd/covariance/covariance.py +26 -0
  126. onedal/spmd/covariance/incremental_covariance.py +82 -0
  127. onedal/spmd/decomposition/__init__.py +20 -0
  128. onedal/spmd/decomposition/incremental_pca.py +117 -0
  129. onedal/spmd/decomposition/pca.py +26 -0
  130. onedal/spmd/ensemble/__init__.py +19 -0
  131. onedal/spmd/ensemble/forest.py +28 -0
  132. onedal/spmd/linear_model/__init__.py +21 -0
  133. onedal/spmd/linear_model/incremental_linear_model.py +97 -0
  134. onedal/spmd/linear_model/linear_model.py +30 -0
  135. onedal/spmd/linear_model/logistic_regression.py +38 -0
  136. onedal/spmd/neighbors/__init__.py +19 -0
  137. onedal/spmd/neighbors/neighbors.py +75 -0
  138. onedal/svm/__init__.py +19 -0
  139. onedal/svm/svm.py +556 -0
  140. onedal/svm/tests/test_csr_svm.py +351 -0
  141. onedal/svm/tests/test_nusvc.py +204 -0
  142. onedal/svm/tests/test_nusvr.py +210 -0
  143. onedal/svm/tests/test_svc.py +176 -0
  144. onedal/svm/tests/test_svr.py +243 -0
  145. onedal/tests/test_common.py +57 -0
  146. onedal/tests/utils/_dataframes_support.py +162 -0
  147. onedal/tests/utils/_device_selection.py +102 -0
  148. onedal/utils/__init__.py +49 -0
  149. onedal/utils/_array_api.py +81 -0
  150. onedal/utils/_dpep_helpers.py +56 -0
  151. onedal/utils/validation.py +440 -0
  152. scikit_learn_intelex-2025.1.0.dist-info/LICENSE.txt +202 -0
  153. scikit_learn_intelex-2025.1.0.dist-info/METADATA +231 -0
  154. scikit_learn_intelex-2025.1.0.dist-info/RECORD +280 -0
  155. scikit_learn_intelex-2025.1.0.dist-info/WHEEL +5 -0
  156. scikit_learn_intelex-2025.1.0.dist-info/top_level.txt +3 -0
  157. sklearnex/__init__.py +66 -0
  158. sklearnex/__main__.py +58 -0
  159. sklearnex/_config.py +116 -0
  160. sklearnex/_device_offload.py +126 -0
  161. sklearnex/_utils.py +132 -0
  162. sklearnex/basic_statistics/__init__.py +20 -0
  163. sklearnex/basic_statistics/basic_statistics.py +230 -0
  164. sklearnex/basic_statistics/incremental_basic_statistics.py +345 -0
  165. sklearnex/basic_statistics/tests/test_basic_statistics.py +270 -0
  166. sklearnex/basic_statistics/tests/test_incremental_basic_statistics.py +404 -0
  167. sklearnex/cluster/__init__.py +20 -0
  168. sklearnex/cluster/dbscan.py +197 -0
  169. sklearnex/cluster/k_means.py +395 -0
  170. sklearnex/cluster/tests/test_dbscan.py +38 -0
  171. sklearnex/cluster/tests/test_kmeans.py +159 -0
  172. sklearnex/conftest.py +82 -0
  173. sklearnex/covariance/__init__.py +19 -0
  174. sklearnex/covariance/incremental_covariance.py +398 -0
  175. sklearnex/covariance/tests/test_incremental_covariance.py +237 -0
  176. sklearnex/decomposition/__init__.py +19 -0
  177. sklearnex/decomposition/pca.py +425 -0
  178. sklearnex/decomposition/tests/test_pca.py +58 -0
  179. sklearnex/dispatcher.py +543 -0
  180. sklearnex/doc/third-party-programs.txt +424 -0
  181. sklearnex/ensemble/__init__.py +29 -0
  182. sklearnex/ensemble/_forest.py +2029 -0
  183. sklearnex/ensemble/tests/test_forest.py +135 -0
  184. sklearnex/glob/__main__.py +72 -0
  185. sklearnex/glob/dispatcher.py +101 -0
  186. sklearnex/linear_model/__init__.py +32 -0
  187. sklearnex/linear_model/coordinate_descent.py +30 -0
  188. sklearnex/linear_model/incremental_linear.py +482 -0
  189. sklearnex/linear_model/incremental_ridge.py +425 -0
  190. sklearnex/linear_model/linear.py +341 -0
  191. sklearnex/linear_model/logistic_regression.py +413 -0
  192. sklearnex/linear_model/ridge.py +24 -0
  193. sklearnex/linear_model/tests/test_incremental_linear.py +207 -0
  194. sklearnex/linear_model/tests/test_incremental_ridge.py +153 -0
  195. sklearnex/linear_model/tests/test_linear.py +167 -0
  196. sklearnex/linear_model/tests/test_logreg.py +134 -0
  197. sklearnex/manifold/__init__.py +19 -0
  198. sklearnex/manifold/t_sne.py +21 -0
  199. sklearnex/manifold/tests/test_tsne.py +26 -0
  200. sklearnex/metrics/__init__.py +23 -0
  201. sklearnex/metrics/pairwise.py +22 -0
  202. sklearnex/metrics/ranking.py +20 -0
  203. sklearnex/metrics/tests/test_metrics.py +39 -0
  204. sklearnex/model_selection/__init__.py +21 -0
  205. sklearnex/model_selection/split.py +22 -0
  206. sklearnex/model_selection/tests/test_model_selection.py +34 -0
  207. sklearnex/neighbors/__init__.py +27 -0
  208. sklearnex/neighbors/_lof.py +236 -0
  209. sklearnex/neighbors/common.py +310 -0
  210. sklearnex/neighbors/knn_classification.py +231 -0
  211. sklearnex/neighbors/knn_regression.py +207 -0
  212. sklearnex/neighbors/knn_unsupervised.py +178 -0
  213. sklearnex/neighbors/tests/test_neighbors.py +82 -0
  214. sklearnex/preview/__init__.py +17 -0
  215. sklearnex/preview/covariance/__init__.py +19 -0
  216. sklearnex/preview/covariance/covariance.py +138 -0
  217. sklearnex/preview/covariance/tests/test_covariance.py +66 -0
  218. sklearnex/preview/decomposition/__init__.py +19 -0
  219. sklearnex/preview/decomposition/incremental_pca.py +233 -0
  220. sklearnex/preview/decomposition/tests/test_incremental_pca.py +266 -0
  221. sklearnex/preview/linear_model/__init__.py +19 -0
  222. sklearnex/preview/linear_model/ridge.py +424 -0
  223. sklearnex/preview/linear_model/tests/test_ridge.py +102 -0
  224. sklearnex/spmd/__init__.py +25 -0
  225. sklearnex/spmd/basic_statistics/__init__.py +20 -0
  226. sklearnex/spmd/basic_statistics/basic_statistics.py +21 -0
  227. sklearnex/spmd/basic_statistics/incremental_basic_statistics.py +30 -0
  228. sklearnex/spmd/basic_statistics/tests/test_basic_statistics_spmd.py +107 -0
  229. sklearnex/spmd/basic_statistics/tests/test_incremental_basic_statistics_spmd.py +307 -0
  230. sklearnex/spmd/cluster/__init__.py +30 -0
  231. sklearnex/spmd/cluster/dbscan.py +50 -0
  232. sklearnex/spmd/cluster/kmeans.py +21 -0
  233. sklearnex/spmd/cluster/tests/test_dbscan_spmd.py +97 -0
  234. sklearnex/spmd/cluster/tests/test_kmeans_spmd.py +172 -0
  235. sklearnex/spmd/covariance/__init__.py +20 -0
  236. sklearnex/spmd/covariance/covariance.py +21 -0
  237. sklearnex/spmd/covariance/incremental_covariance.py +37 -0
  238. sklearnex/spmd/covariance/tests/test_covariance_spmd.py +107 -0
  239. sklearnex/spmd/covariance/tests/test_incremental_covariance_spmd.py +184 -0
  240. sklearnex/spmd/decomposition/__init__.py +20 -0
  241. sklearnex/spmd/decomposition/incremental_pca.py +30 -0
  242. sklearnex/spmd/decomposition/pca.py +21 -0
  243. sklearnex/spmd/decomposition/tests/test_incremental_pca_spmd.py +269 -0
  244. sklearnex/spmd/decomposition/tests/test_pca_spmd.py +128 -0
  245. sklearnex/spmd/ensemble/__init__.py +19 -0
  246. sklearnex/spmd/ensemble/forest.py +71 -0
  247. sklearnex/spmd/ensemble/tests/test_forest_spmd.py +265 -0
  248. sklearnex/spmd/linear_model/__init__.py +21 -0
  249. sklearnex/spmd/linear_model/incremental_linear_model.py +35 -0
  250. sklearnex/spmd/linear_model/linear_model.py +21 -0
  251. sklearnex/spmd/linear_model/logistic_regression.py +21 -0
  252. sklearnex/spmd/linear_model/tests/test_incremental_linear_spmd.py +329 -0
  253. sklearnex/spmd/linear_model/tests/test_linear_regression_spmd.py +145 -0
  254. sklearnex/spmd/linear_model/tests/test_logistic_regression_spmd.py +162 -0
  255. sklearnex/spmd/neighbors/__init__.py +19 -0
  256. sklearnex/spmd/neighbors/neighbors.py +25 -0
  257. sklearnex/spmd/neighbors/tests/test_neighbors_spmd.py +288 -0
  258. sklearnex/svm/__init__.py +29 -0
  259. sklearnex/svm/_common.py +339 -0
  260. sklearnex/svm/nusvc.py +371 -0
  261. sklearnex/svm/nusvr.py +170 -0
  262. sklearnex/svm/svc.py +399 -0
  263. sklearnex/svm/svr.py +167 -0
  264. sklearnex/svm/tests/test_svm.py +93 -0
  265. sklearnex/tests/test_common.py +390 -0
  266. sklearnex/tests/test_config.py +123 -0
  267. sklearnex/tests/test_memory_usage.py +379 -0
  268. sklearnex/tests/test_monkeypatch.py +276 -0
  269. sklearnex/tests/test_n_jobs_support.py +108 -0
  270. sklearnex/tests/test_parallel.py +48 -0
  271. sklearnex/tests/test_patching.py +385 -0
  272. sklearnex/tests/test_run_to_run_stability.py +321 -0
  273. sklearnex/tests/utils/__init__.py +44 -0
  274. sklearnex/tests/utils/base.py +371 -0
  275. sklearnex/tests/utils/spmd.py +198 -0
  276. sklearnex/utils/__init__.py +19 -0
  277. sklearnex/utils/_array_api.py +82 -0
  278. sklearnex/utils/parallel.py +59 -0
  279. sklearnex/utils/tests/test_finite.py +89 -0
  280. sklearnex/utils/validation.py +17 -0
@@ -0,0 +1,231 @@
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.metrics import accuracy_score
18
+ from sklearn.neighbors._classification import (
19
+ KNeighborsClassifier as _sklearn_KNeighborsClassifier,
20
+ )
21
+ from sklearn.neighbors._unsupervised import NearestNeighbors as _sklearn_NearestNeighbors
22
+ from sklearn.utils.validation import _deprecate_positional_args, check_is_fitted
23
+
24
+ from daal4py.sklearn._n_jobs_support import control_n_jobs
25
+ from daal4py.sklearn._utils import sklearn_check_version
26
+ from onedal.neighbors import KNeighborsClassifier as onedal_KNeighborsClassifier
27
+
28
+ from .._device_offload import dispatch, wrap_output_data
29
+ from .common import KNeighborsDispatchingBase
30
+
31
+ if sklearn_check_version("1.6"):
32
+ from sklearn.utils.validation import validate_data
33
+ else:
34
+ validate_data = _sklearn_KNeighborsClassifier._validate_data
35
+
36
+
37
+ @control_n_jobs(
38
+ decorated_methods=["fit", "predict", "predict_proba", "kneighbors", "score"]
39
+ )
40
+ class KNeighborsClassifier(KNeighborsDispatchingBase, _sklearn_KNeighborsClassifier):
41
+ __doc__ = _sklearn_KNeighborsClassifier.__doc__
42
+ if sklearn_check_version("1.2"):
43
+ _parameter_constraints: dict = {
44
+ **_sklearn_KNeighborsClassifier._parameter_constraints
45
+ }
46
+
47
+ if sklearn_check_version("1.0"):
48
+
49
+ def __init__(
50
+ self,
51
+ n_neighbors=5,
52
+ *,
53
+ weights="uniform",
54
+ algorithm="auto",
55
+ leaf_size=30,
56
+ p=2,
57
+ metric="minkowski",
58
+ metric_params=None,
59
+ n_jobs=None,
60
+ ):
61
+ super().__init__(
62
+ n_neighbors=n_neighbors,
63
+ weights=weights,
64
+ algorithm=algorithm,
65
+ leaf_size=leaf_size,
66
+ metric=metric,
67
+ p=p,
68
+ metric_params=metric_params,
69
+ n_jobs=n_jobs,
70
+ )
71
+
72
+ else:
73
+
74
+ @_deprecate_positional_args
75
+ def __init__(
76
+ self,
77
+ n_neighbors=5,
78
+ *,
79
+ weights="uniform",
80
+ algorithm="auto",
81
+ leaf_size=30,
82
+ p=2,
83
+ metric="minkowski",
84
+ metric_params=None,
85
+ n_jobs=None,
86
+ **kwargs,
87
+ ):
88
+ super().__init__(
89
+ n_neighbors=n_neighbors,
90
+ weights=weights,
91
+ algorithm=algorithm,
92
+ leaf_size=leaf_size,
93
+ metric=metric,
94
+ p=p,
95
+ metric_params=metric_params,
96
+ n_jobs=n_jobs,
97
+ **kwargs,
98
+ )
99
+
100
+ def fit(self, X, y):
101
+ dispatch(
102
+ self,
103
+ "fit",
104
+ {
105
+ "onedal": self.__class__._onedal_fit,
106
+ "sklearn": _sklearn_KNeighborsClassifier.fit,
107
+ },
108
+ X,
109
+ y,
110
+ )
111
+ return self
112
+
113
+ @wrap_output_data
114
+ def predict(self, X):
115
+ check_is_fitted(self)
116
+ if sklearn_check_version("1.0"):
117
+ self._check_feature_names(X, reset=False)
118
+ return dispatch(
119
+ self,
120
+ "predict",
121
+ {
122
+ "onedal": self.__class__._onedal_predict,
123
+ "sklearn": _sklearn_KNeighborsClassifier.predict,
124
+ },
125
+ X,
126
+ )
127
+
128
+ @wrap_output_data
129
+ def predict_proba(self, X):
130
+ check_is_fitted(self)
131
+ if sklearn_check_version("1.0"):
132
+ self._check_feature_names(X, reset=False)
133
+ return dispatch(
134
+ self,
135
+ "predict_proba",
136
+ {
137
+ "onedal": self.__class__._onedal_predict_proba,
138
+ "sklearn": _sklearn_KNeighborsClassifier.predict_proba,
139
+ },
140
+ X,
141
+ )
142
+
143
+ @wrap_output_data
144
+ def score(self, X, y, sample_weight=None):
145
+ check_is_fitted(self)
146
+ if sklearn_check_version("1.0"):
147
+ self._check_feature_names(X, reset=False)
148
+ return dispatch(
149
+ self,
150
+ "score",
151
+ {
152
+ "onedal": self.__class__._onedal_score,
153
+ "sklearn": _sklearn_KNeighborsClassifier.score,
154
+ },
155
+ X,
156
+ y,
157
+ sample_weight=sample_weight,
158
+ )
159
+
160
+ @wrap_output_data
161
+ def kneighbors(self, X=None, n_neighbors=None, return_distance=True):
162
+ check_is_fitted(self)
163
+ if sklearn_check_version("1.0") and X is not None:
164
+ self._check_feature_names(X, reset=False)
165
+ return dispatch(
166
+ self,
167
+ "kneighbors",
168
+ {
169
+ "onedal": self.__class__._onedal_kneighbors,
170
+ "sklearn": _sklearn_KNeighborsClassifier.kneighbors,
171
+ },
172
+ X,
173
+ n_neighbors=n_neighbors,
174
+ return_distance=return_distance,
175
+ )
176
+
177
+ def _onedal_fit(self, X, y, queue=None):
178
+ onedal_params = {
179
+ "n_neighbors": self.n_neighbors,
180
+ "weights": self.weights,
181
+ "algorithm": self.algorithm,
182
+ "metric": self.effective_metric_,
183
+ "p": self.effective_metric_params_["p"],
184
+ }
185
+
186
+ try:
187
+ requires_y = self._get_tags()["requires_y"]
188
+ except KeyError:
189
+ requires_y = False
190
+
191
+ self._onedal_estimator = onedal_KNeighborsClassifier(**onedal_params)
192
+ self._onedal_estimator.requires_y = requires_y
193
+ self._onedal_estimator.effective_metric_ = self.effective_metric_
194
+ self._onedal_estimator.effective_metric_params_ = self.effective_metric_params_
195
+ self._onedal_estimator.fit(X, y, queue=queue)
196
+
197
+ self._save_attributes()
198
+
199
+ def _onedal_predict(self, X, queue=None):
200
+ return self._onedal_estimator.predict(X, queue=queue)
201
+
202
+ def _onedal_predict_proba(self, X, queue=None):
203
+ return self._onedal_estimator.predict_proba(X, queue=queue)
204
+
205
+ def _onedal_kneighbors(
206
+ self, X=None, n_neighbors=None, return_distance=True, queue=None
207
+ ):
208
+ return self._onedal_estimator.kneighbors(
209
+ X, n_neighbors, return_distance, queue=queue
210
+ )
211
+
212
+ def _onedal_score(self, X, y, sample_weight=None, queue=None):
213
+ return accuracy_score(
214
+ y, self._onedal_predict(X, queue=queue), sample_weight=sample_weight
215
+ )
216
+
217
+ def _save_attributes(self):
218
+ self.classes_ = self._onedal_estimator.classes_
219
+ self.n_features_in_ = self._onedal_estimator.n_features_in_
220
+ self.n_samples_fit_ = self._onedal_estimator.n_samples_fit_
221
+ self._fit_X = self._onedal_estimator._fit_X
222
+ self._y = self._onedal_estimator._y
223
+ self._fit_method = self._onedal_estimator._fit_method
224
+ self.outputs_2d_ = self._onedal_estimator.outputs_2d_
225
+ self._tree = self._onedal_estimator._tree
226
+
227
+ fit.__doc__ = _sklearn_KNeighborsClassifier.fit.__doc__
228
+ predict.__doc__ = _sklearn_KNeighborsClassifier.predict.__doc__
229
+ predict_proba.__doc__ = _sklearn_KNeighborsClassifier.predict_proba.__doc__
230
+ score.__doc__ = _sklearn_KNeighborsClassifier.score.__doc__
231
+ kneighbors.__doc__ = _sklearn_KNeighborsClassifier.kneighbors.__doc__
@@ -0,0 +1,207 @@
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.metrics import r2_score
18
+ from sklearn.neighbors._regression import (
19
+ KNeighborsRegressor as _sklearn_KNeighborsRegressor,
20
+ )
21
+ from sklearn.utils.validation import _deprecate_positional_args, check_is_fitted
22
+
23
+ from daal4py.sklearn._n_jobs_support import control_n_jobs
24
+ from daal4py.sklearn._utils import sklearn_check_version
25
+ from onedal.neighbors import KNeighborsRegressor as onedal_KNeighborsRegressor
26
+
27
+ from .._device_offload import dispatch, wrap_output_data
28
+ from .common import KNeighborsDispatchingBase
29
+
30
+ if sklearn_check_version("1.6"):
31
+ from sklearn.utils.validation import validate_data
32
+ else:
33
+ validate_data = _sklearn_KNeighborsRegressor._validate_data
34
+
35
+
36
+ @control_n_jobs(decorated_methods=["fit", "predict", "kneighbors", "score"])
37
+ class KNeighborsRegressor(KNeighborsDispatchingBase, _sklearn_KNeighborsRegressor):
38
+ __doc__ = _sklearn_KNeighborsRegressor.__doc__
39
+ if sklearn_check_version("1.2"):
40
+ _parameter_constraints: dict = {
41
+ **_sklearn_KNeighborsRegressor._parameter_constraints
42
+ }
43
+
44
+ if sklearn_check_version("1.0"):
45
+
46
+ def __init__(
47
+ self,
48
+ n_neighbors=5,
49
+ *,
50
+ weights="uniform",
51
+ algorithm="auto",
52
+ leaf_size=30,
53
+ p=2,
54
+ metric="minkowski",
55
+ metric_params=None,
56
+ n_jobs=None,
57
+ ):
58
+ super().__init__(
59
+ n_neighbors=n_neighbors,
60
+ weights=weights,
61
+ algorithm=algorithm,
62
+ leaf_size=leaf_size,
63
+ metric=metric,
64
+ p=p,
65
+ metric_params=metric_params,
66
+ n_jobs=n_jobs,
67
+ )
68
+
69
+ else:
70
+
71
+ @_deprecate_positional_args
72
+ def __init__(
73
+ self,
74
+ n_neighbors=5,
75
+ *,
76
+ weights="uniform",
77
+ algorithm="auto",
78
+ leaf_size=30,
79
+ p=2,
80
+ metric="minkowski",
81
+ metric_params=None,
82
+ n_jobs=None,
83
+ **kwargs,
84
+ ):
85
+ super().__init__(
86
+ n_neighbors=n_neighbors,
87
+ weights=weights,
88
+ algorithm=algorithm,
89
+ leaf_size=leaf_size,
90
+ metric=metric,
91
+ p=p,
92
+ metric_params=metric_params,
93
+ n_jobs=n_jobs,
94
+ **kwargs,
95
+ )
96
+
97
+ def fit(self, X, y):
98
+ dispatch(
99
+ self,
100
+ "fit",
101
+ {
102
+ "onedal": self.__class__._onedal_fit,
103
+ "sklearn": _sklearn_KNeighborsRegressor.fit,
104
+ },
105
+ X,
106
+ y,
107
+ )
108
+ return self
109
+
110
+ @wrap_output_data
111
+ def predict(self, X):
112
+ check_is_fitted(self)
113
+ if sklearn_check_version("1.0"):
114
+ self._check_feature_names(X, reset=False)
115
+ return dispatch(
116
+ self,
117
+ "predict",
118
+ {
119
+ "onedal": self.__class__._onedal_predict,
120
+ "sklearn": _sklearn_KNeighborsRegressor.predict,
121
+ },
122
+ X,
123
+ )
124
+
125
+ @wrap_output_data
126
+ def score(self, X, y, sample_weight=None):
127
+ check_is_fitted(self)
128
+ if sklearn_check_version("1.0"):
129
+ self._check_feature_names(X, reset=False)
130
+ return dispatch(
131
+ self,
132
+ "score",
133
+ {
134
+ "onedal": self.__class__._onedal_score,
135
+ "sklearn": _sklearn_KNeighborsRegressor.score,
136
+ },
137
+ X,
138
+ y,
139
+ sample_weight=sample_weight,
140
+ )
141
+
142
+ @wrap_output_data
143
+ def kneighbors(self, X=None, n_neighbors=None, return_distance=True):
144
+ check_is_fitted(self)
145
+ if sklearn_check_version("1.0") and X is not None:
146
+ self._check_feature_names(X, reset=False)
147
+ return dispatch(
148
+ self,
149
+ "kneighbors",
150
+ {
151
+ "onedal": self.__class__._onedal_kneighbors,
152
+ "sklearn": _sklearn_KNeighborsRegressor.kneighbors,
153
+ },
154
+ X,
155
+ n_neighbors=n_neighbors,
156
+ return_distance=return_distance,
157
+ )
158
+
159
+ def _onedal_fit(self, X, y, queue=None):
160
+ onedal_params = {
161
+ "n_neighbors": self.n_neighbors,
162
+ "weights": self.weights,
163
+ "algorithm": self.algorithm,
164
+ "metric": self.effective_metric_,
165
+ "p": self.effective_metric_params_["p"],
166
+ }
167
+
168
+ try:
169
+ requires_y = self._get_tags()["requires_y"]
170
+ except KeyError:
171
+ requires_y = False
172
+
173
+ self._onedal_estimator = onedal_KNeighborsRegressor(**onedal_params)
174
+ self._onedal_estimator.requires_y = requires_y
175
+ self._onedal_estimator.effective_metric_ = self.effective_metric_
176
+ self._onedal_estimator.effective_metric_params_ = self.effective_metric_params_
177
+ self._onedal_estimator.fit(X, y, queue=queue)
178
+
179
+ self._save_attributes()
180
+
181
+ def _onedal_predict(self, X, queue=None):
182
+ return self._onedal_estimator.predict(X, queue=queue)
183
+
184
+ def _onedal_kneighbors(
185
+ self, X=None, n_neighbors=None, return_distance=True, queue=None
186
+ ):
187
+ return self._onedal_estimator.kneighbors(
188
+ X, n_neighbors, return_distance, queue=queue
189
+ )
190
+
191
+ def _onedal_score(self, X, y, sample_weight=None, queue=None):
192
+ return r2_score(
193
+ y, self._onedal_predict(X, queue=queue), sample_weight=sample_weight
194
+ )
195
+
196
+ def _save_attributes(self):
197
+ self.n_features_in_ = self._onedal_estimator.n_features_in_
198
+ self.n_samples_fit_ = self._onedal_estimator.n_samples_fit_
199
+ self._fit_X = self._onedal_estimator._fit_X
200
+ self._y = self._onedal_estimator._y
201
+ self._fit_method = self._onedal_estimator._fit_method
202
+ self._tree = self._onedal_estimator._tree
203
+
204
+ fit.__doc__ = _sklearn_KNeighborsRegressor.__doc__
205
+ predict.__doc__ = _sklearn_KNeighborsRegressor.predict.__doc__
206
+ kneighbors.__doc__ = _sklearn_KNeighborsRegressor.kneighbors.__doc__
207
+ score.__doc__ = _sklearn_KNeighborsRegressor.score.__doc__
@@ -0,0 +1,178 @@
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.neighbors._unsupervised import NearestNeighbors as _sklearn_NearestNeighbors
18
+ from sklearn.utils.validation import _deprecate_positional_args, check_is_fitted
19
+
20
+ from daal4py.sklearn._n_jobs_support import control_n_jobs
21
+ from daal4py.sklearn._utils import sklearn_check_version
22
+ from onedal.neighbors import NearestNeighbors as onedal_NearestNeighbors
23
+
24
+ from .._device_offload import dispatch, wrap_output_data
25
+ from .common import KNeighborsDispatchingBase
26
+
27
+ if sklearn_check_version("1.6"):
28
+ from sklearn.utils.validation import validate_data
29
+ else:
30
+ validate_data = _sklearn_NearestNeighbors._validate_data
31
+
32
+
33
+ @control_n_jobs(decorated_methods=["fit", "kneighbors", "radius_neighbors"])
34
+ class NearestNeighbors(KNeighborsDispatchingBase, _sklearn_NearestNeighbors):
35
+ __doc__ = _sklearn_NearestNeighbors.__doc__
36
+ if sklearn_check_version("1.2"):
37
+ _parameter_constraints: dict = {
38
+ **_sklearn_NearestNeighbors._parameter_constraints
39
+ }
40
+
41
+ @_deprecate_positional_args
42
+ def __init__(
43
+ self,
44
+ n_neighbors=5,
45
+ radius=1.0,
46
+ algorithm="auto",
47
+ leaf_size=30,
48
+ metric="minkowski",
49
+ p=2,
50
+ metric_params=None,
51
+ n_jobs=None,
52
+ ):
53
+ super().__init__(
54
+ n_neighbors=n_neighbors,
55
+ radius=radius,
56
+ algorithm=algorithm,
57
+ leaf_size=leaf_size,
58
+ metric=metric,
59
+ p=p,
60
+ metric_params=metric_params,
61
+ n_jobs=n_jobs,
62
+ )
63
+
64
+ def fit(self, X, y=None):
65
+ dispatch(
66
+ self,
67
+ "fit",
68
+ {
69
+ "onedal": self.__class__._onedal_fit,
70
+ "sklearn": _sklearn_NearestNeighbors.fit,
71
+ },
72
+ X,
73
+ None,
74
+ )
75
+ return self
76
+
77
+ @wrap_output_data
78
+ def kneighbors(self, X=None, n_neighbors=None, return_distance=True):
79
+ check_is_fitted(self)
80
+ if sklearn_check_version("1.0") and X is not None:
81
+ self._check_feature_names(X, reset=False)
82
+ return dispatch(
83
+ self,
84
+ "kneighbors",
85
+ {
86
+ "onedal": self.__class__._onedal_kneighbors,
87
+ "sklearn": _sklearn_NearestNeighbors.kneighbors,
88
+ },
89
+ X,
90
+ n_neighbors=n_neighbors,
91
+ return_distance=return_distance,
92
+ )
93
+
94
+ @wrap_output_data
95
+ def radius_neighbors(
96
+ self, X=None, radius=None, return_distance=True, sort_results=False
97
+ ):
98
+ if (
99
+ hasattr(self, "_onedal_estimator")
100
+ or getattr(self, "_tree", 0) is None
101
+ and self._fit_method == "kd_tree"
102
+ ):
103
+ _sklearn_NearestNeighbors.fit(self, self._fit_X, getattr(self, "_y", None))
104
+ check_is_fitted(self)
105
+ return dispatch(
106
+ self,
107
+ "radius_neighbors",
108
+ {
109
+ "onedal": None,
110
+ "sklearn": _sklearn_NearestNeighbors.radius_neighbors,
111
+ },
112
+ X,
113
+ radius=radius,
114
+ return_distance=return_distance,
115
+ sort_results=sort_results,
116
+ )
117
+
118
+ def radius_neighbors_graph(
119
+ self, X=None, radius=None, mode="connectivity", sort_results=False
120
+ ):
121
+ return dispatch(
122
+ self,
123
+ "radius_neighbors_graph",
124
+ {
125
+ "onedal": None,
126
+ "sklearn": _sklearn_NearestNeighbors.radius_neighbors_graph,
127
+ },
128
+ X,
129
+ radius=radius,
130
+ mode=mode,
131
+ sort_results=sort_results,
132
+ )
133
+
134
+ def _onedal_fit(self, X, y=None, queue=None):
135
+ onedal_params = {
136
+ "n_neighbors": self.n_neighbors,
137
+ "algorithm": self.algorithm,
138
+ "metric": self.effective_metric_,
139
+ "p": self.effective_metric_params_["p"],
140
+ }
141
+
142
+ try:
143
+ requires_y = self._get_tags()["requires_y"]
144
+ except KeyError:
145
+ requires_y = False
146
+
147
+ self._onedal_estimator = onedal_NearestNeighbors(**onedal_params)
148
+ self._onedal_estimator.requires_y = requires_y
149
+ self._onedal_estimator.effective_metric_ = self.effective_metric_
150
+ self._onedal_estimator.effective_metric_params_ = self.effective_metric_params_
151
+ self._onedal_estimator.fit(X, y, queue=queue)
152
+
153
+ self._save_attributes()
154
+
155
+ def _onedal_predict(self, X, queue=None):
156
+ return self._onedal_estimator.predict(X, queue=queue)
157
+
158
+ def _onedal_kneighbors(
159
+ self, X=None, n_neighbors=None, return_distance=True, queue=None
160
+ ):
161
+ return self._onedal_estimator.kneighbors(
162
+ X, n_neighbors, return_distance, queue=queue
163
+ )
164
+
165
+ def _save_attributes(self):
166
+ self.classes_ = self._onedal_estimator.classes_
167
+ self.n_features_in_ = self._onedal_estimator.n_features_in_
168
+ self.n_samples_fit_ = self._onedal_estimator.n_samples_fit_
169
+ self._fit_X = self._onedal_estimator._fit_X
170
+ self._fit_method = self._onedal_estimator._fit_method
171
+ self._tree = self._onedal_estimator._tree
172
+
173
+ fit.__doc__ = _sklearn_NearestNeighbors.__doc__
174
+ kneighbors.__doc__ = _sklearn_NearestNeighbors.kneighbors.__doc__
175
+ radius_neighbors.__doc__ = _sklearn_NearestNeighbors.radius_neighbors.__doc__
176
+ radius_neighbors_graph.__doc__ = (
177
+ _sklearn_NearestNeighbors.radius_neighbors_graph.__doc__
178
+ )
@@ -0,0 +1,82 @@
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 pytest
18
+ from numpy.testing import assert_allclose
19
+
20
+ from onedal.tests.utils._dataframes_support import (
21
+ _as_numpy,
22
+ _convert_to_dataframe,
23
+ get_dataframes_and_queues,
24
+ )
25
+ from sklearnex.neighbors import (
26
+ KNeighborsClassifier,
27
+ KNeighborsRegressor,
28
+ LocalOutlierFactor,
29
+ NearestNeighbors,
30
+ )
31
+
32
+
33
+ @pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
34
+ def test_sklearnex_import_knn_classifier(dataframe, queue):
35
+ X = _convert_to_dataframe([[0], [1], [2], [3]], sycl_queue=queue, target_df=dataframe)
36
+ y = _convert_to_dataframe([0, 0, 1, 1], sycl_queue=queue, target_df=dataframe)
37
+ neigh = KNeighborsClassifier(n_neighbors=3).fit(X, y)
38
+ y_test = _convert_to_dataframe([[1.1]], sycl_queue=queue, target_df=dataframe)
39
+ pred = _as_numpy(neigh.predict(y_test))
40
+ assert "sklearnex" in neigh.__module__
41
+ assert_allclose(pred, [0])
42
+
43
+
44
+ @pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
45
+ def test_sklearnex_import_knn_regression(dataframe, queue):
46
+ X = _convert_to_dataframe([[0], [1], [2], [3]], sycl_queue=queue, target_df=dataframe)
47
+ y = _convert_to_dataframe([0, 0, 1, 1], sycl_queue=queue, target_df=dataframe)
48
+ neigh = KNeighborsRegressor(n_neighbors=2).fit(X, y)
49
+ y_test = _convert_to_dataframe([[1.5]], sycl_queue=queue, target_df=dataframe)
50
+ pred = _as_numpy(neigh.predict(y_test)).squeeze()
51
+ assert "sklearnex" in neigh.__module__
52
+ assert_allclose(pred, 0.5)
53
+
54
+
55
+ @pytest.mark.parametrize("algorithm", ["auto", "brute"])
56
+ @pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
57
+ @pytest.mark.parametrize(
58
+ "estimator",
59
+ [LocalOutlierFactor, NearestNeighbors],
60
+ )
61
+ def test_sklearnex_kneighbors(algorithm, estimator, dataframe, queue):
62
+ X = [[0, 0, 2], [1, 0, 0], [0, 0, 1]]
63
+ X = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
64
+ test = _convert_to_dataframe([[0, 0, 1.3]], sycl_queue=queue, target_df=dataframe)
65
+ neigh = estimator(n_neighbors=2, algorithm=algorithm).fit(X)
66
+ result = neigh.kneighbors(test, 2, return_distance=False)
67
+ result = _as_numpy(result)
68
+ assert "sklearnex" in neigh.__module__
69
+ assert_allclose(result, [[2, 0]])
70
+ result = neigh.kneighbors()
71
+
72
+
73
+ @pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
74
+ def test_sklearnex_import_lof(dataframe, queue):
75
+ X = [[7, 7, 7], [1, 0, 0], [0, 0, 1], [0, 0, 1]]
76
+ X = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
77
+ lof = LocalOutlierFactor(n_neighbors=2)
78
+ result = lof.fit_predict(X)
79
+ result = _as_numpy(result)
80
+ assert hasattr(lof, "_onedal_estimator")
81
+ assert "sklearnex" in lof.__module__
82
+ assert_allclose(result, [-1, 1, 1, 1])