scikit-learn-intelex 2024.0.1__py312-none-win_amd64.whl → 2025.1.0__py312-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 (275) hide show
  1. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/__init__.py +73 -0
  2. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/__main__.py +58 -0
  3. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/_daal4py.cp312-win_amd64.pyd +0 -0
  4. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/doc/third-party-programs.txt +424 -0
  5. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/mb/__init__.py +19 -0
  6. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/mb/model_builders.py +377 -0
  7. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/mpi_transceiver.cp312-win_amd64.pyd +0 -0
  8. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/__init__.py +40 -0
  9. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/_n_jobs_support.py +248 -0
  10. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/_utils.py +245 -0
  11. {scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/preview → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn}/cluster/__init__.py +3 -3
  12. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/cluster/dbscan.py +165 -0
  13. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/cluster/k_means.py +597 -0
  14. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/cluster/tests/test_dbscan.py +109 -0
  15. scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/basic_statistics/basic_statistics.py → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/decomposition/__init__.py +4 -2
  16. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/decomposition/_pca.py +524 -0
  17. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/ensemble/AdaBoostClassifier.py +196 -0
  18. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/ensemble/GBTDAAL.py +337 -0
  19. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/ensemble/__init__.py +27 -0
  20. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/ensemble/_forest.py +1397 -0
  21. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/ensemble/tests/test_decision_forest.py +206 -0
  22. {scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn}/linear_model/__init__.py +29 -30
  23. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/_coordinate_descent.py +848 -0
  24. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/_linear.py +272 -0
  25. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/_ridge.py +325 -0
  26. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/coordinate_descent.py +17 -0
  27. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/linear.py +17 -0
  28. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/logistic_loss.py +195 -0
  29. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/logistic_path.py +1026 -0
  30. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/ridge.py +17 -0
  31. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/tests/test_linear.py +208 -0
  32. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/tests/test_ridge.py +69 -0
  33. {scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/preview → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/manifold}/__init__.py +4 -3
  34. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/manifold/_t_sne.py +405 -0
  35. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/metrics/__init__.py +20 -0
  36. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/metrics/_pairwise.py +236 -0
  37. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/metrics/_ranking.py +210 -0
  38. scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/linear_model/ridge.py → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/model_selection/__init__.py +4 -3
  39. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/model_selection/_split.py +309 -0
  40. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/model_selection/tests/test_split.py +56 -0
  41. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/__init__.py +0 -0
  42. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/dispatcher.py +232 -0
  43. {scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch}/tests/_models_info.py +13 -22
  44. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/tests/test_monkeypatch.py +71 -0
  45. {scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch}/tests/test_patching.py +10 -42
  46. {scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch}/tests/utils/_launch_algorithms.py +4 -5
  47. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/__init__.py +21 -0
  48. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/_base.py +503 -0
  49. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/_classification.py +139 -0
  50. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/_regression.py +74 -0
  51. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/_unsupervised.py +55 -0
  52. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/tests/test_kneighbors.py +113 -0
  53. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/svm/__init__.py +19 -0
  54. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/svm/svm.py +734 -0
  55. {scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/spmd/linear_model → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/utils}/__init__.py +5 -3
  56. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/utils/base.py +75 -0
  57. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/utils/tests/test_utils.py +51 -0
  58. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/utils/validation.py +693 -0
  59. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/__init__.py +83 -0
  60. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/_config.py +54 -0
  61. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/_device_offload.py +222 -0
  62. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/_onedal_py_dpc.cp312-win_amd64.pyd +0 -0
  63. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/_onedal_py_host.cp312-win_amd64.pyd +0 -0
  64. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/basic_statistics/__init__.py +20 -0
  65. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/basic_statistics/basic_statistics.py +107 -0
  66. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/basic_statistics/incremental_basic_statistics.py +160 -0
  67. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/basic_statistics/tests/test_basic_statistics.py +298 -0
  68. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/basic_statistics/tests/test_incremental_basic_statistics.py +196 -0
  69. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/cluster/__init__.py +27 -0
  70. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/cluster/dbscan.py +110 -0
  71. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/cluster/kmeans.py +564 -0
  72. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/cluster/kmeans_init.py +115 -0
  73. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/cluster/tests/test_dbscan.py +125 -0
  74. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/cluster/tests/test_kmeans.py +88 -0
  75. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/cluster/tests/test_kmeans_init.py +93 -0
  76. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/common/_base.py +38 -0
  77. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/common/_estimator_checks.py +47 -0
  78. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/common/_mixin.py +62 -0
  79. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/common/_policy.py +59 -0
  80. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/common/_spmd_policy.py +30 -0
  81. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/common/hyperparameters.py +125 -0
  82. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/common/tests/test_policy.py +76 -0
  83. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/covariance/__init__.py +20 -0
  84. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/covariance/covariance.py +125 -0
  85. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/covariance/incremental_covariance.py +146 -0
  86. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/covariance/tests/test_covariance.py +50 -0
  87. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/covariance/tests/test_incremental_covariance.py +122 -0
  88. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/datatypes/__init__.py +19 -0
  89. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/datatypes/_data_conversion.py +154 -0
  90. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/datatypes/tests/common.py +126 -0
  91. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/datatypes/tests/test_data.py +414 -0
  92. {scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/basic_statistics → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/decomposition}/__init__.py +3 -3
  93. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/decomposition/incremental_pca.py +204 -0
  94. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/decomposition/pca.py +186 -0
  95. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/decomposition/tests/test_incremental_pca.py +198 -0
  96. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/ensemble/__init__.py +29 -0
  97. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/ensemble/forest.py +727 -0
  98. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/ensemble/tests/test_random_forest.py +97 -0
  99. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/linear_model/__init__.py +27 -0
  100. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/linear_model/incremental_linear_model.py +258 -0
  101. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/linear_model/linear_model.py +329 -0
  102. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/linear_model/logistic_regression.py +249 -0
  103. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/linear_model/tests/test_incremental_linear_regression.py +168 -0
  104. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/linear_model/tests/test_incremental_ridge_regression.py +107 -0
  105. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/linear_model/tests/test_linear_regression.py +250 -0
  106. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/linear_model/tests/test_logistic_regression.py +95 -0
  107. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/linear_model/tests/test_ridge.py +95 -0
  108. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/neighbors/__init__.py +19 -0
  109. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/neighbors/neighbors.py +767 -0
  110. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/neighbors/tests/test_knn_classification.py +49 -0
  111. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/primitives/__init__.py +27 -0
  112. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/primitives/get_tree.py +25 -0
  113. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/primitives/kernel_functions.py +153 -0
  114. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/primitives/tests/test_kernel_functions.py +159 -0
  115. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/svm/__init__.py +19 -0
  116. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/svm/svm.py +556 -0
  117. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/svm/tests/test_csr_svm.py +351 -0
  118. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/svm/tests/test_nusvc.py +204 -0
  119. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/svm/tests/test_nusvr.py +210 -0
  120. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/svm/tests/test_svc.py +176 -0
  121. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/svm/tests/test_svr.py +243 -0
  122. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/tests/test_common.py +57 -0
  123. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/tests/utils/_dataframes_support.py +162 -0
  124. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/tests/utils/_device_selection.py +102 -0
  125. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/utils/__init__.py +49 -0
  126. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/utils/_array_api.py +81 -0
  127. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/utils/_dpep_helpers.py +56 -0
  128. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/utils/validation.py +440 -0
  129. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/__init__.py +12 -7
  130. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/__main__.py +0 -1
  131. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/_config.py +22 -16
  132. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/_device_offload.py +126 -0
  133. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/_utils.py +42 -5
  134. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/basic_statistics/__init__.py +20 -0
  135. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/basic_statistics/basic_statistics.py +230 -0
  136. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/basic_statistics/incremental_basic_statistics.py +345 -0
  137. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/basic_statistics/tests/test_basic_statistics.py +270 -0
  138. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/basic_statistics/tests/test_incremental_basic_statistics.py +404 -0
  139. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/cluster/__init__.py +1 -2
  140. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/cluster/dbscan.py +18 -8
  141. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/cluster/k_means.py +395 -0
  142. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/cluster/tests/test_dbscan.py +8 -7
  143. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/cluster/tests/test_kmeans.py +159 -0
  144. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/conftest.py +82 -0
  145. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/covariance/__init__.py +19 -0
  146. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/covariance/incremental_covariance.py +398 -0
  147. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/covariance/tests/test_incremental_covariance.py +237 -0
  148. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/decomposition/__init__.py +0 -1
  149. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/decomposition/pca.py +425 -0
  150. scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/preview/decomposition/tests/test_preview_pca.py → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/decomposition/tests/test_pca.py +26 -6
  151. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/dispatcher.py +242 -28
  152. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/ensemble/__init__.py +0 -1
  153. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/ensemble/_forest.py +262 -180
  154. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/ensemble/tests/test_forest.py +39 -22
  155. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/glob/__main__.py +0 -1
  156. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/glob/dispatcher.py +16 -3
  157. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/linear_model/__init__.py +32 -0
  158. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/linear_model/coordinate_descent.py +13 -1
  159. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/linear_model/incremental_linear.py +482 -0
  160. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/linear_model/incremental_ridge.py +425 -0
  161. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/linear_model/linear.py +341 -0
  162. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/linear_model/logistic_regression.py +413 -0
  163. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/linear_model/ridge.py +24 -0
  164. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_incremental_linear.py +207 -0
  165. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_incremental_ridge.py +153 -0
  166. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_linear.py +167 -0
  167. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_logreg.py +134 -0
  168. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/manifold/__init__.py +0 -1
  169. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/manifold/t_sne.py +21 -0
  170. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/manifold/tests/test_tsne.py +0 -1
  171. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/metrics/__init__.py +0 -1
  172. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/metrics/pairwise.py +5 -1
  173. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/metrics/ranking.py +3 -1
  174. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/metrics/tests/test_metrics.py +0 -1
  175. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/model_selection/__init__.py +0 -1
  176. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/model_selection/split.py +5 -1
  177. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/model_selection/tests/test_model_selection.py +0 -1
  178. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/neighbors/__init__.py +1 -2
  179. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/neighbors/_lof.py +236 -0
  180. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/neighbors/common.py +54 -8
  181. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/neighbors/knn_classification.py +51 -151
  182. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/neighbors/knn_regression.py +46 -146
  183. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/neighbors/knn_unsupervised.py +53 -95
  184. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/neighbors/tests/test_neighbors.py +16 -19
  185. {scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/spmd/decomposition → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/preview}/__init__.py +1 -3
  186. {scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/preview/decomposition → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/preview/covariance}/__init__.py +19 -20
  187. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/preview/covariance/covariance.py +138 -0
  188. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/preview/covariance/tests/test_covariance.py +66 -0
  189. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/preview/decomposition/__init__.py +19 -0
  190. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/preview/decomposition/incremental_pca.py +233 -0
  191. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/preview/decomposition/tests/test_incremental_pca.py +266 -0
  192. scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/manifold/t_sne.py → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/preview/linear_model/__init__.py +19 -18
  193. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/preview/linear_model/ridge.py +424 -0
  194. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/preview/linear_model/tests/test_ridge.py +102 -0
  195. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/__init__.py +1 -0
  196. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/__init__.py +20 -0
  197. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/incremental_basic_statistics.py +30 -0
  198. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/tests/test_basic_statistics_spmd.py +107 -0
  199. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/tests/test_incremental_basic_statistics_spmd.py +307 -0
  200. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/cluster/tests/test_dbscan_spmd.py +97 -0
  201. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/cluster/tests/test_kmeans_spmd.py +172 -0
  202. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/__init__.py +20 -0
  203. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/covariance.py +21 -0
  204. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/incremental_covariance.py +37 -0
  205. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/tests/test_covariance_spmd.py +107 -0
  206. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/tests/test_incremental_covariance_spmd.py +184 -0
  207. {scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/decomposition}/__init__.py +3 -2
  208. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/decomposition/incremental_pca.py +30 -0
  209. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/decomposition/tests/test_incremental_pca_spmd.py +269 -0
  210. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/decomposition/tests/test_pca_spmd.py +128 -0
  211. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/ensemble/forest.py +4 -12
  212. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/ensemble/tests/test_forest_spmd.py +265 -0
  213. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/__init__.py +21 -0
  214. scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/tests/test_config.py → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/incremental_linear_model.py +14 -18
  215. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/logistic_regression.py +21 -0
  216. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/tests/test_incremental_linear_spmd.py +329 -0
  217. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/tests/test_linear_regression_spmd.py +145 -0
  218. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/tests/test_logistic_regression_spmd.py +162 -0
  219. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/neighbors/tests/test_neighbors_spmd.py +288 -0
  220. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/svm/__init__.py +0 -1
  221. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/svm/_common.py +339 -0
  222. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/svm/nusvc.py +172 -73
  223. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/svm/nusvr.py +73 -66
  224. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/svm/svc.py +171 -73
  225. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/svm/svr.py +65 -62
  226. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/svm/tests/test_svm.py +12 -21
  227. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/test_common.py +390 -0
  228. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/test_config.py +123 -0
  229. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/test_memory_usage.py +379 -0
  230. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/test_monkeypatch.py +276 -0
  231. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/test_n_jobs_support.py +108 -0
  232. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/tests/test_parallel.py +6 -8
  233. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/test_patching.py +385 -0
  234. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/test_run_to_run_stability.py +321 -0
  235. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/utils/__init__.py +44 -0
  236. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/utils/base.py +371 -0
  237. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/utils/spmd.py +198 -0
  238. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/utils/_array_api.py +82 -0
  239. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/utils/tests/test_finite.py +89 -0
  240. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/utils/validation.py +0 -1
  241. {scikit_learn_intelex-2024.0.1.dist-info → scikit_learn_intelex-2025.1.0.dist-info}/METADATA +231 -230
  242. scikit_learn_intelex-2025.1.0.dist-info/RECORD +257 -0
  243. {scikit_learn_intelex-2024.0.1.dist-info → scikit_learn_intelex-2025.1.0.dist-info}/WHEEL +1 -1
  244. scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/_device_offload.py +0 -223
  245. scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/cluster/k_means.py +0 -18
  246. scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/cluster/tests/test_kmeans.py +0 -31
  247. scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/decomposition/pca.py +0 -18
  248. scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/decomposition/tests/test_pca.py +0 -28
  249. scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/linear_model/linear.py +0 -373
  250. scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/linear_model/logistic_path.py +0 -18
  251. scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_linear.py +0 -77
  252. scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_logreg.py +0 -29
  253. scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/neighbors/lof.py +0 -437
  254. scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/preview/cluster/_common.py +0 -84
  255. scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/preview/cluster/k_means.py +0 -370
  256. scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/preview/decomposition/pca.py +0 -376
  257. scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/svm/_common.py +0 -188
  258. scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/tests/test_memory_usage.py +0 -225
  259. scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/tests/test_monkeypatch.py +0 -210
  260. scikit_learn_intelex-2024.0.1.data/data/Lib/site-packages/sklearnex/tests/test_run_to_run_stability_tests.py +0 -428
  261. scikit_learn_intelex-2024.0.1.dist-info/RECORD +0 -90
  262. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/doc/third-party-programs.txt +0 -0
  263. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/basic_statistics/basic_statistics.py +0 -0
  264. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/cluster/__init__.py +0 -0
  265. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/cluster/dbscan.py +0 -0
  266. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/cluster/kmeans.py +0 -0
  267. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/decomposition/pca.py +0 -0
  268. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/ensemble/__init__.py +0 -0
  269. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/linear_model/linear_model.py +0 -0
  270. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/neighbors/__init__.py +0 -0
  271. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/neighbors/neighbors.py +0 -0
  272. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/utils/__init__.py +0 -0
  273. {scikit_learn_intelex-2024.0.1.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/utils/parallel.py +0 -0
  274. {scikit_learn_intelex-2024.0.1.dist-info → scikit_learn_intelex-2025.1.0.dist-info}/LICENSE.txt +0 -0
  275. {scikit_learn_intelex-2024.0.1.dist-info → scikit_learn_intelex-2025.1.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,734 @@
1
+ # ==============================================================================
2
+ # Copyright 2014 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 __future__ import print_function
18
+
19
+ import numpy as np
20
+ import sklearn.svm._base as svm_base
21
+ import sklearn.svm._classes as svm_classes
22
+ from scipy import sparse as sp
23
+ from sklearn.calibration import CalibratedClassifierCV
24
+ from sklearn.exceptions import NotFittedError
25
+ from sklearn.model_selection import StratifiedKFold
26
+ from sklearn.utils import check_random_state
27
+ from sklearn.utils.multiclass import _ovr_decision_function
28
+ from sklearn.utils.validation import (
29
+ _check_sample_weight,
30
+ _num_samples,
31
+ check_consistent_length,
32
+ check_is_fitted,
33
+ )
34
+
35
+ import daal4py
36
+
37
+ from .._utils import PatchingConditionsChain, getFPType, make2d
38
+
39
+
40
+ def _get_libsvm_impl():
41
+ return ["c_svc", "nu_svc", "one_class", "epsilon_svr", "nu_svr"]
42
+
43
+
44
+ def _dual_coef_getter(self):
45
+ return self._internal_dual_coef_
46
+
47
+
48
+ def _intercept_getter(self):
49
+ return self._internal_intercept_
50
+
51
+
52
+ def _dual_coef_setter(self, val):
53
+ self._internal_dual_coef_ = val
54
+ if hasattr(self, "daal_model_"):
55
+ del self.daal_model_
56
+ if getattr(self, "_daal_fit", False):
57
+ self._daal_fit = False
58
+
59
+
60
+ def _intercept_setter(self, val):
61
+ self._internal_intercept_ = val
62
+ if hasattr(self, "daal_model_"):
63
+ del self.daal_model_
64
+ if getattr(self, "_daal_fit", False):
65
+ self._daal_fit = False
66
+
67
+
68
+ # Methods to extract coefficients
69
+ def group_indices_by_class(num_classes, sv_ind_by_clf, labels):
70
+ sv_ind_counters = np.zeros(num_classes, dtype=np.intp)
71
+
72
+ num_of_sv_per_class = np.bincount(labels[np.hstack(sv_ind_by_clf)])
73
+ sv_ind_by_class = [np.empty(n, dtype=np.int32) for n in num_of_sv_per_class]
74
+
75
+ for indices_per_clf in sv_ind_by_clf:
76
+ for sv_index in indices_per_clf:
77
+ sv_label = labels[sv_index]
78
+ i = sv_ind_counters[sv_label]
79
+ sv_ind_by_class[sv_label][i] = sv_index
80
+ sv_ind_counters[sv_label] += 1
81
+
82
+ return sv_ind_by_class
83
+
84
+
85
+ def map_sv_to_columns_in_dual_coef_matrix(sv_ind_by_class):
86
+ from collections import defaultdict
87
+
88
+ sv_ind_mapping = defaultdict(lambda: -1)
89
+ p = 0
90
+ for indices_per_class in sv_ind_by_class:
91
+ indices_per_class.sort()
92
+ for sv_index in indices_per_class:
93
+ if sv_ind_mapping[sv_index] == -1:
94
+ sv_ind_mapping[sv_index] = p
95
+ p += 1
96
+ return sv_ind_mapping
97
+
98
+
99
+ def map_to_lexicographic(n):
100
+ """Returns permutation of reverse lexicographics to
101
+ lexicographics orders for pairs of n consecutive integer indexes
102
+ """
103
+ from itertools import combinations, count
104
+
105
+ two_class_order_gen = ((j, i) for i in range(n) for j in range(i))
106
+ reverse_lookup = {key: val for key, val in zip(two_class_order_gen, count(0))}
107
+ perm_iter = (reverse_lookup[pair] for pair in combinations(range(n), 2))
108
+ return np.fromiter(perm_iter, dtype=np.intp)
109
+
110
+
111
+ def permute_list(li, perm):
112
+ "Rearrange `li` according to `perm`"
113
+ return [li[i] for i in perm]
114
+
115
+
116
+ def extract_dual_coef(num_classes, sv_ind_by_clf, sv_coef_by_clf, labels):
117
+ """Construct dual coefficients array in SKLearn peculiar layout,
118
+ as well corresponding support vector indexes
119
+ """
120
+ sv_ind_by_class = group_indices_by_class(num_classes, sv_ind_by_clf, labels)
121
+ sv_ind_mapping = map_sv_to_columns_in_dual_coef_matrix(sv_ind_by_class)
122
+
123
+ num_unique_sv = len(sv_ind_mapping)
124
+ dc_dt = sv_coef_by_clf[0].dtype
125
+
126
+ dual_coef = np.zeros((num_classes - 1, num_unique_sv), dtype=dc_dt)
127
+ support_ = np.empty((num_unique_sv,), dtype=np.int32)
128
+
129
+ p = 0
130
+ for i in range(0, num_classes):
131
+ for j in range(i + 1, num_classes):
132
+ sv_ind_i_vs_j = sv_ind_by_clf[p]
133
+ sv_coef_i_vs_j = sv_coef_by_clf[p]
134
+ p += 1
135
+
136
+ for k, sv_index in enumerate(sv_ind_i_vs_j):
137
+ label = labels[sv_index]
138
+ col_index = sv_ind_mapping[sv_index]
139
+ if j == label:
140
+ row_index = i
141
+ else:
142
+ row_index = j - 1
143
+ dual_coef[row_index, col_index] = sv_coef_i_vs_j[k]
144
+ support_[col_index] = sv_index
145
+
146
+ return dual_coef, support_
147
+
148
+
149
+ def _daal4py_kf(kernel, X_fptype, gamma=1.0, is_sparse=False):
150
+ method = "fastCSR" if is_sparse else "defaultDense"
151
+ if kernel == "rbf":
152
+ sigma_value = np.sqrt(0.5 / gamma)
153
+ kf = daal4py.kernel_function_rbf(
154
+ fptype=X_fptype, method=method, sigma=sigma_value
155
+ )
156
+ elif kernel == "linear":
157
+ kf = daal4py.kernel_function_linear(fptype=X_fptype, method=method)
158
+ else:
159
+ raise ValueError(
160
+ "_daal4py_fit received unexpected kernel specifiction {}.".format(kernel)
161
+ )
162
+
163
+ return kf
164
+
165
+
166
+ def _daal4py_check_weight(self, X, y, sample_weight):
167
+ ww = None
168
+ if sample_weight.shape[0] > 0:
169
+ sample_weight = _check_sample_weight(sample_weight, X)
170
+ if np.all(sample_weight <= 0):
171
+ raise ValueError("Invalid input - all samples have zero or negative weights.")
172
+ if np.any(sample_weight <= 0):
173
+ if len(np.unique(y[sample_weight > 0])) != len(self.classes_):
174
+ raise ValueError(
175
+ "Invalid input - all samples with positive weights "
176
+ "have the same label."
177
+ )
178
+ ww = sample_weight
179
+ elif self.class_weight is not None:
180
+ ww = np.ones(X.shape[0], dtype=np.float64)
181
+ if self.class_weight is not None:
182
+ for i, v in enumerate(self.class_weight_):
183
+ ww[y == i] *= v
184
+ return ww
185
+
186
+
187
+ def _daal4py_svm(
188
+ fptype,
189
+ C,
190
+ accuracyThreshold,
191
+ tau,
192
+ maxIterations,
193
+ cacheSize,
194
+ doShrinking,
195
+ kernel,
196
+ nClasses=2,
197
+ ):
198
+ svm_train = daal4py.svm_training(
199
+ method="thunder",
200
+ fptype=fptype,
201
+ C=C,
202
+ accuracyThreshold=accuracyThreshold,
203
+ tau=tau,
204
+ maxIterations=maxIterations,
205
+ cacheSize=cacheSize,
206
+ doShrinking=doShrinking,
207
+ kernel=kernel,
208
+ )
209
+ if nClasses == 2:
210
+ algo = svm_train
211
+ else:
212
+ algo = daal4py.multi_class_classifier_training(
213
+ nClasses=nClasses,
214
+ fptype=fptype,
215
+ method="oneAgainstOne",
216
+ training=svm_train,
217
+ )
218
+
219
+ return algo
220
+
221
+
222
+ def _daal4py_fit(self, X, y_inp, sample_weight, kernel, is_sparse=False):
223
+ if self.C <= 0:
224
+ raise ValueError("C <= 0")
225
+ num_classes = len(self.classes_)
226
+
227
+ if sample_weight is not None:
228
+ sample_weight = make2d(sample_weight)
229
+
230
+ y = make2d(y_inp)
231
+ X_fptype = getFPType(X)
232
+ kf = _daal4py_kf(kernel, X_fptype, gamma=self._gamma, is_sparse=is_sparse)
233
+ algo = _daal4py_svm(
234
+ fptype=X_fptype,
235
+ C=float(self.C),
236
+ accuracyThreshold=float(self.tol),
237
+ tau=1e-12,
238
+ maxIterations=int(self.max_iter if self.max_iter > 0 else 2**30),
239
+ cacheSize=int(self.cache_size * 1024 * 1024),
240
+ doShrinking=bool(self.shrinking),
241
+ kernel=kf,
242
+ nClasses=num_classes,
243
+ )
244
+
245
+ res = algo.compute(data=X, labels=y, weights=sample_weight)
246
+
247
+ model = res.model
248
+ self.daal_model_ = model
249
+
250
+ if num_classes == 2:
251
+ # binary
252
+ two_class_sv_ind_ = model.SupportIndices
253
+ two_class_sv_ind_ = two_class_sv_ind_.ravel()
254
+
255
+ # support indexes need permutation to arrange them
256
+ # into the same layout as that of Scikit-Learn
257
+ tmp = np.empty(
258
+ two_class_sv_ind_.shape,
259
+ dtype=np.dtype([("label", y.dtype), ("ind", two_class_sv_ind_.dtype)]),
260
+ )
261
+ tmp["label"][:] = y[two_class_sv_ind_].ravel()
262
+ tmp["ind"][:] = two_class_sv_ind_
263
+ perm = np.argsort(tmp, order=["label", "ind"])
264
+ del tmp
265
+
266
+ self.support_ = two_class_sv_ind_[perm]
267
+ self.support_vectors_ = X[self.support_]
268
+
269
+ self.dual_coef_ = model.ClassificationCoefficients.T
270
+ if is_sparse:
271
+ self.dual_coef_ = sp.csr_matrix(self.dual_coef_)
272
+ self.dual_coef_ = self.dual_coef_[:, perm]
273
+ self.intercept_ = np.array([model.Bias])
274
+
275
+ else:
276
+ # multi-class
277
+ intercepts = []
278
+ coefs = []
279
+ sv_ind_by_clf = []
280
+ label_indexes = []
281
+
282
+ model_id = 0
283
+ for i1 in range(num_classes):
284
+ label_indexes.append(np.where(y == i1)[0])
285
+ for i2 in range(i1):
286
+ svm_model = model.TwoClassClassifierModel(model_id)
287
+
288
+ # Indices correspond to input features with label i1
289
+ # followed by input features with label i2
290
+ two_class_sv_ind_ = svm_model.SupportIndices
291
+ # Map these indexes to indexes of the training data
292
+ sv_ind = np.take(
293
+ np.hstack((label_indexes[i1], label_indexes[i2])),
294
+ two_class_sv_ind_.ravel(),
295
+ )
296
+ sv_ind_by_clf.append(sv_ind)
297
+
298
+ # svs_ = getArrayFromNumericTable(svm_model.getSupportVectors())
299
+ # assert np.array_equal(svs_, X[sv_ind])
300
+
301
+ intercepts.append(-svm_model.Bias)
302
+ coefs.append(-svm_model.ClassificationCoefficients)
303
+ model_id += 1
304
+
305
+ # permute solutions to lexicographic ordering
306
+ to_lex_perm = map_to_lexicographic(num_classes)
307
+ sv_ind_by_clf = permute_list(sv_ind_by_clf, to_lex_perm)
308
+ sv_coef_by_clf = permute_list(coefs, to_lex_perm)
309
+ intercepts = permute_list(intercepts, to_lex_perm)
310
+
311
+ self.dual_coef_, self.support_ = extract_dual_coef(
312
+ num_classes, # number of classes
313
+ sv_ind_by_clf, # support vector indexes by two-class classifiers
314
+ sv_coef_by_clf, # classification coefficients by two-class classifiers
315
+ y.squeeze().astype(np.intp, copy=False), # integer labels
316
+ )
317
+ if is_sparse:
318
+ self.dual_coef_ = sp.csr_matrix(self.dual_coef_)
319
+ self.support_vectors_ = X[self.support_]
320
+ self.intercept_ = np.array(intercepts)
321
+
322
+ indices = y.take(self.support_, axis=0)
323
+ self._n_support = np.array(
324
+ [np.sum(indices == i) for i, c in enumerate(self.classes_)], dtype=np.int32
325
+ )
326
+
327
+ self._probA = np.empty(0)
328
+ self._probB = np.empty(0)
329
+
330
+
331
+ def _compute_gamma(gamma, kernel, X):
332
+ """
333
+ Computes actual value of 'gamma' parameter of RBF kernel
334
+ corresponding to SVC keyword values `gamma` and `kernel`, and feature
335
+ matrix X, with sparsity `sparse`.
336
+
337
+ In 0.20 gamma='scale' used to mean compute 'gamma' based on
338
+ column-wise standard deviation, but in 0.20.3 it was changed
339
+ to use column-wise variance.
340
+
341
+ See: https://github.com/scikit-learn/scikit-learn/pull/13221
342
+ """
343
+ if gamma == "scale":
344
+ kernel_uses_gamma = not callable(kernel) and kernel not in (
345
+ "linear",
346
+ "precomputed",
347
+ )
348
+ if kernel_uses_gamma:
349
+ if sp.isspmatrix(X):
350
+ # var = E[X^2] - E[X]^2
351
+ X_sc = (X.multiply(X)).mean() - (X.mean()) ** 2
352
+ else:
353
+ X_sc = X.var()
354
+ else:
355
+ X_sc = 1.0 / X.shape[1]
356
+ if gamma == "scale":
357
+ if X_sc != 0:
358
+ _gamma = 1.0 / (X.shape[1] * X_sc)
359
+ else:
360
+ _gamma = 1.0
361
+ else:
362
+ _gamma = 1.0 / X.shape[1]
363
+ elif gamma == "auto":
364
+ _gamma = 1.0 / X.shape[1]
365
+ elif isinstance(gamma, str):
366
+ raise ValueError(
367
+ "When 'gamma' is a string, it should be either 'scale' or "
368
+ "'auto'. Got '{}' instead.".format(gamma)
369
+ )
370
+ else:
371
+ _gamma = gamma
372
+
373
+ return _gamma
374
+
375
+
376
+ def fit(self, X, y, sample_weight=None):
377
+ """Fit the SVM model according to the given training data.
378
+
379
+ Parameters
380
+ ----------
381
+ X : {array-like, sparse matrix}, shape (n_samples, n_features)
382
+ Training vectors, where n_samples is the number of samples
383
+ and n_features is the number of features.
384
+ For kernel="precomputed", the expected shape of X is
385
+ (n_samples, n_samples).
386
+
387
+ y : array-like, shape (n_samples,)
388
+ Target values (class labels in classification, real numbers in
389
+ regression)
390
+
391
+ sample_weight : array-like, shape (n_samples,)
392
+ Per-sample weights. Rescale C per sample. Higher weights
393
+ force the classifier to put more emphasis on these points.
394
+
395
+ Returns
396
+ -------
397
+ self : object
398
+
399
+ Notes
400
+ ------
401
+ If X and y are not C-ordered and contiguous arrays of np.float64 and
402
+ X is not a scipy.sparse.csr_matrix, X and/or y may be copied.
403
+
404
+ If X is a dense array, then the other methods will not support sparse
405
+ matrices as input.
406
+ """
407
+ rnd = check_random_state(self.random_state)
408
+
409
+ is_sparse = sp.isspmatrix(X)
410
+ if is_sparse and self.kernel == "precomputed":
411
+ raise TypeError("Sparse precomputed kernels are not supported.")
412
+ self._sparse = is_sparse and not callable(self.kernel)
413
+
414
+ if hasattr(self, "decision_function_shape"):
415
+ if self.decision_function_shape not in ("ovr", "ovo"):
416
+ raise ValueError(
417
+ f"decision_function_shape must be either 'ovr' or 'ovo', "
418
+ f"got {self.decision_function_shape}."
419
+ )
420
+
421
+ if callable(self.kernel):
422
+ check_consistent_length(X, y)
423
+ else:
424
+ X, y = self._validate_data(
425
+ X,
426
+ y,
427
+ dtype=np.float64,
428
+ order="C",
429
+ accept_sparse="csr",
430
+ accept_large_sparse=False,
431
+ )
432
+ y = self._validate_targets(y)
433
+
434
+ sample_weight = np.asarray(
435
+ [] if sample_weight is None else sample_weight, dtype=np.float64
436
+ )
437
+ solver_type = _get_libsvm_impl().index(self._impl)
438
+
439
+ # input validation
440
+ n_samples = _num_samples(X)
441
+ if solver_type != 2 and n_samples != y.shape[0]:
442
+ raise ValueError(
443
+ "X and y have incompatible shapes.\n"
444
+ "X has %s samples, but y has %s." % (n_samples, y.shape[0])
445
+ )
446
+
447
+ if self.kernel == "precomputed" and n_samples != X.shape[1]:
448
+ raise ValueError("X.shape[0] should be equal to X.shape[1]")
449
+
450
+ if sample_weight.shape[0] > 0 and sample_weight.shape[0] != n_samples:
451
+ raise ValueError(
452
+ "sample_weight and X have incompatible shapes: "
453
+ "%r vs %r\n"
454
+ "Note: Sparse matrices cannot be indexed w/"
455
+ "boolean masks (use `indices=True` in CV)." % (sample_weight.shape, X.shape)
456
+ )
457
+
458
+ kernel = "precomputed" if callable(self.kernel) else self.kernel
459
+ if kernel == "precomputed":
460
+ self._gamma = 0.0
461
+ else:
462
+ self._gamma = _compute_gamma(self.gamma, kernel, X)
463
+
464
+ fit = self._sparse_fit if self._sparse else self._dense_fit
465
+ if self.verbose: # pragma: no cover
466
+ print("[LibSVM]", end="")
467
+
468
+ # see comment on the other call to np.iinfo in this file
469
+ seed = rnd.randint(np.iinfo("i").max)
470
+
471
+ _patching_status = PatchingConditionsChain("sklearn.svm.SVC.fit")
472
+ _dal_ready = _patching_status.and_conditions(
473
+ [
474
+ (
475
+ kernel in ["linear", "rbf"],
476
+ f"'{kernel}' kernel is not supported. "
477
+ "Only 'linear' and 'rbf' kernels are supported.",
478
+ )
479
+ ]
480
+ )
481
+ _patching_status.write_log()
482
+ if _dal_ready:
483
+ sample_weight = _daal4py_check_weight(self, X, y, sample_weight)
484
+
485
+ self._daal_fit = True
486
+ _daal4py_fit(self, X, y, sample_weight, kernel, is_sparse=is_sparse)
487
+ self.fit_status_ = 0
488
+
489
+ if self.probability:
490
+ params = self.get_params()
491
+ params["probability"] = False
492
+ params["decision_function_shape"] = "ovr"
493
+ clf_base = SVC(**params)
494
+ try:
495
+ n_splits = 5
496
+ cv = StratifiedKFold(
497
+ n_splits=n_splits, shuffle=True, random_state=self.random_state
498
+ )
499
+ self.clf_prob = CalibratedClassifierCV(
500
+ clf_base, ensemble=False, cv=cv, method="sigmoid", n_jobs=n_splits
501
+ )
502
+
503
+ self.clf_prob.fit(X, y, sample_weight)
504
+ except ValueError:
505
+ clf_base = clf_base.fit(X, y, sample_weight)
506
+ self.clf_prob = CalibratedClassifierCV(
507
+ clf_base, cv="prefit", method="sigmoid"
508
+ )
509
+ self.clf_prob.fit(X, y, sample_weight)
510
+ else:
511
+ self._daal_fit = False
512
+ fit(X, y, sample_weight, solver_type, kernel, random_seed=seed)
513
+
514
+ self.shape_fit_ = X.shape if hasattr(X, "shape") else (n_samples,)
515
+
516
+ # In binary case, we need to flip the sign of coef, intercept and
517
+ # decision function. Use self._intercept_ and self._dual_coef_ internally.
518
+ if not getattr(self, "_daal_fit", False):
519
+ self._internal_intercept_ = self.intercept_.copy()
520
+ self._internal_dual_coef_ = self.dual_coef_.copy()
521
+ else:
522
+ self._internal_intercept_ = self.intercept_.copy()
523
+ self._internal_dual_coef_ = self.dual_coef_.copy()
524
+ if len(self.classes_) == 2:
525
+ self._internal_dual_coef_ *= -1
526
+ self._internal_intercept_ *= -1
527
+
528
+ if (
529
+ not getattr(self, "_daal_fit", False)
530
+ and len(self.classes_) == 2
531
+ and self._impl in ["c_svc", "nu_svc"]
532
+ ):
533
+ self.intercept_ *= -1
534
+ self.dual_coef_ *= -1
535
+
536
+ return self
537
+
538
+
539
+ def _daal4py_predict(self, X, is_decision_function=False):
540
+ X_fptype = getFPType(X)
541
+ num_classes = len(self.classes_)
542
+
543
+ kf = _daal4py_kf(self.kernel, X_fptype, gamma=self._gamma, is_sparse=sp.isspmatrix(X))
544
+
545
+ svm_predict = daal4py.svm_prediction(
546
+ fptype=X_fptype, method="defaultDense", kernel=kf
547
+ )
548
+ if num_classes == 2:
549
+ alg = svm_predict
550
+ else:
551
+ result_to_compute = (
552
+ "computeDecisionFunction" if is_decision_function else "computeClassLabels"
553
+ )
554
+ alg = daal4py.multi_class_classifier_prediction(
555
+ nClasses=num_classes,
556
+ fptype=X_fptype,
557
+ pmethod="voteBased",
558
+ tmethod="oneAgainstOne",
559
+ resultsToEvaluate=result_to_compute,
560
+ prediction=svm_predict,
561
+ )
562
+
563
+ predictionRes = alg.compute(X, self.daal_model_)
564
+ if not is_decision_function or num_classes == 2:
565
+ res = predictionRes.prediction
566
+ res = res.ravel()
567
+ else:
568
+ res = -predictionRes.decisionFunction
569
+
570
+ if num_classes == 2 and not is_decision_function:
571
+ # Convert from Intel(R) oneAPI Data Analytics Library format back to
572
+ # original classes
573
+ np.greater(res, 0, out=res)
574
+
575
+ return res
576
+
577
+
578
+ def predict(self, X):
579
+ check_is_fitted(self)
580
+
581
+ _break_ties = getattr(self, "break_ties", False)
582
+ if _break_ties and self.decision_function_shape == "ovo":
583
+ raise ValueError(
584
+ "break_ties must be False when " "decision_function_shape is 'ovo'"
585
+ )
586
+
587
+ _patching_status = PatchingConditionsChain("sklearn.svm.SVC.predict")
588
+ _dal_ready = _patching_status.and_conditions(
589
+ [
590
+ (not _break_ties, "Breaking ties is not supported."),
591
+ (
592
+ self.decision_function_shape != "ovr",
593
+ "'ovr' decision function shape is not supported.",
594
+ ),
595
+ (len(self.classes_) <= 2, "Number of classes > 2."),
596
+ ],
597
+ conditions_merging=any,
598
+ )
599
+ _patching_status.write_log()
600
+ if not _dal_ready:
601
+ y = np.argmax(self.decision_function(X), axis=1)
602
+ else:
603
+ X = self._validate_for_predict(X)
604
+ _dal_ready = _patching_status.and_conditions(
605
+ [
606
+ (
607
+ getattr(self, "_daal_fit", False) and hasattr(self, "daal_model_"),
608
+ "oneDAL model was not trained.",
609
+ )
610
+ ]
611
+ )
612
+ if _dal_ready:
613
+ if self.probability and self.clf_prob is not None:
614
+ y = self.clf_prob.predict(X)
615
+ else:
616
+ y = _daal4py_predict(self, X)
617
+ else:
618
+ predict_func = self._sparse_predict if self._sparse else self._dense_predict
619
+ y = predict_func(X)
620
+
621
+ return self.classes_.take(np.asarray(y, dtype=np.intp))
622
+
623
+
624
+ def _daal4py_predict_proba(self, X):
625
+ X = self._validate_for_predict(X)
626
+
627
+ if getattr(self, "clf_prob", None) is None:
628
+ raise NotFittedError(
629
+ "predict_proba is not available when fitted with probability=False"
630
+ )
631
+ prob = self.clf_prob.predict_proba(X)
632
+ return prob
633
+
634
+
635
+ @property
636
+ def predict_proba(self):
637
+ self._check_proba()
638
+ _patching_status = PatchingConditionsChain("sklearn.svm.SVC.predict_proba")
639
+ _dal_ready = _patching_status.and_conditions(
640
+ [(getattr(self, "_daal_fit", False), "oneDAL model was not trained.")]
641
+ )
642
+ _patching_status.write_log()
643
+ if _dal_ready:
644
+ algo = self._daal4py_predict_proba
645
+ else:
646
+ algo = self._predict_proba
647
+ return algo
648
+
649
+
650
+ def decision_function(self, X):
651
+ _patching_status = PatchingConditionsChain("sklearn.svm.SVC.decision_function")
652
+ _dal_ready = _patching_status.and_conditions(
653
+ [(getattr(self, "_daal_fit", False), "oneDAL model was not trained.")]
654
+ )
655
+ _patching_status.write_log()
656
+ if _dal_ready:
657
+ X = self._validate_for_predict(X)
658
+ dec = _daal4py_predict(self, X, is_decision_function=True)
659
+ else:
660
+ dec = self._decision_function(X)
661
+ if self.decision_function_shape == "ovr" and len(self.classes_) > 2:
662
+ return _ovr_decision_function(dec < 0, -dec, len(self.classes_))
663
+ return dec
664
+
665
+
666
+ __base_svc_init_arg_names__ = []
667
+
668
+ __base_svc_init_function__ = svm_base.BaseSVC.__init__
669
+ __base_svc_init_function_code__ = __base_svc_init_function__.__code__
670
+
671
+ try:
672
+ # retrieve tuple of code argument names to check whether
673
+ # new in 0.22 keyword 'break_ties' is in it
674
+ __base_svc_init_arg_names__ = __base_svc_init_function_code__.co_varnames
675
+ except AttributeError:
676
+ pass
677
+
678
+ del __base_svc_init_function__
679
+ del __base_svc_init_function_code__
680
+
681
+
682
+ class SVC(svm_base.BaseSVC):
683
+ _impl = "c_svc"
684
+
685
+ def __init__(
686
+ self,
687
+ C=1.0,
688
+ kernel="rbf",
689
+ degree=3,
690
+ gamma="scale",
691
+ coef0=0.0,
692
+ shrinking=True,
693
+ probability=False,
694
+ tol=1e-3,
695
+ cache_size=200,
696
+ class_weight=None,
697
+ verbose=False,
698
+ max_iter=-1,
699
+ decision_function_shape="ovr",
700
+ break_ties=False,
701
+ random_state=None,
702
+ ):
703
+ super(SVC, self).__init__(
704
+ kernel=kernel,
705
+ degree=degree,
706
+ gamma=gamma,
707
+ coef0=coef0,
708
+ tol=tol,
709
+ C=C,
710
+ nu=0.0,
711
+ shrinking=shrinking,
712
+ probability=probability,
713
+ cache_size=cache_size,
714
+ class_weight=class_weight,
715
+ verbose=verbose,
716
+ max_iter=max_iter,
717
+ decision_function_shape=decision_function_shape,
718
+ break_ties=break_ties,
719
+ random_state=random_state,
720
+ )
721
+
722
+
723
+ SVC.fit = fit
724
+ SVC.predict = predict
725
+ SVC.predict_proba = predict_proba
726
+ SVC.decision_function = decision_function
727
+ SVC._daal4py_predict_proba = _daal4py_predict_proba
728
+ SVC._dual_coef_ = property(_dual_coef_getter, _dual_coef_setter)
729
+ SVC._intercept_ = property(_intercept_getter, _intercept_setter)
730
+ SVC.__doc__ = svm_classes.SVC.__doc__
731
+ SVC.fit.__doc__ = fit.__doc__
732
+ SVC.predict.__doc__ = predict.__doc__
733
+ SVC.predict_proba.__doc__ = predict_proba.__doc__
734
+ SVC.decision_function.__doc__ = decision_function.__doc__