scikit-learn-intelex 2024.5.0__py311-none-win_amd64.whl → 2024.6.0__py311-none-win_amd64.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 (112) hide show
  1. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/cluster/dbscan.py +3 -0
  2. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/cluster/tests/test_dbscan.py +8 -6
  3. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/conftest.py +11 -1
  4. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/decomposition/tests/test_pca.py +4 -2
  5. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/dispatcher.py +15 -1
  6. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/ensemble/_forest.py +114 -23
  7. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/ensemble/tests/test_forest.py +13 -3
  8. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/glob/dispatcher.py +16 -2
  9. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/linear_model/incremental_linear.py +102 -25
  10. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/linear_model/linear.py +25 -7
  11. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/linear_model/logistic_regression.py +13 -15
  12. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/linear_model/tests/test_incremental_linear.py +10 -10
  13. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/linear_model/tests/test_linear.py +2 -2
  14. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/neighbors/knn_regression.py +24 -0
  15. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/preview/__init__.py +1 -1
  16. scikit_learn_intelex-2024.6.0.data/data/Lib/site-packages/sklearnex/preview/decomposition/__init__.py +19 -0
  17. scikit_learn_intelex-2024.6.0.data/data/Lib/site-packages/sklearnex/preview/decomposition/incremental_pca.py +228 -0
  18. scikit_learn_intelex-2024.6.0.data/data/Lib/site-packages/sklearnex/preview/decomposition/tests/test_incremental_pca.py +266 -0
  19. scikit_learn_intelex-2024.6.0.data/data/Lib/site-packages/sklearnex/svm/_common.py +330 -0
  20. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/svm/nusvc.py +40 -4
  21. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/svm/nusvr.py +31 -2
  22. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/svm/svc.py +40 -4
  23. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/svm/svr.py +31 -2
  24. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/tests/_utils.py +49 -17
  25. scikit_learn_intelex-2024.6.0.data/data/Lib/site-packages/sklearnex/tests/test_common.py +54 -0
  26. scikit_learn_intelex-2024.6.0.data/data/Lib/site-packages/sklearnex/tests/test_memory_usage.py +290 -0
  27. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/tests/test_patching.py +5 -12
  28. scikit_learn_intelex-2024.6.0.data/data/Lib/site-packages/sklearnex/tests/test_run_to_run_stability.py +283 -0
  29. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/utils/_namespace.py +1 -1
  30. {scikit_learn_intelex-2024.5.0.dist-info → scikit_learn_intelex-2024.6.0.dist-info}/METADATA +5 -2
  31. scikit_learn_intelex-2024.6.0.dist-info/RECORD +108 -0
  32. {scikit_learn_intelex-2024.5.0.dist-info → scikit_learn_intelex-2024.6.0.dist-info}/WHEEL +1 -1
  33. scikit_learn_intelex-2024.5.0.data/data/Lib/site-packages/sklearnex/svm/_common.py +0 -185
  34. scikit_learn_intelex-2024.5.0.data/data/Lib/site-packages/sklearnex/tests/test_memory_usage.py +0 -231
  35. scikit_learn_intelex-2024.5.0.data/data/Lib/site-packages/sklearnex/tests/test_run_to_run_stability_tests.py +0 -428
  36. scikit_learn_intelex-2024.5.0.dist-info/RECORD +0 -104
  37. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/__init__.py +0 -0
  38. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/__main__.py +0 -0
  39. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/_config.py +0 -0
  40. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/_device_offload.py +0 -0
  41. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/_utils.py +0 -0
  42. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/basic_statistics/__init__.py +0 -0
  43. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/basic_statistics/basic_statistics.py +0 -0
  44. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/basic_statistics/incremental_basic_statistics.py +0 -0
  45. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/basic_statistics/tests/test_incremental_basic_statistics.py +0 -0
  46. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/cluster/__init__.py +0 -0
  47. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/cluster/k_means.py +0 -0
  48. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/cluster/tests/test_kmeans.py +0 -0
  49. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/covariance/__init__.py +0 -0
  50. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/covariance/incremental_covariance.py +0 -0
  51. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/covariance/tests/test_incremental_covariance.py +0 -0
  52. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/decomposition/__init__.py +0 -0
  53. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/decomposition/pca.py +0 -0
  54. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/doc/third-party-programs.txt +0 -0
  55. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/ensemble/__init__.py +0 -0
  56. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/glob/__main__.py +0 -0
  57. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/linear_model/__init__.py +0 -0
  58. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/linear_model/coordinate_descent.py +0 -0
  59. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/linear_model/logistic_path.py +0 -0
  60. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/linear_model/ridge.py +0 -0
  61. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/linear_model/tests/test_logreg.py +0 -0
  62. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/manifold/__init__.py +0 -0
  63. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/manifold/t_sne.py +0 -0
  64. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/manifold/tests/test_tsne.py +0 -0
  65. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/metrics/__init__.py +0 -0
  66. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/metrics/pairwise.py +0 -0
  67. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/metrics/ranking.py +0 -0
  68. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/metrics/tests/test_metrics.py +0 -0
  69. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/model_selection/__init__.py +0 -0
  70. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/model_selection/split.py +0 -0
  71. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/model_selection/tests/test_model_selection.py +0 -0
  72. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/neighbors/__init__.py +0 -0
  73. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/neighbors/_lof.py +0 -0
  74. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/neighbors/common.py +0 -0
  75. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/neighbors/knn_classification.py +0 -0
  76. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/neighbors/knn_unsupervised.py +0 -0
  77. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/neighbors/tests/test_neighbors.py +0 -0
  78. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/preview/cluster/__init__.py +0 -0
  79. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/preview/cluster/_common.py +0 -0
  80. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/preview/cluster/k_means.py +0 -0
  81. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/preview/covariance/__init__.py +0 -0
  82. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/preview/covariance/covariance.py +0 -0
  83. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/preview/covariance/tests/test_covariance.py +0 -0
  84. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/__init__.py +0 -0
  85. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/basic_statistics/__init__.py +0 -0
  86. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/basic_statistics/basic_statistics.py +0 -0
  87. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/cluster/__init__.py +0 -0
  88. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/cluster/dbscan.py +0 -0
  89. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/cluster/kmeans.py +0 -0
  90. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/covariance/__init__.py +0 -0
  91. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/covariance/covariance.py +0 -0
  92. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/decomposition/__init__.py +0 -0
  93. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/decomposition/pca.py +0 -0
  94. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/ensemble/__init__.py +0 -0
  95. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/ensemble/forest.py +0 -0
  96. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/linear_model/__init__.py +0 -0
  97. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/linear_model/linear_model.py +0 -0
  98. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/linear_model/logistic_regression.py +0 -0
  99. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/neighbors/__init__.py +0 -0
  100. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/spmd/neighbors/neighbors.py +0 -0
  101. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/svm/__init__.py +0 -0
  102. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/svm/tests/test_svm.py +0 -0
  103. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/tests/test_config.py +0 -0
  104. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/tests/test_monkeypatch.py +0 -0
  105. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/tests/test_n_jobs_support.py +0 -0
  106. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/tests/test_parallel.py +0 -0
  107. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/utils/__init__.py +0 -0
  108. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/utils/parallel.py +0 -0
  109. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/utils/tests/test_finite.py +0 -0
  110. {scikit_learn_intelex-2024.5.0.data → scikit_learn_intelex-2024.6.0.data}/data/Lib/site-packages/sklearnex/utils/validation.py +0 -0
  111. {scikit_learn_intelex-2024.5.0.dist-info → scikit_learn_intelex-2024.6.0.dist-info}/LICENSE.txt +0 -0
  112. {scikit_learn_intelex-2024.5.0.dist-info → scikit_learn_intelex-2024.6.0.dist-info}/top_level.txt +0 -0
