scikit-learn-intelex 2025.4.0__py313-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 (259) hide show
  1. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/__init__.py +73 -0
  2. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/__main__.py +58 -0
  3. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/_daal4py.cp313-win_amd64.pyd +0 -0
  4. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/doc/third-party-programs.txt +424 -0
  5. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/mb/__init__.py +19 -0
  6. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/mb/model_builders.py +377 -0
  7. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/mpi_transceiver.cp313-win_amd64.pyd +0 -0
  8. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/__init__.py +40 -0
  9. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/_n_jobs_support.py +248 -0
  10. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/_utils.py +245 -0
  11. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/cluster/__init__.py +20 -0
  12. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/cluster/dbscan.py +165 -0
  13. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/cluster/k_means.py +597 -0
  14. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/cluster/tests/test_dbscan.py +109 -0
  15. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/decomposition/__init__.py +19 -0
  16. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/decomposition/_pca.py +524 -0
  17. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/ensemble/AdaBoostClassifier.py +196 -0
  18. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/ensemble/GBTDAAL.py +337 -0
  19. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/ensemble/__init__.py +27 -0
  20. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/ensemble/_forest.py +1397 -0
  21. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/ensemble/tests/test_decision_forest.py +206 -0
  22. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/__init__.py +29 -0
  23. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/_coordinate_descent.py +848 -0
  24. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/_linear.py +272 -0
  25. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/_ridge.py +325 -0
  26. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/coordinate_descent.py +17 -0
  27. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/linear.py +17 -0
  28. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/logistic_loss.py +195 -0
  29. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/logistic_path.py +1026 -0
  30. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/ridge.py +17 -0
  31. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/tests/test_linear.py +208 -0
  32. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/tests/test_ridge.py +69 -0
  33. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/manifold/__init__.py +19 -0
  34. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/manifold/_t_sne.py +405 -0
  35. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/metrics/__init__.py +20 -0
  36. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/metrics/_pairwise.py +236 -0
  37. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/metrics/_ranking.py +210 -0
  38. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/model_selection/__init__.py +19 -0
  39. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/model_selection/_split.py +309 -0
  40. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/model_selection/tests/test_split.py +56 -0
  41. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/__init__.py +0 -0
  42. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/dispatcher.py +232 -0
  43. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/tests/_models_info.py +161 -0
  44. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/tests/test_monkeypatch.py +71 -0
  45. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/tests/test_patching.py +90 -0
  46. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/tests/utils/_launch_algorithms.py +117 -0
  47. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/__init__.py +21 -0
  48. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/_base.py +503 -0
  49. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/_classification.py +139 -0
  50. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/_regression.py +74 -0
  51. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/_unsupervised.py +55 -0
  52. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/tests/test_kneighbors.py +113 -0
  53. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/svm/__init__.py +19 -0
  54. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/svm/svm.py +734 -0
  55. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/utils/__init__.py +21 -0
  56. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/utils/base.py +75 -0
  57. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/utils/tests/test_utils.py +51 -0
  58. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/daal4py/sklearn/utils/validation.py +696 -0
  59. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/__init__.py +83 -0
  60. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/_config.py +54 -0
  61. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/_device_offload.py +204 -0
  62. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/_onedal_py_dpc.cp313-win_amd64.pyd +0 -0
  63. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/_onedal_py_host.cp313-win_amd64.pyd +0 -0
  64. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/basic_statistics/__init__.py +20 -0
  65. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/basic_statistics/basic_statistics.py +107 -0
  66. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/basic_statistics/incremental_basic_statistics.py +175 -0
  67. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/basic_statistics/tests/test_basic_statistics.py +242 -0
  68. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/basic_statistics/tests/test_incremental_basic_statistics.py +279 -0
  69. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/basic_statistics/tests/utils.py +50 -0
  70. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/cluster/__init__.py +27 -0
  71. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/cluster/dbscan.py +105 -0
  72. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/cluster/kmeans.py +557 -0
  73. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/cluster/kmeans_init.py +112 -0
  74. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/cluster/tests/test_dbscan.py +125 -0
  75. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/cluster/tests/test_kmeans.py +88 -0
  76. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/cluster/tests/test_kmeans_init.py +93 -0
  77. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/common/_base.py +38 -0
  78. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/common/_estimator_checks.py +47 -0
  79. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/common/_mixin.py +62 -0
  80. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/common/_policy.py +55 -0
  81. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/common/_spmd_policy.py +30 -0
  82. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/common/hyperparameters.py +125 -0
  83. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/common/tests/test_policy.py +76 -0
  84. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/common/tests/test_sycl.py +128 -0
  85. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/covariance/__init__.py +20 -0
  86. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/covariance/covariance.py +122 -0
  87. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/covariance/incremental_covariance.py +161 -0
  88. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/covariance/tests/test_covariance.py +50 -0
  89. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/covariance/tests/test_incremental_covariance.py +190 -0
  90. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/datatypes/__init__.py +19 -0
  91. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/datatypes/_data_conversion.py +121 -0
  92. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/datatypes/tests/common.py +126 -0
  93. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/datatypes/tests/test_data.py +475 -0
  94. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/decomposition/__init__.py +20 -0
  95. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/decomposition/incremental_pca.py +214 -0
  96. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/decomposition/pca.py +186 -0
  97. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/decomposition/tests/test_incremental_pca.py +285 -0
  98. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/ensemble/__init__.py +29 -0
  99. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/ensemble/forest.py +736 -0
  100. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/ensemble/tests/test_random_forest.py +97 -0
  101. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/linear_model/__init__.py +27 -0
  102. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/linear_model/incremental_linear_model.py +292 -0
  103. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/linear_model/linear_model.py +325 -0
  104. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/linear_model/logistic_regression.py +247 -0
  105. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/linear_model/tests/test_incremental_linear_regression.py +213 -0
  106. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/linear_model/tests/test_incremental_ridge_regression.py +171 -0
  107. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/linear_model/tests/test_linear_regression.py +259 -0
  108. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/linear_model/tests/test_logistic_regression.py +95 -0
  109. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/linear_model/tests/test_ridge.py +95 -0
  110. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/neighbors/__init__.py +19 -0
  111. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/neighbors/neighbors.py +763 -0
  112. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/neighbors/tests/test_knn_classification.py +49 -0
  113. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/primitives/__init__.py +27 -0
  114. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/primitives/get_tree.py +25 -0
  115. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/primitives/kernel_functions.py +152 -0
  116. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/primitives/tests/test_kernel_functions.py +159 -0
  117. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/svm/__init__.py +19 -0
  118. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/svm/svm.py +556 -0
  119. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/svm/tests/test_csr_svm.py +351 -0
  120. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/svm/tests/test_nusvc.py +204 -0
  121. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/svm/tests/test_nusvr.py +210 -0
  122. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/svm/tests/test_svc.py +176 -0
  123. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/svm/tests/test_svr.py +243 -0
  124. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/tests/test_common.py +57 -0
  125. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/tests/utils/_dataframes_support.py +162 -0
  126. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/tests/utils/_device_selection.py +102 -0
  127. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/utils/__init__.py +49 -0
  128. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/utils/_array_api.py +81 -0
  129. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/utils/_dpep_helpers.py +56 -0
  130. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/utils/tests/test_validation.py +142 -0
  131. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/onedal/utils/validation.py +464 -0
  132. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/__init__.py +66 -0
  133. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/__main__.py +58 -0
  134. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/_config.py +116 -0
  135. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/_device_offload.py +126 -0
  136. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/_utils.py +177 -0
  137. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/basic_statistics/__init__.py +20 -0
  138. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/basic_statistics/basic_statistics.py +261 -0
  139. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/basic_statistics/incremental_basic_statistics.py +352 -0
  140. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/basic_statistics/tests/test_basic_statistics.py +405 -0
  141. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/basic_statistics/tests/test_incremental_basic_statistics.py +455 -0
  142. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/cluster/__init__.py +20 -0
  143. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/cluster/dbscan.py +197 -0
  144. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/cluster/k_means.py +397 -0
  145. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/cluster/tests/test_dbscan.py +38 -0
  146. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/cluster/tests/test_kmeans.py +157 -0
  147. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/conftest.py +82 -0
  148. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/covariance/__init__.py +19 -0
  149. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/covariance/incremental_covariance.py +405 -0
  150. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/covariance/tests/test_incremental_covariance.py +287 -0
  151. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/decomposition/__init__.py +19 -0
  152. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/decomposition/pca.py +427 -0
  153. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/decomposition/tests/test_pca.py +58 -0
  154. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/dispatcher.py +534 -0
  155. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/doc/third-party-programs.txt +424 -0
  156. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/ensemble/__init__.py +29 -0
  157. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/ensemble/_forest.py +2029 -0
  158. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/ensemble/tests/test_forest.py +140 -0
  159. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/glob/__main__.py +72 -0
  160. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/glob/dispatcher.py +101 -0
  161. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/linear_model/__init__.py +32 -0
  162. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/linear_model/coordinate_descent.py +30 -0
  163. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/linear_model/incremental_linear.py +495 -0
  164. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/linear_model/incremental_ridge.py +432 -0
  165. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/linear_model/linear.py +346 -0
  166. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/linear_model/logistic_regression.py +415 -0
  167. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/linear_model/ridge.py +390 -0
  168. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_incremental_linear.py +267 -0
  169. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_incremental_ridge.py +214 -0
  170. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_linear.py +142 -0
  171. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_logreg.py +134 -0
  172. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_ridge.py +256 -0
  173. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/manifold/__init__.py +19 -0
  174. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/manifold/t_sne.py +26 -0
  175. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/manifold/tests/test_tsne.py +250 -0
  176. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/metrics/__init__.py +23 -0
  177. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/metrics/pairwise.py +22 -0
  178. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/metrics/ranking.py +20 -0
  179. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/metrics/tests/test_metrics.py +39 -0
  180. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/model_selection/__init__.py +21 -0
  181. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/model_selection/split.py +22 -0
  182. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/model_selection/tests/test_model_selection.py +34 -0
  183. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/neighbors/__init__.py +27 -0
  184. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/neighbors/_lof.py +236 -0
  185. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/neighbors/common.py +310 -0
  186. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/neighbors/knn_classification.py +231 -0
  187. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/neighbors/knn_regression.py +207 -0
  188. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/neighbors/knn_unsupervised.py +178 -0
  189. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/neighbors/tests/test_neighbors.py +82 -0
  190. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/preview/__init__.py +17 -0
  191. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/preview/covariance/__init__.py +19 -0
  192. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/preview/covariance/covariance.py +142 -0
  193. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/preview/covariance/tests/test_covariance.py +66 -0
  194. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/preview/decomposition/__init__.py +19 -0
  195. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/preview/decomposition/incremental_pca.py +244 -0
  196. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/preview/decomposition/tests/test_incremental_pca.py +336 -0
  197. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/spmd/__init__.py +25 -0
  198. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/__init__.py +20 -0
  199. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/basic_statistics.py +21 -0
  200. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/incremental_basic_statistics.py +30 -0
  201. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/tests/test_basic_statistics_spmd.py +107 -0
  202. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/tests/test_incremental_basic_statistics_spmd.py +306 -0
  203. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/spmd/cluster/__init__.py +30 -0
  204. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/spmd/cluster/dbscan.py +50 -0
  205. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/spmd/cluster/kmeans.py +21 -0
  206. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/spmd/cluster/tests/test_dbscan_spmd.py +97 -0
  207. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/spmd/cluster/tests/test_kmeans_spmd.py +173 -0
  208. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/__init__.py +20 -0
  209. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/covariance.py +21 -0
  210. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/incremental_covariance.py +37 -0
  211. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/tests/test_covariance_spmd.py +107 -0
  212. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/tests/test_incremental_covariance_spmd.py +184 -0
  213. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/spmd/decomposition/__init__.py +20 -0
  214. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/spmd/decomposition/incremental_pca.py +30 -0
  215. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/spmd/decomposition/pca.py +21 -0
  216. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/spmd/decomposition/tests/test_incremental_pca_spmd.py +269 -0
  217. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/spmd/decomposition/tests/test_pca_spmd.py +128 -0
  218. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/spmd/ensemble/__init__.py +19 -0
  219. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/spmd/ensemble/forest.py +71 -0
  220. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/spmd/ensemble/tests/test_forest_spmd.py +265 -0
  221. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/__init__.py +21 -0
  222. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/incremental_linear_model.py +35 -0
  223. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/linear_model.py +21 -0
  224. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/logistic_regression.py +21 -0
  225. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/tests/test_incremental_linear_spmd.py +331 -0
  226. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/tests/test_linear_regression_spmd.py +145 -0
  227. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/tests/test_logistic_regression_spmd.py +162 -0
  228. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/spmd/neighbors/__init__.py +19 -0
  229. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/spmd/neighbors/neighbors.py +25 -0
  230. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/spmd/neighbors/tests/test_neighbors_spmd.py +288 -0
  231. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/svm/__init__.py +29 -0
  232. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/svm/_common.py +339 -0
  233. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/svm/nusvc.py +371 -0
  234. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/svm/nusvr.py +170 -0
  235. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/svm/svc.py +399 -0
  236. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/svm/svr.py +167 -0
  237. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/svm/tests/test_svm.py +93 -0
  238. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/tests/test_common.py +491 -0
  239. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/tests/test_config.py +123 -0
  240. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/tests/test_hyperparameters.py +43 -0
  241. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/tests/test_memory_usage.py +347 -0
  242. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/tests/test_monkeypatch.py +269 -0
  243. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/tests/test_n_jobs_support.py +108 -0
  244. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/tests/test_parallel.py +48 -0
  245. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/tests/test_patching.py +377 -0
  246. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/tests/test_run_to_run_stability.py +326 -0
  247. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/tests/utils/__init__.py +48 -0
  248. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/tests/utils/base.py +436 -0
  249. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/tests/utils/spmd.py +198 -0
  250. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/utils/__init__.py +19 -0
  251. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/utils/_array_api.py +82 -0
  252. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/utils/parallel.py +59 -0
  253. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/utils/tests/test_validation.py +238 -0
  254. scikit_learn_intelex-2025.4.0.data/data/Lib/site-packages/sklearnex/utils/validation.py +208 -0
  255. scikit_learn_intelex-2025.4.0.dist-info/LICENSE.txt +202 -0
  256. scikit_learn_intelex-2025.4.0.dist-info/METADATA +192 -0
  257. scikit_learn_intelex-2025.4.0.dist-info/RECORD +259 -0
  258. scikit_learn_intelex-2025.4.0.dist-info/WHEEL +5 -0
  259. scikit_learn_intelex-2025.4.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,325 @@
