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,105 @@
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
+ import numpy as np
18
+
19
+ from daal4py.sklearn._utils import get_dtype, make2d
20
+
21
+ from ..common._base import BaseEstimator
22
+ from ..common._mixin import ClusterMixin
23
+ from ..datatypes import from_table, to_table
24
+ from ..utils import _check_array
25
+
26
+
27
+ class BaseDBSCAN(BaseEstimator, ClusterMixin):
28
+ def __init__(
29
+ self,
30
+ eps=0.5,
31
+ *,
32
+ min_samples=5,
33
+ metric="euclidean",
34
+ metric_params=None,
35
+ algorithm="auto",
36
+ leaf_size=30,
37
+ p=None,
38
+ n_jobs=None,
39
+ ):
40
+ self.eps = eps
41
+ self.min_samples = min_samples
42
+ self.metric = metric
43
+ self.metric_params = metric_params
44
+ self.algorithm = algorithm
45
+ self.leaf_size = leaf_size
46
+ self.p = p
47
+ self.n_jobs = n_jobs
48
+
49
+ def _get_onedal_params(self, dtype=np.float32):
50
+ return {
51
+ "fptype": dtype,
52
+ "method": "by_default",
53
+ "min_observations": int(self.min_samples),
54
+ "epsilon": float(self.eps),
55
+ "mem_save_mode": False,
56
+ "result_options": "core_observation_indices|responses",
57
+ }
58
+
59
+ def _fit(self, X, y, sample_weight, module, queue):
60
+ policy = self._get_policy(queue, X)
61
+ X = _check_array(X, accept_sparse="csr", dtype=[np.float64, np.float32])
62
+ sample_weight = make2d(sample_weight) if sample_weight is not None else None
63
+ X_table, sample_weight_table = to_table(X, sample_weight, queue=queue)
64
+
65
+ params = self._get_onedal_params(X_table.dtype)
66
+ result = module.compute(policy, params, X_table, sample_weight_table)
67
+
68
+ self.labels_ = from_table(result.responses).ravel()
69
+ if result.core_observation_indices is not None:
70
+ self.core_sample_indices_ = from_table(
71
+ result.core_observation_indices
72
+ ).ravel()
73
+ else:
74
+ self.core_sample_indices_ = np.array([], dtype=np.intc)
75
+ self.components_ = np.take(X, self.core_sample_indices_, axis=0)
76
+ self.n_features_in_ = X.shape[1]
77
+ return self
78
+
79
+
80
+ class DBSCAN(BaseDBSCAN):
81
+ def __init__(
82
+ self,
83
+ eps=0.5,
84
+ *,
85
+ min_samples=5,
86
+ metric="euclidean",
87
+ metric_params=None,
88
+ algorithm="auto",
89
+ leaf_size=30,
90
+ p=None,
91
+ n_jobs=None,
92
+ ):
93
+ self.eps = eps
94
+ self.min_samples = min_samples
95
+ self.metric = metric
96
+ self.metric_params = metric_params
97
+ self.algorithm = algorithm
98
+ self.leaf_size = leaf_size
99
+ self.p = p
100
+ self.n_jobs = n_jobs
101
+
102
+ def fit(self, X, y=None, sample_weight=None, queue=None):
103
+ return super()._fit(
104
+ X, y, sample_weight, self._get_backend("dbscan", "clustering", None), queue
105
+ )
@@ -0,0 +1,557 @@
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
+ import logging
18
+ import warnings
19
+ from abc import ABC
20
+
21
+ import numpy as np
22
+
23
+ from daal4py.sklearn._utils import daal_check_version, get_dtype
24
+ from onedal import _backend
25
+ from onedal.basic_statistics import BasicStatistics
26
+
27
+ if daal_check_version((2023, "P", 200)):
28
+ from .kmeans_init import KMeansInit
29
+
30
+ from sklearn.cluster._kmeans import _kmeans_plusplus
31
+ from sklearn.exceptions import ConvergenceWarning
32
+ from sklearn.metrics.pairwise import euclidean_distances
33
+ from sklearn.utils import check_random_state
34
+
35
+ from ..common._base import BaseEstimator as onedal_BaseEstimator
36
+ from ..common._mixin import ClusterMixin, TransformerMixin
37
+ from ..datatypes import from_table, to_table
38
+ from ..utils import _check_array, _is_arraylike_not_scalar, _is_csr
39
+
40
+
41
+ class _BaseKMeans(onedal_BaseEstimator, TransformerMixin, ClusterMixin, ABC):
42
+ def __init__(
43
+ self,
44
+ n_clusters,
45
+ *,
46
+ init,
47
+ n_init,
48
+ max_iter,
49
+ tol,
50
+ verbose,
51
+ random_state,
52
+ n_local_trials=None,
53
+ ):
54
+ self.n_clusters = n_clusters
55
+ self.init = init
56
+ self.max_iter = max_iter
57
+ self.tol = tol
58
+ self.n_init = n_init
59
+ self.verbose = verbose
60
+ self.random_state = random_state
61
+ self.n_local_trials = n_local_trials
62
+
63
+ def _validate_center_shape(self, X, centers):
64
+ """Check if centers is compatible with X and n_clusters."""
65
+ if centers.shape[0] != self.n_clusters:
66
+ raise ValueError(
67
+ f"The shape of the initial centers {centers.shape} does not "
68
+ f"match the number of clusters {self.n_clusters}."
69
+ )
70
+ if centers.shape[1] != X.shape[1]:
71
+ raise ValueError(
72
+ f"The shape of the initial centers {centers.shape} does not "
73
+ f"match the number of features of the data {X.shape[1]}."
74
+ )
75
+
76
+ def _get_kmeans_init(self, cluster_count, seed, algorithm):
77
+ return KMeansInit(cluster_count=cluster_count, seed=seed, algorithm=algorithm)
78
+
79
+ # Get appropriate backend (required for SPMD)
80
+ def _get_basic_statistics_backend(self, result_options):
81
+ return BasicStatistics(result_options)
82
+
83
+ def _tolerance(self, X_table, rtol, is_csr, policy, dtype):
84
+ """Compute absolute tolerance from the relative tolerance"""
85
+ if rtol == 0.0:
86
+ return rtol
87
+ dummy = to_table(None)
88
+
89
+ bs = self._get_basic_statistics_backend("variance")
90
+
91
+ res = bs._compute_raw(X_table, dummy, policy, dtype, is_csr)
92
+ mean_var = from_table(res["variance"]).mean()
93
+
94
+ return mean_var * rtol
95
+
96
+ def _check_params_vs_input(
97
+ self, X_table, is_csr, policy, default_n_init=10, dtype=np.float32
98
+ ):
99
+ # n_clusters
100
+ if X_table.shape[0] < self.n_clusters:
101
+ raise ValueError(
102
+ f"n_samples={X_table.shape[0]} should be >= n_clusters={self.n_clusters}."
103
+ )
104
+
105
+ # tol
106
+ self._tol = self._tolerance(X_table, self.tol, is_csr, policy, dtype)
107
+
108
+ # n-init
109
+ # TODO(1.4): Remove
110
+ self._n_init = self.n_init
111
+ if self._n_init == "warn":
112
+ warnings.warn(
113
+ (
114
+ "The default value of `n_init` will change from "
115
+ f"{default_n_init} to 'auto' in 1.4. Set the value of `n_init`"
116
+ " explicitly to suppress the warning"
117
+ ),
118
+ FutureWarning,
119
+ stacklevel=2,
120
+ )
121
+ self._n_init = default_n_init
122
+ if self._n_init == "auto":
123
+ if isinstance(self.init, str) and self.init == "k-means++":
124
+ self._n_init = 1
125
+ elif isinstance(self.init, str) and self.init == "random":
126
+ self._n_init = default_n_init
127
+ elif callable(self.init):
128
+ self._n_init = default_n_init
129
+ else: # array-like
130
+ self._n_init = 1
131
+
132
+ if _is_arraylike_not_scalar(self.init) and self._n_init != 1:
133
+ warnings.warn(
134
+ (
135
+ "Explicit initial center position passed: performing only"
136
+ f" one init in {self.__class__.__name__} instead of "
137
+ f"n_init={self._n_init}."
138
+ ),
139
+ RuntimeWarning,
140
+ stacklevel=2,
141
+ )
142
+ self._n_init = 1
143
+ assert self.algorithm == "lloyd"
144
+
145
+ def _get_onedal_params(self, is_csr=False, dtype=np.float32, result_options=None):
146
+ thr = self._tol if hasattr(self, "_tol") else self.tol
147
+ return {
148
+ "fptype": dtype,
149
+ "method": "lloyd_csr" if is_csr else "by_default",
150
+ "seed": -1,
151
+ "max_iteration_count": self.max_iter,
152
+ "cluster_count": self.n_clusters,
153
+ "accuracy_threshold": thr,
154
+ "result_options": "" if result_options is None else result_options,
155
+ }
156
+
157
+ def _init_centroids_onedal(
158
+ self,
159
+ X_table,
160
+ init,
161
+ random_seed,
162
+ policy,
163
+ is_csr,
164
+ dtype=np.float32,
165
+ n_centroids=None,
166
+ ):
167
+ n_clusters = self.n_clusters if n_centroids is None else n_centroids
168
+ # Use host policy for KMeans init, only for csr data
169
+ # as oneDAL KMeansInit for CSR data is not implemented on GPU
170
+ if is_csr:
171
+ init_policy = self._get_policy(None, None)
172
+ logging.getLogger("sklearnex").info("Running Sparse KMeansInit on CPU")
173
+ else:
174
+ init_policy = policy
175
+
176
+ if isinstance(init, str) and init == "k-means++":
177
+ if not is_csr:
178
+ alg = self._get_kmeans_init(
179
+ cluster_count=n_clusters,
180
+ seed=random_seed,
181
+ algorithm="plus_plus_dense",
182
+ )
183
+ else:
184
+ alg = self._get_kmeans_init(
185
+ cluster_count=n_clusters, seed=random_seed, algorithm="plus_plus_csr"
186
+ )
187
+ centers_table = alg.compute_raw(X_table, init_policy, dtype)
188
+ elif isinstance(init, str) and init == "random":
189
+ if not is_csr:
190
+ alg = self._get_kmeans_init(
191
+ cluster_count=n_clusters, seed=random_seed, algorithm="random_dense"
192
+ )
193
+ else:
194
+ alg = self._get_kmeans_init(
195
+ cluster_count=n_clusters, seed=random_seed, algorithm="random_csr"
196
+ )
197
+ centers_table = alg.compute_raw(X_table, init_policy, dtype)
198
+ elif _is_arraylike_not_scalar(init):
199
+ if _is_csr(init):
200
+ # oneDAL KMeans only supports Dense Centroids
201
+ centers = init.toarray()
202
+ else:
203
+ centers = np.asarray(init)
204
+ assert centers.shape[0] == n_clusters
205
+ assert centers.shape[1] == X_table.column_count
206
+ # KMeans is implemented on both CPU and GPU for Dense and CSR data
207
+ # The original policy can be used here
208
+ centers_table = to_table(centers, queue=getattr(policy, "_queue", None))
209
+ else:
210
+ raise TypeError("Unsupported type of the `init` value")
211
+
212
+ return centers_table
213
+
214
+ def _init_centroids_sklearn(self, X, init, random_state, policy, dtype=np.float32):
215
+ # For oneDAL versions < 2023.2 or callable init,
216
+ # using the scikit-learn implementation
217
+ logging.getLogger("sklearnex").info("Computing KMeansInit with Stock sklearn")
218
+ n_samples = X.shape[0]
219
+
220
+ if isinstance(init, str) and init == "k-means++":
221
+ centers, _ = _kmeans_plusplus(
222
+ X,
223
+ self.n_clusters,
224
+ random_state=random_state,
225
+ )
226
+ elif isinstance(init, str) and init == "random":
227
+ seeds = random_state.choice(n_samples, size=self.n_clusters, replace=False)
228
+ centers = X[seeds]
229
+ elif callable(init):
230
+ cc_arr = init(X, self.n_clusters, random_state)
231
+ cc_arr = np.ascontiguousarray(cc_arr, dtype=dtype)
232
+ self._validate_center_shape(X, cc_arr)
233
+ centers = cc_arr
234
+ elif _is_arraylike_not_scalar(init):
235
+ centers = init
236
+ else:
237
+ raise ValueError(
238
+ f"init should be either 'k-means++', 'random', a ndarray or a "
239
+ f"callable, got '{ init }' instead."
240
+ )
241
+
242
+ return to_table(centers, queue=getattr(policy, "_queue", None))
243
+
244
+ def _fit_backend(
245
+ self, X_table, centroids_table, module, policy, dtype=np.float32, is_csr=False
246
+ ):
247
+ params = self._get_onedal_params(is_csr, dtype)
248
+
249
+ assert X_table.dtype == dtype
250
+
251
+ result = module.train(policy, params, X_table, centroids_table)
252
+
253
+ return (
254
+ result.responses,
255
+ result.objective_function_value,
256
+ result.model,
257
+ result.iteration_count,
258
+ )
259
+
260
+ def _fit(self, X, module, queue=None):
261
+ policy = self._get_policy(queue, X)
262
+ is_csr = _is_csr(X)
263
+ X = _check_array(
264
+ X, dtype=[np.float64, np.float32], accept_sparse="csr", force_all_finite=False
265
+ )
266
+ X_table = to_table(X, queue=queue)
267
+ dtype = X_table.dtype
268
+
269
+ self._check_params_vs_input(X_table, is_csr, policy, dtype=dtype)
270
+
271
+ self.n_features_in_ = X_table.column_count
272
+
273
+ best_model, best_n_iter = None, None
274
+ best_inertia, best_labels = None, None
275
+
276
+ def is_better_iteration(inertia, labels):
277
+ if best_inertia is None:
278
+ return True
279
+ else:
280
+ mod = self._get_backend("kmeans_common", None, None)
281
+ better_inertia = inertia < best_inertia
282
+ same_clusters = mod._is_same_clustering(
283
+ labels, best_labels, self.n_clusters
284
+ )
285
+ return better_inertia and not same_clusters
286
+
287
+ random_state = check_random_state(self.random_state)
288
+
289
+ init = self.init
290
+ init_is_array_like = _is_arraylike_not_scalar(init)
291
+ if init_is_array_like:
292
+ init = _check_array(
293
+ init, dtype=dtype, accept_sparse="csr", copy=True, order="C"
294
+ )
295
+ self._validate_center_shape(X, init)
296
+
297
+ use_onedal_init = daal_check_version((2023, "P", 200)) and not callable(self.init)
298
+
299
+ for _ in range(self._n_init):
300
+ if use_onedal_init:
301
+ random_seed = random_state.randint(np.iinfo("i").max)
302
+ centroids_table = self._init_centroids_onedal(
303
+ X_table, init, random_seed, policy, is_csr, dtype=dtype
304
+ )
305
+ else:
306
+ centroids_table = self._init_centroids_sklearn(
307
+ X, init, random_state, policy, dtype=dtype
308
+ )
309
+
310
+ if self.verbose:
311
+ print("Initialization complete")
312
+
313
+ labels, inertia, model, n_iter = self._fit_backend(
314
+ X_table, centroids_table, module, policy, dtype, is_csr
315
+ )
316
+
317
+ if self.verbose:
318
+ print("Iteration {}, inertia {}.".format(n_iter, inertia))
319
+
320
+ if is_better_iteration(inertia, labels):
321
+ best_model, best_n_iter = model, n_iter
322
+ best_inertia, best_labels = inertia, labels
323
+
324
+ # Types without conversion
325
+ self.model_ = best_model
326
+
327
+ # Simple types
328
+ self.n_iter_ = best_n_iter
329
+ self.inertia_ = best_inertia
330
+
331
+ # Complex type conversion
332
+ self.labels_ = from_table(best_labels).ravel()
333
+
334
+ distinct_clusters = len(np.unique(self.labels_))
335
+ if distinct_clusters < self.n_clusters:
336
+ warnings.warn(
337
+ "Number of distinct clusters ({}) found smaller than "
338
+ "n_clusters ({}). Possibly due to duplicate points "
339
+ "in X.".format(distinct_clusters, self.n_clusters),
340
+ ConvergenceWarning,
341
+ stacklevel=2,
342
+ )
343
+
344
+ return self
345
+
346
+ @property
347
+ def cluster_centers_(self):
348
+ if not hasattr(self, "_cluster_centers_"):
349
+ if hasattr(self, "model_"):
350
+ centroids = self.model_.centroids
351
+ self._cluster_centers_ = from_table(centroids)
352
+ else:
353
+ raise NameError("This model have not been trained")
354
+ return self._cluster_centers_
355
+
356
+ @cluster_centers_.setter
357
+ def cluster_centers_(self, cluster_centers):
358
+ self._cluster_centers_ = np.asarray(cluster_centers)
359
+
360
+ self.n_iter_ = 0
361
+ self.inertia_ = 0
362
+
363
+ self.model_ = self._get_backend("kmeans", "clustering", "model")
364
+ self.model_.centroids = to_table(self._cluster_centers_)
365
+ self.n_features_in_ = self.model_.centroids.column_count
366
+ self.labels_ = np.arange(self.model_.centroids.row_count)
367
+
368
+ return self
369
+
370
+ @cluster_centers_.deleter
371
+ def cluster_centers_(self):
372
+ del self._cluster_centers_
373
+
374
+ def _predict(self, X, module, queue=None, result_options=None):
375
+ is_csr = _is_csr(X)
376
+
377
+ policy = self._get_policy(queue, X)
378
+ X_table = to_table(X, queue=queue)
379
+ params = self._get_onedal_params(is_csr, X_table.dtype, result_options)
380
+
381
+ result = module.infer(policy, params, self.model_, X_table)
382
+
383
+ if (
384
+ result_options == "compute_exact_objective_function"
385
+ ): # This is only set for score function
386
+ return result.objective_function_value * (-1)
387
+ else:
388
+ return from_table(result.responses).ravel()
389
+
390
+ def _score(self, X, module, queue=None):
391
+ result_options = "compute_exact_objective_function"
392
+
393
+ return self._predict(
394
+ X, self._get_backend("kmeans", "clustering", None), queue, result_options
395
+ )
396
+
397
+ def _transform(self, X):
398
+ return euclidean_distances(X, self.cluster_centers_)
399
+
400
+
401
+ class KMeans(_BaseKMeans):
402
+ def __init__(
403
+ self,
404
+ n_clusters=8,
405
+ *,
406
+ init="k-means++",
407
+ n_init="auto",
408
+ max_iter=300,
409
+ tol=1e-4,
410
+ verbose=0,
411
+ random_state=None,
412
+ copy_x=True,
413
+ algorithm="lloyd",
414
+ ):
415
+ super().__init__(
416
+ n_clusters=n_clusters,
417
+ init=init,
418
+ n_init=n_init,
419
+ max_iter=max_iter,
420
+ tol=tol,
421
+ verbose=verbose,
422
+ random_state=random_state,
423
+ )
424
+
425
+ self.copy_x = copy_x
426
+ self.algorithm = algorithm
427
+ assert self.algorithm == "lloyd"
428
+
429
+ def fit(self, X, y=None, queue=None):
430
+ return super()._fit(X, self._get_backend("kmeans", "clustering", None), queue)
431
+
432
+ def predict(self, X, queue=None):
433
+ """Predict the closest cluster each sample in X belongs to.
434
+
435
+ In the vector quantization literature, `cluster_centers_` is called
436
+ the code book and each value returned by `predict` is the index of
437
+ the closest code in the code book.
438
+
439
+ Parameters
440
+ ----------
441
+ X : array-like of shape (n_samples, n_features)
442
+ New data to predict.
443
+
444
+ Returns
445
+ -------
446
+ labels : ndarray of shape (n_samples,)
447
+ Index of the cluster each sample belongs to.
448
+ """
449
+ return super()._predict(X, self._get_backend("kmeans", "clustering", None), queue)
450
+
451
+ def fit_predict(self, X, y=None, queue=None):
452
+ """Compute cluster centers and predict cluster index for each sample.
453
+
454
+ Convenience method; equivalent to calling fit(X) followed by
455
+ predict(X).
456
+
457
+ Parameters
458
+ ----------
459
+ X : array-like of shape (n_samples, n_features)
460
+ New data to transform.
461
+
462
+ y : Ignored
463
+ Not used, present here for API consistency by convention.
464
+
465
+ Returns
466
+ -------
467
+ labels : ndarray of shape (n_samples,)
468
+ Index of the cluster each sample belongs to.
469
+ """
470
+ return self.fit(X, queue=queue).labels_
471
+
472
+ def fit_transform(self, X, y=None, queue=None):
473
+ """Compute clustering and transform X to cluster-distance space.
474
+
475
+ Equivalent to fit(X).transform(X), but more efficiently implemented.
476
+
477
+ Parameters
478
+ ----------
479
+ X : array-like of shape (n_samples, n_features)
480
+ New data to transform.
481
+
482
+ y : Ignored
483
+ Not used, present here for API consistency by convention.
484
+
485
+ Returns
486
+ -------
487
+ X_new : ndarray of shape (n_samples, n_clusters)
488
+ X transformed in the new space.
489
+ """
490
+ return self.fit(X, queue=queue)._transform(X)
491
+
492
+ def transform(self, X):
493
+ """Transform X to a cluster-distance space.
494
+
495
+ In the new space, each dimension is the distance to the cluster
496
+ centers. Note that even if X is sparse, the array returned by
497
+ `transform` will typically be dense.
498
+
499
+ Parameters
500
+ ----------
501
+ X : array-like of shape (n_samples, n_features)
502
+ New data to transform.
503
+
504
+ Returns
505
+ -------
506
+ X_new : ndarray of shape (n_samples, n_clusters)
507
+ X transformed in the new space.
508
+ """
509
+
510
+ return self._transform(X)
511
+
512
+ def score(self, X, queue=None):
513
+ """Opposite of the value of X on the K-means objective.
514
+
515
+ Parameters
516
+ ----------
517
+ X: {array-like, sparse matrix} of shape (n_samples, n_features)
518
+ New data.
519
+
520
+ Returns
521
+ -------
522
+ score: float
523
+ Opposite of the value of X on the K-means objective.
524
+ """
525
+ return super()._score(X, self._get_backend("kmeans", "clustering", None), queue)
526
+
527
+
528
+ def k_means(
529
+ X,
530
+ n_clusters,
531
+ *,
532
+ init="k-means++",
533
+ n_init="auto",
534
+ max_iter=300,
535
+ verbose=False,
536
+ tol=1e-4,
537
+ random_state=None,
538
+ copy_x=True,
539
+ algorithm="lloyd",
540
+ return_n_iter=False,
541
+ queue=None,
542
+ ):
543
+ est = KMeans(
544
+ n_clusters=n_clusters,
545
+ init=init,
546
+ n_init=n_init,
547
+ max_iter=max_iter,
548
+ verbose=verbose,
549
+ tol=tol,
550
+ random_state=random_state,
551
+ copy_x=copy_x,
552
+ algorithm=algorithm,
553
+ ).fit(X, queue=queue)
554
+ if return_n_iter:
555
+ return est.cluster_centers_, est.labels_, est.inertia_, est.n_iter_
556
+ else:
557
+ return est.cluster_centers_, est.labels_, est.inertia_