@@ -20,6 +20,7 @@ from abc import ABC
20
20
  import numpy as np
21
21
  from sklearn.exceptions import NotFittedError
22
22
  from sklearn.linear_model import LinearRegression as sklearn_LinearRegression
23
+ from sklearn.metrics import r2_score
23
24
 
24
25
  from daal4py.sklearn._n_jobs_support import control_n_jobs
25
26
  from daal4py.sklearn._utils import sklearn_check_version
@@ -123,6 +124,20 @@ class LinearRegression(sklearn_LinearRegression):
123
124
  X,
124
125
  )
125
126
 
127
+ @wrap_output_data
128
+ def score(self, X, y, sample_weight=None):
129
+ return dispatch(
130
+ self,
131
+ "score",
132
+ {
133
+ "onedal": self.__class__._onedal_score,
134
+ "sklearn": sklearn_LinearRegression.score,
135
+ },
136
+ X,
137
+ y,
138
+ sample_weight=sample_weight,
139
+ )
140
+
126
141
  def _test_type_and_finiteness(self, X_in):
127
142
  X = X_in if isinstance(X_in, np.ndarray) else np.asarray(X_in)
128
143
 
@@ -193,22 +208,19 @@ class LinearRegression(sklearn_LinearRegression):
193
208
  return patching_status
