scikit-learn-intelex 2025.0.0__py39-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-39-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-39-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-39-x86_64-linux-gnu.so +0 -0
  63. onedal/_onedal_py_host.cpython-39-x86_64-linux-gnu.so +0 -0
  64. onedal/_onedal_py_spmd_dpc.cpython-39-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
@@ -0,0 +1,463 @@
1
+ # ===============================================================================
2
+ # Copyright 2024 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 numbers
18
+ import warnings
19
+
20
+ import numpy as np
21
+ from sklearn.base import BaseEstimator, MultiOutputMixin, RegressorMixin
22
+ from sklearn.exceptions import NotFittedError
23
+ from sklearn.metrics import r2_score
24
+ from sklearn.utils import check_array, gen_batches
25
+
26
+ from daal4py.sklearn._n_jobs_support import control_n_jobs
27
+ from daal4py.sklearn._utils import sklearn_check_version
28
+ from onedal.linear_model import (
29
+ IncrementalLinearRegression as onedal_IncrementalLinearRegression,
30
+ )
31
+
32
+ if sklearn_check_version("1.2"):
33
+ from sklearn.utils._param_validation import Interval
34
+
35
+ from onedal.common.hyperparameters import get_hyperparameters
36
+
37
+ from .._device_offload import dispatch, wrap_output_data
38
+ from .._utils import PatchingConditionsChain, register_hyperparameters
39
+
40
+
41
+ @register_hyperparameters(
42
+ {
43
+ "fit": get_hyperparameters("linear_regression", "train"),
44
+ "partial_fit": get_hyperparameters("linear_regression", "train"),
45
+ }
46
+ )
47
+ @control_n_jobs(
48
+ decorated_methods=["fit", "partial_fit", "predict", "_onedal_finalize_fit"]
49
+ )
50
+ class IncrementalLinearRegression(MultiOutputMixin, RegressorMixin, BaseEstimator):
51
+ """
52
+ Incremental estimator for linear regression.
53
+ Allows to train linear regression if data are splitted into batches.
54
+
55
+ Parameters
56
+ ----------
57
+ fit_intercept : bool, default=True
58
+ Whether to calculate the intercept for this model. If set
59
+ to False, no intercept will be used in calculations
60
+ (i.e. data is expected to be centered).
61
+
62
+ copy_X : bool, default=True
63
+ If True, X will be copied; else, it may be overwritten.
64
+
65
+ n_jobs : int, default=None
66
+ The number of jobs to use for the computation.
67
+
68
+ batch_size : int, default=None
69
+ The number of samples to use for each batch. Only used when calling
70
+ ``fit``. If ``batch_size`` is ``None``, then ``batch_size``
71
+ is inferred from the data and set to ``5 * n_features``, to provide a
72
+ balance between approximation accuracy and memory consumption.
73
+
74
+ Attributes
75
+ ----------
76
+ coef_ : array of shape (n_features, ) or (n_targets, n_features)
77
+ Estimated coefficients for the linear regression problem.
78
+ If multiple targets are passed during the fit (y 2D), this
79
+ is a 2D array of shape (n_targets, n_features), while if only
80
+ one target is passed, this is a 1D array of length n_features.
81
+
82
+ intercept_ : float or array of shape (n_targets,)
83
+ Independent term in the linear model. Set to 0.0 if
84
+ `fit_intercept = False`.
85
+
86
+ n_features_in_ : int
87
+ Number of features seen during :term:`fit`.
88
+
89
+ n_samples_seen_ : int
90
+ The number of samples processed by the estimator. Will be reset on
91
+ new calls to fit, but increments across ``partial_fit`` calls.
92
+ It should be not less than `n_features_in_` if `fit_intercept`
93
+ is False and not less than `n_features_in_` + 1 if `fit_intercept`
94
+ is True to obtain regression coefficients.
95
+
96
+ batch_size_ : int
97
+ Inferred batch size from ``batch_size``.
98
+
99
+ n_features_in_ : int
100
+ Number of features seen during :term:`fit` `partial_fit`.
101
+
102
+ """
103
+
104
+ _onedal_incremental_linear = staticmethod(onedal_IncrementalLinearRegression)
105
+
106
+ if sklearn_check_version("1.2"):
107
+ _parameter_constraints: dict = {
108
+ "fit_intercept": ["boolean"],
109
+ "copy_X": ["boolean"],
110
+ "n_jobs": [Interval(numbers.Integral, -1, None, closed="left"), None],
111
+ "batch_size": [Interval(numbers.Integral, 1, None, closed="left"), None],
112
+ }
113
+
114
+ def __init__(self, *, fit_intercept=True, copy_X=True, n_jobs=None, batch_size=None):
115
+ self.fit_intercept = fit_intercept
116
+ self.copy_X = copy_X
117
+ self.n_jobs = n_jobs
118
+ self.batch_size = batch_size
119
+
120
+ def _onedal_supported(self, method_name, *data):
121
+ patching_status = PatchingConditionsChain(
122
+ f"sklearn.linear_model.{self.__class__.__name__}.{method_name}"
123
+ )
124
+ return patching_status
125
+
126
+ _onedal_cpu_supported = _onedal_supported
127
+ _onedal_gpu_supported = _onedal_supported
128
+
129
+ def _onedal_predict(self, X, queue=None):
130
+ if sklearn_check_version("1.2"):
131
+ self._validate_params()
132
+
133
+ if sklearn_check_version("1.0"):
134
+ X = self._validate_data(
135
+ X,
136
+ dtype=[np.float64, np.float32],
137
+ copy=self.copy_X,
138
+ reset=False,
139
+ )
140
+ else:
141
+ X = check_array(
142
+ X,
143
+ dtype=[np.float64, np.float32],
144
+ copy=self.copy_X,
145
+ )
146
+
147
+ assert hasattr(self, "_onedal_estimator")
148
+ if self._need_to_finalize:
149
+ self._onedal_finalize_fit()
150
+ return self._onedal_estimator.predict(X, queue=queue)
151
+
152
+ def _onedal_score(self, X, y, sample_weight=None, queue=None):
153
+ return r2_score(
154
+ y, self._onedal_predict(X, queue=queue), sample_weight=sample_weight
155
+ )
156
+
157
+ def _onedal_partial_fit(self, X, y, check_input=True, queue=None):
158
+ first_pass = not hasattr(self, "n_samples_seen_") or self.n_samples_seen_ == 0
159
+
160
+ if sklearn_check_version("1.2"):
161
+ self._validate_params()
162
+
163
+ if check_input:
164
+ if sklearn_check_version("1.0"):
165
+ X, y = self._validate_data(
166
+ X,
167
+ y,
168
+ dtype=[np.float64, np.float32],
169
+ reset=first_pass,
170
+ copy=self.copy_X,
171
+ multi_output=True,
172
+ force_all_finite=False,
173
+ )
174
+ else:
175
+ X = check_array(
176
+ X,
177
+ dtype=[np.float64, np.float32],
178
+ copy=self.copy_X,
179
+ force_all_finite=False,
180
+ )
181
+ y = check_array(
182
+ y,
183
+ dtype=[np.float64, np.float32],
184
+ copy=False,
185
+ ensure_2d=False,
186
+ force_all_finite=False,
187
+ )
188
+
189
+ if first_pass:
190
+ self.n_samples_seen_ = X.shape[0]
191
+ self.n_features_in_ = X.shape[1]
192
+ else:
193
+ self.n_samples_seen_ += X.shape[0]
194
+ onedal_params = {"fit_intercept": self.fit_intercept, "copy_X": self.copy_X}
195
+ if not hasattr(self, "_onedal_estimator"):
196
+ self._onedal_estimator = self._onedal_incremental_linear(**onedal_params)
197
+ self._onedal_estimator.partial_fit(X, y, queue=queue)
198
+ self._need_to_finalize = True
199
+
200
+ def _onedal_finalize_fit(self, queue=None):
201
+ assert hasattr(self, "_onedal_estimator")
202
+ is_underdetermined = self.n_samples_seen_ < self.n_features_in_ + int(
203
+ self.fit_intercept
204
+ )
205
+ if is_underdetermined:
206
+ raise ValueError("Not enough samples to finalize")
207
+ self._onedal_estimator.finalize_fit(queue=queue)
208
+ self._need_to_finalize = False
209
+
210
+ def _onedal_fit(self, X, y, queue=None):
211
+ if sklearn_check_version("1.2"):
212
+ self._validate_params()
213
+
214
+ if sklearn_check_version("1.0"):
215
+ X, y = self._validate_data(
216
+ X,
217
+ y,
218
+ dtype=[np.float64, np.float32],
219
+ copy=self.copy_X,
220
+ multi_output=True,
221
+ ensure_2d=True,
222
+ )
223
+ else:
224
+ X = check_array(
225
+ X,
226
+ dtype=[np.float64, np.float32],
227
+ copy=self.copy_X,
228
+ )
229
+ y = check_array(
230
+ y,
231
+ dtype=[np.float64, np.float32],
232
+ copy=False,
233
+ ensure_2d=False,
234
+ )
235
+
236
+ n_samples, n_features = X.shape
237
+
238
+ is_underdetermined = n_samples < n_features + int(self.fit_intercept)
239
+ if is_underdetermined:
240
+ raise ValueError("Not enough samples to run oneDAL backend")
241
+
242
+ if self.batch_size is None:
243
+ self.batch_size_ = 5 * n_features
244
+ else:
245
+ self.batch_size_ = self.batch_size
246
+
247
+ self.n_samples_seen_ = 0
248
+ if hasattr(self, "_onedal_estimator"):
249
+ self._onedal_estimator._reset()
250
+
251
+ for batch in gen_batches(n_samples, self.batch_size_):
252
+ X_batch, y_batch = X[batch], y[batch]
253
+ self._onedal_partial_fit(X_batch, y_batch, check_input=False, queue=queue)
254
+
255
+ if sklearn_check_version("1.2"):
256
+ self._validate_params()
257
+
258
+ # finite check occurs on onedal side
259
+ self.n_features_in_ = n_features
260
+
261
+ if n_samples == 1:
262
+ warnings.warn(
263
+ "Only one sample available. You may want to reshape your data array"
264
+ )
265
+
266
+ self._onedal_finalize_fit(queue=queue)
267
+ return self
268
+
269
+ def get_intercept_(self):
270
+ if hasattr(self, "_onedal_estimator"):
271
+ if self._need_to_finalize:
272
+ self._onedal_finalize_fit()
273
+
274
+ return self._onedal_estimator.intercept_
275
+ else:
276
+ raise AttributeError(
277
+ f"'{self.__class__.__name__}' object has no attribute 'intercept_'"
278
+ )
279
+
280
+ def set_intercept_(self, value):
281
+ self.__dict__["intercept_"] = value
282
+ if hasattr(self, "_onedal_estimator"):
283
+ self._onedal_estimator.intercept_ = value
284
+ del self._onedal_estimator._onedal_model
285
+
286
+ def get_coef_(self):
287
+ if hasattr(self, "_onedal_estimator"):
288
+ if self._need_to_finalize:
289
+ self._onedal_finalize_fit()
290
+
291
+ return self._onedal_estimator.coef_
292
+ else:
293
+ raise AttributeError(
294
+ f"'{self.__class__.__name__}' object has no attribute 'coef_'"
295
+ )
296
+
297
+ def set_coef_(self, value):
298
+ self.__dict__["coef_"] = value
299
+ if hasattr(self, "_onedal_estimator"):
300
+ self._onedal_estimator.coef_ = value
301
+ del self._onedal_estimator._onedal_model
302
+
303
+ coef_ = property(get_coef_, set_coef_)
304
+ intercept_ = property(get_intercept_, set_intercept_)
305
+
306
+ def partial_fit(self, X, y, check_input=True):
307
+ """
308
+ Incremental fit linear model with X and y. All of X and y is
309
+ processed as a single batch.
310
+
311
+ Parameters
312
+ ----------
313
+ X : array-like of shape (n_samples, n_features)
314
+ Training data, where `n_samples` is the number of samples and
315
+ `n_features` is the number of features.
316
+
317
+ y : array-like of shape (n_samples,) or (n_samples, n_targets)
318
+ Target values, where `n_samples` is the number of samples and
319
+ `n_targets` is the number of targets.
320
+
321
+ Returns
322
+ -------
323
+ self : object
324
+ Returns the instance itself.
325
+ """
326
+
327
+ dispatch(
328
+ self,
329
+ "partial_fit",
330
+ {
331
+ "onedal": self.__class__._onedal_partial_fit,
332
+ "sklearn": None,
333
+ },
334
+ X,
335
+ y,
336
+ check_input=check_input,
337
+ )
338
+ return self
339
+
340
+ def fit(self, X, y):
341
+ """
342
+ Fit the model with X and y, using minibatches of size batch_size.
343
+
344
+ Parameters
345
+ ----------
346
+ X : array-like of shape (n_samples, n_features)
347
+ Training data, where `n_samples` is the number of samples and
348
+ `n_features` is the number of features. It is necessary for
349
+ `n_samples` to be not less than `n_features` if `fit_intercept`
350
+ is False and not less than `n_features` + 1 if `fit_intercept`
351
+ is True
352
+
353
+ y : array-like of shape (n_samples,) or (n_samples, n_targets)
354
+ Target values, where `n_samples` is the number of samples and
355
+ `n_targets` is the number of targets.
356
+
357
+ Returns
358
+ -------
359
+ self : object
360
+ Returns the instance itself.
361
+ """
362
+
363
+ dispatch(
364
+ self,
365
+ "fit",
366
+ {
367
+ "onedal": self.__class__._onedal_fit,
368
+ "sklearn": None,
369
+ },
370
+ X,
371
+ y,
372
+ )
373
+ return self
374
+
375
+ @wrap_output_data
376
+ def predict(self, X, y=None):
377
+ """
378
+ Predict using the linear model.
379
+ Parameters
380
+ ----------
381
+ X : array-like or sparse matrix, shape (n_samples, n_features)
382
+ Samples.
383
+ Returns
384
+ -------
385
+ C : array, shape (n_samples, n_targets)
386
+ Returns predicted values.
387
+ """
388
+ if not hasattr(self, "coef_"):
389
+ msg = (
390
+ "This %(name)s instance is not fitted yet. Call 'fit' or 'partial_fit' "
391
+ "with appropriate arguments before using this estimator."
392
+ )
393
+ raise NotFittedError(msg % {"name": self.__class__.__name__})
394
+
395
+ return dispatch(
396
+ self,
397
+ "predict",
398
+ {
399
+ "onedal": self.__class__._onedal_predict,
400
+ "sklearn": None,
401
+ },
402
+ X,
403
+ )
404
+
405
+ @wrap_output_data
406
+ def score(self, X, y, sample_weight=None):
407
+ """Return the coefficient of determination of the prediction.
408
+
409
+ The coefficient of determination :math:`R^2` is defined as
410
+ :math:`(1 - \\frac{u}{v})`, where :math:`u` is the residual
411
+ sum of squares ``((y_true - y_pred)** 2).sum()`` and :math:`v`
412
+ is the total sum of squares ``((y_true - y_true.mean()) ** 2).sum()``.
413
+ The best possible score is 1.0 and it can be negative (because the
414
+ model can be arbitrarily worse). A constant model that always predicts
415
+ the expected value of `y`, disregarding the input features, would get
416
+ a :math:`R^2` score of 0.0.
417
+
418
+ Parameters
419
+ ----------
420
+ X : array-like of shape (n_samples, n_features)
421
+ Test samples. For some estimators this may be a precomputed
422
+ kernel matrix or a list of generic objects instead with shape
423
+ ``(n_samples, n_samples_fitted)``, where ``n_samples_fitted``
424
+ is the number of samples used in the fitting for the estimator.
425
+
426
+ y : array-like of shape (n_samples,) or (n_samples, n_outputs)
427
+ True values for `X`.
428
+
429
+ sample_weight : array-like of shape (n_samples,), default=None
430
+ Sample weights.
431
+
432
+ Returns
433
+ -------
434
+ score : float
435
+ :math:`R^2` of ``self.predict(X)`` w.r.t. `y`.
436
+
437
+ Notes
438
+ -----
439
+ The :math:`R^2` score used when calling ``score`` on a regressor uses
440
+ ``multioutput='uniform_average'`` from version 0.23 to keep consistent
441
+ with default value of :func:`~sklearn.metrics.r2_score`.
442
+ This influences the ``score`` method of all the multioutput
443
+ regressors (except for
444
+ :class:`~sklearn.multioutput.MultiOutputRegressor`).
445
+ """
446
+ if not hasattr(self, "coef_"):
447
+ msg = (
448
+ "This %(name)s instance is not fitted yet. Call 'fit' or 'partial_fit' "
449
+ "with appropriate arguments before using this estimator."
450
+ )
451
+ raise NotFittedError(msg % {"name": self.__class__.__name__})
452
+
453
+ return dispatch(
454
+ self,
455
+ "score",
456
+ {
457
+ "onedal": self.__class__._onedal_score,
458
+ "sklearn": None,
459
+ },
460
+ X,
461
+ y,
462
+ sample_weight=sample_weight,
463
+ )