1
+ # ==============================================================================
2
+ # Copyright 2023 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 abc import ABCMeta, abstractmethod
18
+ from numbers import Number
19
+
20
+ import numpy as np
21
+
22
+ from daal4py.sklearn._utils import daal_check_version, get_dtype, make2d
23
+
24
+ from ..common._base import BaseEstimator
25
+ from ..common._estimator_checks import _check_is_fitted
26
+ from ..common.hyperparameters import get_hyperparameters
27
+ from ..datatypes import from_table, to_table
28
+ from ..utils import _check_array, _check_n_features, _check_X_y, _num_features
29
+
30
+
31
+ class BaseLinearRegression(BaseEstimator, metaclass=ABCMeta):
32
+ """
33
+ Base class for LinearRegression oneDAL implementation.
34
+ """
35
+
36
+ @abstractmethod
37
+ def __init__(self, fit_intercept, copy_X, algorithm, alpha=0.0):
38
+ self.fit_intercept = fit_intercept
39
+ self.alpha = alpha
40
+ self.copy_X = copy_X
41
+ self.algorithm = algorithm
42
+
43
+ def _get_onedal_params(self, dtype=np.float32):
44
+ intercept = "intercept|" if self.fit_intercept else ""
45
+ params = {
46
+ "fptype": dtype,
47
+ "method": self.algorithm,
48
+ "intercept": self.fit_intercept,
49
+ "result_option": (intercept + "coefficients"),
50
+ }
51
+ if daal_check_version((2024, "P", 600)):
52
+ params["alpha"] = self.alpha
53
+
54
+ return params
55
+
56
+ def _create_model(self, policy):
57
+ module = self._get_backend("linear_model", "regression")
58
+ model = module.model()
59
+
60
+ coefficients = self.coef_
61
+ dtype = get_dtype(coefficients)
62
+
63
+ if coefficients.ndim == 2:
64
+ n_features_in = coefficients.shape[1]
65
+ n_targets_in = coefficients.shape[0]
66
+ else:
67
+ n_features_in = coefficients.size
68
+ n_targets_in = 1
69
+
70
+ intercept = self.intercept_
71
+ if isinstance(intercept, Number):
72
+ assert n_targets_in == 1
73
+ else:
74
+ if not isinstance(intercept, np.ndarray):
75
+ intercept = np.asarray(intercept, dtype=dtype)
76
+ assert n_targets_in == intercept.size
77
+
78
+ coefficients, intercept = make2d(coefficients), make2d(intercept)
79
+ coefficients = coefficients.T if n_targets_in == 1 else coefficients
80
+
81
+ assert coefficients.shape == (
82
+ n_targets_in,
83
+ n_features_in,
84
+ ), f"{coefficients.shape}, {n_targets_in}, {n_features_in}"
85
+ assert intercept.shape == (n_targets_in, 1), f"{intercept.shape}, {n_targets_in}"
86
+
87
+ desired_shape = (n_targets_in, n_features_in + 1)
88
+ packed_coefficients = np.zeros(desired_shape, dtype=dtype)
89
+
90
+ packed_coefficients[:, 1:] = coefficients
91
+ if self.fit_intercept:
92
+ packed_coefficients[:, 0][:, np.newaxis] = intercept
93
+
94
+ model.packed_coefficients = to_table(
95
+ packed_coefficients, queue=getattr(policy, "_queue", None)
96
+ )
97
+
98
+ self._onedal_model = model
99
+
100
+ return model
101
+
102
+ def predict(self, X, queue=None):
103
+ """
104
+ Predict using the linear model.
105
+ Parameters
106
+ ----------
107
+ X : array-like or sparse matrix, shape (n_samples, n_features)
108
+ Samples.
109
+
110
+ queue : dpctl.SyclQueue
111
+ If not None, uses this queue for computations.
112
+
113
+ Returns
114
+ -------
115
+ C : array, shape (n_samples, n_targets)
116
+ Returns predicted values.
117
+ """
118
+ module = self._get_backend("linear_model", "regression")
119
+
120
+ _check_is_fitted(self)
121
+
122
+ policy = self._get_policy(queue, X)
123
+
124
+ X = _check_array(
125
+ X, dtype=[np.float64, np.float32], force_all_finite=False, ensure_2d=False
126
+ )
127
+ _check_n_features(self, X, False)
128
+
129
+ if hasattr(self, "_onedal_model"):
130
+ model = self._onedal_model
131
+ else:
132
+ model = self._create_model(policy)
133
+
134
+ X_table = to_table(X, queue=queue)
135
+ params = self._get_onedal_params(X_table.dtype)
136
+
137
+ result = module.infer(policy, params, model, X_table)
138
+ y = from_table(result.responses)
139
+
140
+ if y.shape[1] == 1 and self.coef_.ndim == 1:
141
+ return y.ravel()
142
+ else:
143
+ return y
144
+
145
+
146
+ class LinearRegression(BaseLinearRegression):
147
+ """
148
+ Linear Regression oneDAL implementation.
149
+
150
+ Parameters
151
+ ----------
152
+ fit_intercept : bool, default=True
153
+ Whether to calculate the intercept for this model. If set
154
+ to False, no intercept will be used in calculations
155
+ (i.e. data is expected to be centered).
156
+
157
+ copy_X : bool, default=True
158
+ If True, X will be copied; else, it may be overwritten.
159
+
160
+ algorithm : string, default="norm_eq"
161
+ Algorithm used for computation on oneDAL side
162
+ """
163
+
164
+ def __init__(
165
+ self,
166
+ fit_intercept=True,
167
+ copy_X=False,
168
+ *,
169
+ algorithm="norm_eq",
170
+ **kwargs,
171
+ ):
172
+ super().__init__(fit_intercept=fit_intercept, copy_X=copy_X, algorithm=algorithm)
173
+
174
+ def fit(self, X, y, queue=None):
175
+ """
176
+ Fit linear model.
177
+ Parameters
178
+ ----------
179
+ X : {array-like, sparse matrix} of shape (n_samples, n_features)
180
+ Training data.
181
+
182
+ y : array-like of shape (n_samples,) or (n_samples, n_targets)
183
+ Target values. Will be cast to X's dtype if necessary.
184
+
185
+ queue : dpctl.SyclQueue
186
+ If not None, use this queue for computations.
187
+
188
+ Returns
189
+ -------
190
+ self : object
191
+ Fitted Estimator.
192
+ """
193
+ module = self._get_backend("linear_model", "regression")
194
+
195
+ # TODO Fix _check_X_y to make sure this conversion is there
196
+ if not isinstance(X, np.ndarray):
197
+ X = np.asarray(X)
198
+
199
+ dtype = get_dtype(X)
200
+ if dtype not in [np.float32, np.float64]:
201
+ dtype = np.float64
202
+ X = X.astype(dtype, copy=self.copy_X)
203
+
204
+ y = np.asarray(y).astype(dtype=dtype)
205
+
206
+ X, y = _check_X_y(X, y, force_all_finite=False, accept_2d_y=True)
207
+
208
+ policy = self._get_policy(queue, X, y)
209
+
210
+ self.n_features_in_ = _num_features(X, fallback_1d=True)
211
+
212
+ X_table, y_table = to_table(X, y, queue=queue)
213
+ params = self._get_onedal_params(X_table.dtype)
214
+
215
+ hparams = get_hyperparameters("linear_regression", "train")
216
+ if hparams is not None and not hparams.is_default:
217
+ result = module.train(policy, params, hparams.backend, X_table, y_table)
218
+ else:
219
+ result = module.train(policy, params, X_table, y_table)
220
+
221
+ self._onedal_model = result.model
222
+
223
+ packed_coefficients = from_table(result.model.packed_coefficients)
224
+ self.coef_, self.intercept_ = (
225
+ packed_coefficients[:, 1:],
226
+ packed_coefficients[:, 0],
227
+ )
228
+
229
+ if self.coef_.shape[0] == 1 and y.ndim == 1:
230
+ self.coef_ = self.coef_.ravel()
231
+ self.intercept_ = self.intercept_[0]
232
+
233
+ return self
234
+
235
+
236
+ class Ridge(BaseLinearRegression):
237
+ """
238
+ Ridge Regression oneDAL implementation.
239
+
240
+ Parameters
241
+ ----------
242
+ alpha : float, default=1.0
243
+ Regularization strength; must be a positive float. Regularization
244
+ improves the conditioning of the problem and reduces the variance of
245
+ the estimates. Larger values specify stronger regularization.
246
+
247
+ fit_intercept : bool, default=True
248
+ Whether to calculate the intercept for this model. If set
249
+ to False, no intercept will be used in calculations
250
+ (i.e. data is expected to be centered).
251
+
252
+ copy_X : bool, default=True
253
+ If True, X will be copied; else, it may be overwritten.
254
+
255
+ algorithm : string, default="norm_eq"
256
+ Algorithm used for computation on oneDAL side.
257
+ """
258
+
259
+ def __init__(
260
+ self,
261
+ alpha=1.0,
262
+ fit_intercept=True,
263
+ copy_X=False,
264
+ *,
265
+ algorithm="norm_eq",
266
+ **kwargs,
267
+ ):
268
+ super().__init__(
269
+ fit_intercept=fit_intercept, alpha=alpha, copy_X=copy_X, algorithm=algorithm
270
+ )
271
+
272
+ def fit(self, X, y, queue=None):
273
+ """
274
+ Fit linear model.
275
+ Parameters
276
+ ----------
277
+ X : {array-like, sparse matrix} of shape (n_samples, n_features)
278
+ Training data.
279
+
280
+ y : array-like of shape (n_samples,) or (n_samples, n_targets)
281
+ Target values. Will be cast to X's dtype if necessary.
282
+
283
+ queue : dpctl.SyclQueue
284
+ If not None, use this queue for computations.
285
+
286
+ Returns
287
+ -------
288
+ self : object
289
+ Fitted Estimator.
290
+ """
291
+ module = self._get_backend("linear_model", "regression")
292
+
293
+ if not isinstance(X, np.ndarray):
294
+ X = np.asarray(X)
295
+
296
+ dtype = get_dtype(X)
297
+ if dtype not in [np.float32, np.float64]:
298
+ dtype = np.float64
299
+ X = X.astype(dtype, copy=self.copy_X)
300
+
301
+ y = np.asarray(y).astype(dtype=dtype)
302
+
303
+ X, y = _check_X_y(X, y, force_all_finite=False, accept_2d_y=True)
304
+
305
+ policy = self._get_policy(queue, X, y)
306
+
307
+ self.n_features_in_ = _num_features(X, fallback_1d=True)
308
+
309
+ X_table, y_table = to_table(X, y, queue=queue)
310
+ params = self._get_onedal_params(X.dtype)
311
+
312
+ result = module.train(policy, params, X_table, y_table)
313
+ self._onedal_model = result.model
314
+
315
+ packed_coefficients = from_table(result.model.packed_coefficients)
316
+ self.coef_, self.intercept_ = (
317
+ packed_coefficients[:, 1:],
318
+ packed_coefficients[:, 0],
319
+ )
320
+
321
+ if self.coef_.shape[0] == 1 and y.ndim == 1:
322
+ self.coef_ = self.coef_.ravel()
323
+ self.intercept_ = self.intercept_[0]
324
+
325
+ return self
@@ -0,0 +1,247 @@
1
+ # ==============================================================================
2
+ # Copyright 2023 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 abc import ABCMeta, abstractmethod
18
+ from numbers import Number
19
+
20
+ import numpy as np
21
+
22
+ from daal4py.sklearn._utils import daal_check_version, get_dtype, make2d
23
+
24
+ from ..common._base import BaseEstimator as onedal_BaseEstimator
25
+ from ..common._estimator_checks import _check_is_fitted
26
+ from ..common._mixin import ClassifierMixin
27
+ from ..datatypes import from_table, to_table
28
+ from ..utils import (
29
+ _check_array,
30
+ _check_n_features,
31
+ _check_X_y,
32
+ _is_csr,
33
+ _num_features,
34
+ _type_of_target,
35
+ )
36
+
37
+
38
+ class BaseLogisticRegression(onedal_BaseEstimator, metaclass=ABCMeta):
39
+ @abstractmethod
40
+ def __init__(self, tol, C, fit_intercept, solver, max_iter, algorithm):
41
+ self.tol = tol
42
+ self.C = C
43
+ self.fit_intercept = fit_intercept
44
+ self.solver = solver
45
+ self.max_iter = max_iter
46
+ self.algorithm = algorithm
47
+
48
+ def _get_onedal_params(self, is_csr, dtype=np.float32):
49
+ intercept = "intercept|" if self.fit_intercept else ""
50
+ return {
51
+ "fptype": dtype,
52
+ "method": "sparse" if is_csr else self.algorithm,
53
+ "intercept": self.fit_intercept,
54
+ "tol": self.tol,
55
+ "max_iter": self.max_iter,
56
+ "C": self.C,
57
+ "optimizer": self.solver,
58
+ "result_option": (
59
+ intercept
60
+ + "coefficients|iterations_count"
61
+ + ("|inner_iterations_count" if self.solver == "newton-cg" else "")
62
+ ),
63
+ }
64
+
65
+ def _fit(self, X, y, module, queue):
66
+ sparsity_enabled = daal_check_version((2024, "P", 700))
67
+ X, y = _check_X_y(
68
+ X,
69
+ y,
70
+ accept_sparse=sparsity_enabled,
71
+ force_all_finite=True,
72
+ accept_2d_y=False,
73
+ dtype=[np.float64, np.float32],
74
+ )
75
+ is_csr = _is_csr(X)
76
+
77
+ self.n_features_in_ = _num_features(X, fallback_1d=True)
78
+
79
+ if _type_of_target(y) != "binary":
80
+ raise ValueError("Only binary classification is supported")
81
+
82
+ self.classes_, y = np.unique(y, return_inverse=True)
83
+ y = y.astype(dtype=np.int32)
84
+
85
+ policy = self._get_policy(queue, X, y)
86
+ X_table, y_table = to_table(X, y, queue=queue)
87
+ params = self._get_onedal_params(is_csr, X_table.dtype)
88
+
89
+ result = module.train(policy, params, X_table, y_table)
90
+
91
+ self._onedal_model = result.model
92
+ self.n_iter_ = np.array([result.iterations_count])
93
+
94
+ # _n_inner_iter is the total number of cg-solver iterations
95
+ if daal_check_version((2024, "P", 300)) and self.solver == "newton-cg":
96
+ self._n_inner_iter = result.inner_iterations_count
97
+
98
+ coeff = from_table(result.model.packed_coefficients)
99
+ self.coef_, self.intercept_ = coeff[:, 1:], coeff[:, 0]
100
+
101
+ return self
102
+
103
+ def _create_model(self, module, policy):
104
+ m = module.model()
105
+
106
+ coefficients = self.coef_
107
+ dtype = get_dtype(coefficients)
108
+ coefficients = np.asarray(coefficients, dtype=dtype)
109
+
110
+ if coefficients.ndim == 2:
111
+ n_features_in = coefficients.shape[1]
112
+ assert coefficients.shape[0] == 1
113
+ else:
114
+ n_features_in = coefficients.size
115
+
116
+ intercept = self.intercept_
117
+ if not isinstance(intercept, Number):
118
+ intercept = np.asarray(intercept, dtype=dtype)
119
+ assert intercept.size == 1
120
+
121
+ intercept = _check_array(
122
+ intercept,
123
+ dtype=[np.float64, np.float32],
124
+ force_all_finite=True,
125
+ ensure_2d=False,
126
+ )
127
+ coefficients = _check_array(
128
+ coefficients,
129
+ dtype=[np.float64, np.float32],
130
+ force_all_finite=True,
131
+ ensure_2d=False,
132
+ )
133
+
134
+ coefficients, intercept = make2d(coefficients), make2d(intercept)
135
+
136
+ assert coefficients.shape == (1, n_features_in)
137
+ assert intercept.shape == (1, 1)
138
+
139
+ desired_shape = (1, n_features_in + 1)
140
+ packed_coefficients = np.zeros(desired_shape, dtype=dtype)
141
+
142
+ packed_coefficients[:, 1:] = coefficients
143
+ if self.fit_intercept:
144
+ packed_coefficients[:, 0][:, np.newaxis] = intercept
145
+
146
+ m.packed_coefficients = to_table(
147
+ packed_coefficients, queue=getattr(policy, "_queue", None)
148
+ )
149
+
150
+ self._onedal_model = m
151
+
152
+ return m
153
+
154
+ def _infer(self, X, module, queue):
155
+ _check_is_fitted(self)
156
+ sparsity_enabled = daal_check_version((2024, "P", 700))
157
+
158
+ X = _check_array(
159
+ X,
160
+ dtype=[np.float64, np.float32],
161
+ accept_sparse=sparsity_enabled,
162
+ force_all_finite=True,
163
+ ensure_2d=False,
164
+ accept_large_sparse=sparsity_enabled,
165
+ )
166
+ is_csr = _is_csr(X)
167
+ _check_n_features(self, X, False)
168
+
169
+ X = make2d(X)
170
+ policy = self._get_policy(queue, X)
171
+
172
+ if hasattr(self, "_onedal_model"):
173
+ model = self._onedal_model
174
+ else:
175
+ model = self._create_model(module, policy)
176
+
177
+ X_table = to_table(X, queue=queue)
178
+ params = self._get_onedal_params(is_csr, X.dtype)
179
+
180
+ result = module.infer(policy, params, model, X_table)
181
+ return result
182
+
183
+ def _predict(self, X, module, queue):
184
+ result = self._infer(X, module, queue)
185
+ y = from_table(result.responses)
186
+ y = np.take(self.classes_, y.ravel(), axis=0)
187
+ return y
188
+
189
+ def _predict_proba(self, X, module, queue):
190
+ result = self._infer(X, module, queue)
191
+
192
+ y = from_table(result.probabilities)
193
+ y = y.reshape(-1, 1)
194
+ return np.hstack([1 - y, y])
195
+
196
+ def _predict_log_proba(self, X, module, queue):
197
+ y_proba = self._predict_proba(X, module, queue)
198
+ return np.log(y_proba)
199
+
200
+
201
+ class LogisticRegression(ClassifierMixin, BaseLogisticRegression):
202
+ """
203
+ Logistic Regression oneDAL implementation.
204
+ """
205
+
206
+ def __init__(
207
+ self,
208
+ tol=1e-4,
209
+ C=1.0,
210
+ fit_intercept=True,
211
+ solver="newton-cg",
212
+ max_iter=100,
213
+ *,
214
+ algorithm="dense_batch",
215
+ **kwargs,
216
+ ):
217
+ super().__init__(
218
+ tol=tol,
219
+ C=C,
220
+ fit_intercept=fit_intercept,
221
+ solver=solver,
222
+ max_iter=max_iter,
223
+ algorithm=algorithm,
224
+ )
225
+
226
+ def fit(self, X, y, queue=None):
227
+ return super()._fit(
228
+ X, y, self._get_backend("logistic_regression", "classification", None), queue
229
+ )
230
+
231
+ def predict(self, X, queue=None):
232
+ y = super()._predict(
233
+ X, self._get_backend("logistic_regression", "classification", None), queue
234
+ )
235
+ return y
236
+
237
+ def predict_proba(self, X, queue=None):
238
+ y = super()._predict_proba(
239
+ X, self._get_backend("logistic_regression", "classification", None), queue
240
+ )
241
+ return y
242
+
243
+ def predict_log_proba(self, X, queue=None):
244
+ y = super()._predict_log_proba(
245
+ X, self._get_backend("logistic_regression", "classification", None), queue
246
+ )
247
+ return y