194
209
 
195
210
  def _onedal_predict_supported(self, method_name, *data):
196
- assert method_name == "predict"
197
- assert len(data) == 1
198
-
199
211
  class_name = self.__class__.__name__
200
212
  patching_status = PatchingConditionsChain(
201
213
  f"sklearn.linear_model.{class_name}.predict"
202
214
  )
203
215
 
204
- n_samples = _num_samples(*data)
216
+ n_samples = _num_samples(data[0])
205
217
  model_is_sparse = issparse(self.coef_) or (
206
218
  self.fit_intercept and issparse(self.intercept_)
207
219
  )
208
220
  dal_ready = patching_status.and_conditions(
209
221
  [
210
222
  (n_samples > 0, "Number of samples is less than 1."),
211
- (not issparse(*data), "Sparse input is not supported."),
223
+ (not issparse(data[0]), "Sparse input is not supported."),
212
224
  (not model_is_sparse, "Sparse coefficients are not supported."),
213
225
  ]
214
226
  )
@@ -216,7 +228,7 @@ class LinearRegression(sklearn_LinearRegression):
216
228
  return patching_status
217
229
 
218
230
  patching_status.and_condition(
219
- self._test_type_and_finiteness(*data), "Input X is not supported."
231
+ self._test_type_and_finiteness(data[0]), "Input X is not supported."
220
232
  )
221
233
 
222
234
  return patching_status
@@ -224,7 +236,7 @@ class LinearRegression(sklearn_LinearRegression):
224
236
  def _onedal_supported(self, method_name, *data):
225
237
  if method_name == "fit":
226
238
  return self._onedal_fit_supported(method_name, *data)
227
- if method_name == "predict":
239
+ if method_name in ["predict", "score"]:
228
240
  return self._onedal_predict_supported(method_name, *data)
229
241
  raise RuntimeError(f"Unknown method {method_name} in {self.__class__.__name__}")
230
242
 
@@ -286,6 +298,11 @@ class LinearRegression(sklearn_LinearRegression):
286
298
  res = self._onedal_estimator.predict(X, queue=queue)
287
299
  return res
288
300
 
301
+ def _onedal_score(self, X, y, sample_weight=None, queue=None):
302
+ return r2_score(
303
+ y, self._onedal_predict(X, queue=queue), sample_weight=sample_weight
304
+ )
305
+
289
306
  def get_coef_(self):
290
307
  return self.coef_
291
308
 
@@ -314,3 +331,4 @@ class LinearRegression(sklearn_LinearRegression):
314
331
 
315
332
  fit.__doc__ = sklearn_LinearRegression.fit.__doc__
316
333
  predict.__doc__ = sklearn_LinearRegression.predict.__doc__
334
+ score.__doc__ = sklearn_LinearRegression.score.__doc__
@@ -21,18 +21,6 @@ from daal4py.sklearn._utils import daal_check_version
21
21
  from daal4py.sklearn.linear_model.logistic_path import (
22
22
  LogisticRegression as LogisticRegression_daal4py,
23
23
  )
24
- from daal4py.sklearn.linear_model.logistic_path import daal4py_fit, daal4py_predict
25
-
26
-
27
- class BaseLogisticRegression(ABC):
28
- def _save_attributes(self):
29
- assert hasattr(self, "_onedal_estimator")
30
- self.classes_ = self._onedal_estimator.classes_
31
- self.coef_ = self._onedal_estimator.coef_
32
- self.intercept_ = self._onedal_estimator.intercept_
33
- self.n_features_in_ = self._onedal_estimator.n_features_in_
34
- self.n_iter_ = self._onedal_estimator.n_iter_
35
-
36
24
 
37
25
  if daal_check_version((2024, "P", 1)):
38
26
  import numpy as np
@@ -44,6 +32,7 @@ if daal_check_version((2024, "P", 1)):
44
32
 
45
33
  from daal4py.sklearn._n_jobs_support import control_n_jobs
46
34
  from daal4py.sklearn._utils import sklearn_check_version
35
+ from daal4py.sklearn.linear_model.logistic_path import daal4py_fit, daal4py_predict
47
36
  from onedal.linear_model import LogisticRegression as onedal_LogisticRegression
48
37
  from onedal.utils import _num_samples
49
38
 
@@ -51,6 +40,15 @@ if daal_check_version((2024, "P", 1)):
51
40
  from .._utils import PatchingConditionsChain, get_patch_message
52
41
  from ..utils.validation import _assert_all_finite
53
42
 
43
+ class BaseLogisticRegression(ABC):
44
+ def _save_attributes(self):
45
+ assert hasattr(self, "_onedal_estimator")
46
+ self.classes_ = self._onedal_estimator.classes_
47
+ self.coef_ = self._onedal_estimator.coef_
48
+ self.intercept_ = self._onedal_estimator.intercept_
49
+ self.n_features_in_ = self._onedal_estimator.n_features_in_
50
+ self.n_iter_ = self._onedal_estimator.n_iter_
51
+
54
52
  @control_n_jobs(
55
53
  decorated_methods=[
56
54
  "fit",
@@ -82,7 +80,7 @@ if daal_check_version((2024, "P", 1)):
82
80
  random_state=None,
83
81
  solver="lbfgs",
84
82
  max_iter=100,
85
- multi_class="auto",
83
+ multi_class="deprecated" if sklearn_check_version("1.5") else "auto",
86
84
  verbose=0,
87
85
  warm_start=False,
88
86
  n_jobs=None,
@@ -146,7 +144,7 @@ if daal_check_version((2024, "P", 1)):
146
144
  self._check_feature_names(X, reset=False)
147
145
  return dispatch(
148
146
  self,
149
- "predict",
147
+ "predict_proba",
150
148
  {
151
149
  "onedal": self.__class__._onedal_predict_proba,
152
150
  "sklearn": sklearn_LogisticRegression.predict_proba,
@@ -160,7 +158,7 @@ if daal_check_version((2024, "P", 1)):
160
158
  self._check_feature_names(X, reset=False)
161
159
  return dispatch(
162
160
  self,
163
- "predict",
161
+ "predict_log_proba",
164
162
  {
165
163
  "onedal": self.__class__._onedal_predict_log_proba,
166
164
  "sklearn": sklearn_LogisticRegression.predict_log_proba,
@@ -47,7 +47,7 @@ def test_sklearnex_fit_on_gold_data(dataframe, queue, fit_intercept, macro_block
47
47
 
48
48
  y_pred = inclin.predict(X_df)
49
49
 
50
- tol = 2e-6 if dtype == np.float32 else 1e-7
50
+ tol = 2e-6 if y_pred.dtype == np.float32 else 1e-7
51
51
  assert_allclose(inclin.coef_, [1], atol=tol)
52
52
  if fit_intercept:
53
53
  assert_allclose(inclin.intercept_, [0], atol=tol)
@@ -82,15 +82,15 @@ def test_sklearnex_partial_fit_on_gold_data(
82
82
  )
83
83
  inclin.partial_fit(X_split_df, y_split_df)
84
84
 
85
+ X_df = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
86
+ y_pred = inclin.predict(X_df)
87
+
85
88
  assert inclin.n_features_in_ == 1
86
- tol = 2e-6 if dtype == np.float32 else 1e-7
89
+ tol = 2e-6 if y_pred.dtype == np.float32 else 1e-7
87
90
  assert_allclose(inclin.coef_, [[1]], atol=tol)
88
91
  if fit_intercept:
89
92
  assert_allclose(inclin.intercept_, 3, atol=tol)
90
93
 
91
- X_df = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
92
- y_pred = inclin.predict(X_df)
93
-
94
94
  assert_allclose(_as_numpy(y_pred), y, atol=tol)
95
95
 
96
96
 
@@ -122,15 +122,15 @@ def test_sklearnex_partial_fit_multitarget_on_gold_data(
122
122
  )
123
123
  inclin.partial_fit(X_split_df, y_split_df)
124
124
 
125
+ X_df = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
126
+ y_pred = inclin.predict(X_df)
127
+
125
128
  assert inclin.n_features_in_ == 2
126
- tol = 7e-6 if dtype == np.float32 else 1e-7
129
+ tol = 7e-6 if y_pred.dtype == np.float32 else 1e-7
127
130
  assert_allclose(inclin.coef_, [1.0, 2.0], atol=tol)
128
131
  if fit_intercept:
129
132
  assert_allclose(inclin.intercept_, 3.0, atol=tol)
130
133
 
131
- X_df = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
132
- y_pred = inclin.predict(X_df)
133
-
134
134
  assert_allclose(_as_numpy(y_pred), y, atol=tol)
135
135
 
136
136
 
@@ -181,7 +181,7 @@ def test_sklearnex_partial_fit_on_random_data(
181
181
  )
182
182
  inclin.partial_fit(X_split_df, y_split_df)
183
183
 
184
- tol = 1e-4 if dtype == np.float32 else 1e-7
184
+ tol = 1e-4 if inclin.coef_.dtype == np.float32 else 1e-7
185
185
  assert_allclose(coef, inclin.coef_.T, atol=tol)
186
186
 
187
187
  if fit_intercept:
@@ -52,7 +52,7 @@ def test_sklearnex_import_linear(dataframe, queue, dtype, macro_block):
52
52
  assert "sklearnex" in linreg.__module__
53
53
  assert linreg.n_features_in_ == 2
54
54
 
55
- tol = 1e-5 if dtype == np.float32 else 1e-7
55
+ tol = 1e-5 if _as_numpy(linreg.coef_).dtype == np.float32 else 1e-7
56
56
  assert_allclose(_as_numpy(linreg.intercept_), 3.0, rtol=tol)
57
57
  assert_allclose(_as_numpy(linreg.coef_), [1.0, 2.0], rtol=tol)
58
58
 
@@ -113,5 +113,5 @@ def test_sklearnex_reconstruct_model(dataframe, queue, dtype):
113
113
 
114
114
  y_pred = linreg.predict(X)
115
115
 
116
- tol = 1e-5 if dtype == np.float32 else 1e-7
116
+ tol = 1e-5 if _as_numpy(y_pred).dtype == np.float32 else 1e-7
117
117
  assert_allclose(gtr, _as_numpy(y_pred), rtol=tol)
@@ -14,6 +14,7 @@
14
14
  # limitations under the License.
15
15
  # ==============================================================================
16
16
 
17
+ from sklearn.metrics import r2_score
17
18
  from sklearn.neighbors._regression import (
18
19
  KNeighborsRegressor as sklearn_KNeighborsRegressor,
19
20
  )
@@ -117,6 +118,23 @@ class KNeighborsRegressor(sklearn_KNeighborsRegressor, KNeighborsDispatchingBase
117
118
  X,
118
119
  )
119
120
 
121
+ @wrap_output_data
122
+ def score(self, X, y, sample_weight=None):
123
+ check_is_fitted(self)
124
+ if sklearn_check_version("1.0"):
125
+ self._check_feature_names(X, reset=False)
126
+ return dispatch(
127
+ self,
128
+ "score",
129
+ {
130
+ "onedal": self.__class__._onedal_score,
131
+ "sklearn": sklearn_KNeighborsRegressor.score,
132
+ },
133
+ X,
134
+ y,
135
+ sample_weight=sample_weight,
136
+ )
137
+
120
138
  @wrap_output_data
121
139
  def kneighbors(self, X=None, n_neighbors=None, return_distance=True):
122
140
  check_is_fitted(self)
@@ -184,6 +202,11 @@ class KNeighborsRegressor(sklearn_KNeighborsRegressor, KNeighborsDispatchingBase
184
202
  X, n_neighbors, return_distance, queue=queue
185
203
  )
186
204
 
205
+ def _onedal_score(self, X, y, sample_weight=None, queue=None):
206
+ return r2_score(
207
+ y, self._onedal_predict(X, queue=queue), sample_weight=sample_weight
208
+ )
209
+
187
210
  def _save_attributes(self):
188
211
  self.n_features_in_ = self._onedal_estimator.n_features_in_
189
212
  self.n_samples_fit_ = self._onedal_estimator.n_samples_fit_
@@ -196,3 +219,4 @@ class KNeighborsRegressor(sklearn_KNeighborsRegressor, KNeighborsDispatchingBase
196
219
  predict.__doc__ = sklearn_KNeighborsRegressor.predict.__doc__
197
220
  kneighbors.__doc__ = sklearn_KNeighborsRegressor.kneighbors.__doc__
198
221
  radius_neighbors.__doc__ = sklearn_NearestNeighbors.radius_neighbors.__doc__
222
+ score.__doc__ = sklearn_KNeighborsRegressor.score.__doc__
@@ -14,4 +14,4 @@
14
14
  # limitations under the License.
15
15
  # ==============================================================================
16
16
 
17
- __all__ = ["cluster", "covariance"]
17
+ __all__ = ["cluster", "covariance", "decomposition"]
@@ -0,0 +1,19 @@
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
+ from .incremental_pca import IncrementalPCA
18
+
19
+ __all__ = ["IncrementalPCA"]
@@ -0,0 +1,228 @@
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 numpy as np
18
+ from sklearn.decomposition import IncrementalPCA as sklearn_IncrementalPCA
19
+ from sklearn.utils import check_array, gen_batches
20
+
21
+ from daal4py.sklearn._n_jobs_support import control_n_jobs
22
+ from daal4py.sklearn._utils import sklearn_check_version
23
+ from onedal.decomposition import IncrementalPCA as onedal_IncrementalPCA
24
+
25
+ from ..._device_offload import dispatch, wrap_output_data
26
+ from ..._utils import PatchingConditionsChain
27
+
28
+
29
+ @control_n_jobs(
30
+ decorated_methods=["fit", "partial_fit", "transform", "_onedal_finalize_fit"]
31
+ )
32
+ class IncrementalPCA(sklearn_IncrementalPCA):
33
+
34
+ def __init__(self, n_components=None, *, whiten=False, copy=True, batch_size=None):
35
+ super().__init__(
36
+ n_components=n_components, whiten=whiten, copy=copy, batch_size=batch_size
37
+ )
38
+ self._need_to_finalize = False
39
+ self._need_to_finalize_attrs = {
40
+ "mean_",
41
+ "explained_variance_",
42
+ "explained_variance_ratio_",
43
+ "n_components_",
44
+ "components_",
45
+ "noise_variance_",
46
+ "singular_values_",
47
+ "var_",
48
+ }
49
+
50
+ _onedal_incremental_pca = staticmethod(onedal_IncrementalPCA)
51
+
52
+ def _onedal_transform(self, X, queue=None):
53
+ assert hasattr(self, "_onedal_estimator")
54
+ if self._need_to_finalize:
55
+ self._onedal_finalize_fit()
56
+ X = check_array(X, dtype=[np.float64, np.float32])
57
+ return self._onedal_estimator.predict(X, queue)
58
+
59
+ def _onedal_fit_transform(self, X, queue=None):
60
+ self._onedal_fit(X, queue)
61
+ return self._onedal_transform(X, queue)
62
+
63
+ def _onedal_partial_fit(self, X, check_input=True, queue=None):
64
+ first_pass = not hasattr(self, "components_")
65
+
66
+ if check_input:
67
+ if sklearn_check_version("1.0"):
68
+ X = self._validate_data(
69
+ X, dtype=[np.float64, np.float32], reset=first_pass
70
+ )
71
+ else:
72
+ X = check_array(
73
+ X,
74
+ dtype=[np.float64, np.float32],
75
+ copy=self.copy,
76
+ )
77
+
78
+ n_samples, n_features = X.shape
79
+
80
+ if self.n_components is None:
81
+ if not hasattr(self, "components_"):
82
+ self.n_components_ = min(n_samples, n_features)
83
+ else:
84
+ self.n_components_ = self.components_.shape[0]
85
+ elif not self.n_components <= n_features:
86
+ raise ValueError(
87
+ "n_components=%r invalid for n_features=%d, need "
88
+ "more rows than columns for IncrementalPCA "
89
+ "processing" % (self.n_components, n_features)
90
+ )
91
+ elif not self.n_components <= n_samples:
92
+ raise ValueError(
93
+ "n_components=%r must be less or equal to "
94
+ "the batch number of samples "
95
+ "%d." % (self.n_components, n_samples)
96
+ )
97
+ else:
98
+ self.n_components_ = self.n_components
99
+
100
+ if not hasattr(self, "n_samples_seen_"):
101
+ self.n_samples_seen_ = n_samples
102
+ else:
103
+ self.n_samples_seen_ += n_samples
104
+
105
+ onedal_params = {"n_components": self.n_components_, "whiten": self.whiten}
106
+
107
+ if not hasattr(self, "_onedal_estimator"):
108
+ self._onedal_estimator = self._onedal_incremental_pca(**onedal_params)
109
+ self._onedal_estimator.partial_fit(X, queue)
110
+ self._need_to_finalize = True
111
+
112
+ def _onedal_finalize_fit(self):
113
+ assert hasattr(self, "_onedal_estimator")
114
+ self._onedal_estimator.finalize_fit()
115
+ self._need_to_finalize = False
116
+
117
+ def _onedal_fit(self, X, queue=None):
118
+ if sklearn_check_version("1.2"):
119
+ self._validate_params()
120
+
121
+ if sklearn_check_version("1.0"):
122
+ X = self._validate_data(X, dtype=[np.float64, np.float32], copy=self.copy)
123
+ else:
124
+ X = check_array(
125
+ X,
126
+ dtype=[np.float64, np.float32],
127
+ copy=self.copy,
128
+ )
129
+
130
+ n_samples, n_features = X.shape
131
+
132
+ if self.batch_size is None:
133
+ self.batch_size_ = 5 * n_features
134
+ else:
135
+ self.batch_size_ = self.batch_size
136
+
137
+ self.n_samples_seen_ = 0
138
+ if hasattr(self, "_onedal_estimator"):
139
+ self._onedal_estimator._reset()
140
+
141
+ for batch in gen_batches(n_samples, self.batch_size_):
142
+ X_batch = X[batch]
143
+ self._onedal_partial_fit(X_batch, queue=queue)
144
+
145
+ self._onedal_finalize_fit()
146
+
147
+ return self
148
+
149
+ def _onedal_supported(self, method_name, *data):
150
+ patching_status = PatchingConditionsChain(
151
+ f"sklearn.decomposition.{self.__class__.__name__}.{method_name}"
152
+ )
153
+ return patching_status
154
+
155
+ _onedal_cpu_supported = _onedal_supported
156
+ _onedal_gpu_supported = _onedal_supported
157
+
158
+ def __getattr__(self, attr):
159
+ if attr in self._need_to_finalize_attrs:
160
+ if hasattr(self, "_onedal_estimator"):
161
+ if self._need_to_finalize:
162
+ self._onedal_finalize_fit()
163
+ return getattr(self._onedal_estimator, attr)
164
+ else:
165
+ raise AttributeError(
166
+ f"'{self.__class__.__name__}' object has no attribute '{attr}'"
167
+ )
168
+ if attr in self.__dict__:
169
+ return self.__dict__[attr]
170
+
171
+ raise AttributeError(
172
+ f"'{self.__class__.__name__}' object has no attribute '{attr}'"
173
+ )
174
+
175
+ def partial_fit(self, X, y=None, check_input=True):
176
+ dispatch(
177
+ self,
178
+ "partial_fit",
179
+ {
180
+ "onedal": self.__class__._onedal_partial_fit,
181
+ "sklearn": sklearn_IncrementalPCA.partial_fit,
182
+ },
183
+ X,
184
+ check_input=check_input,
185
+ )
186
+ return self
187
+
188
+ def fit(self, X, y=None):
189
+ dispatch(
190
+ self,
191
+ "fit",
192
+ {
193
+ "onedal": self.__class__._onedal_fit,
194
+ "sklearn": sklearn_IncrementalPCA.fit,
195
+ },
196
+ X,
197
+ )
198
+ return self
199
+
200
+ @wrap_output_data
201
+ def transform(self, X):
202
+ return dispatch(
203
+ self,
204
+ "transform",
205
+ {
206
+ "onedal": self.__class__._onedal_transform,
207
+ "sklearn": sklearn_IncrementalPCA.transform,
208
+ },
209
+ X,
210
+ )
211
+
212
+ @wrap_output_data
213
+ def fit_transform(self, X, y=None, **fit_params):
214
+ return dispatch(
215
+ self,
216
+ "fit_transform",
217
+ {
218
+ "onedal": self.__class__._onedal_fit_transform,
219
+ "sklearn": sklearn_IncrementalPCA.fit_transform,
220
+ },
221
+ X,
222
+ )
223
+
224
+ __doc__ = sklearn_IncrementalPCA.__doc__
225
+ fit.__doc__ = sklearn_IncrementalPCA.fit.__doc__
226
+ fit_transform.__doc__ = sklearn_IncrementalPCA.fit_transform.__doc__
227
+ transform.__doc__ = sklearn_IncrementalPCA.transform.__doc__
228
+ partial_fit.__doc__ = sklearn_IncrementalPCA.partial_fit.__doc__