scikit-learn-intelex 2024.2.0__py39-none-win_amd64.whl → 2025.1.0__py39-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.cp39-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.cp39-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-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/cluster/__init__.py +20 -0
  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.2.0.data/data/Lib/site-packages/sklearnex/spmd → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn}/decomposition/__init__.py +2 -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.2.0.data/data/Lib/site-packages/sklearnex → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn}/linear_model/__init__.py +29 -28
  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-2024.2.0.data/data/Lib/site-packages/sklearnex/basic_statistics/basic_statistics.py → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/coordinate_descent.py +2 -2
  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.2.0.data/data/Lib/site-packages/sklearnex/preview/cluster → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/manifold}/__init__.py +3 -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-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/model_selection/__init__.py +19 -0
  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.2.0.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.2.0.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 -56
  46. {scikit_learn_intelex-2024.2.0.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.2.0.data/data/Lib/site-packages/sklearnex/spmd/covariance → 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.cp39-win_amd64.pyd +0 -0
  63. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/_onedal_py_host.cp39-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.2.0.data/data/Lib/site-packages/sklearnex/basic_statistics → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/decomposition}/__init__.py +3 -2
  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.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/__init__.py +10 -7
  130. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/_config.py +22 -16
  131. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/_device_offload.py +126 -0
  132. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/_utils.py +27 -4
  133. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/basic_statistics/__init__.py +20 -0
  134. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/basic_statistics/basic_statistics.py +230 -0
  135. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/basic_statistics/incremental_basic_statistics.py +345 -0
  136. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/basic_statistics/tests/test_basic_statistics.py +270 -0
  137. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/basic_statistics/tests/test_incremental_basic_statistics.py +404 -0
  138. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/cluster/__init__.py +1 -1
  139. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/cluster/dbscan.py +16 -7
  140. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/cluster/k_means.py +395 -0
  141. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/cluster/tests/test_dbscan.py +8 -6
  142. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/cluster/tests/test_kmeans.py +159 -0
  143. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/conftest.py +82 -0
  144. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/covariance/incremental_covariance.py +398 -0
  145. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/covariance/tests/test_incremental_covariance.py +111 -17
  146. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/decomposition/pca.py +425 -0
  147. scikit_learn_intelex-2024.2.0.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 +25 -9
  148. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/dispatcher.py +222 -42
  149. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/ensemble/_forest.py +249 -182
  150. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/ensemble/tests/test_forest.py +39 -21
  151. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/glob/dispatcher.py +16 -2
  152. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/linear_model/__init__.py +32 -0
  153. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/linear_model/coordinate_descent.py +13 -0
  154. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/linear_model/incremental_linear.py +482 -0
  155. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/linear_model/incremental_ridge.py +425 -0
  156. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/linear_model/linear.py +341 -0
  157. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/linear_model/logistic_regression.py +182 -102
  158. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/linear_model/ridge.py +7 -0
  159. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_incremental_linear.py +207 -0
  160. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_incremental_ridge.py +153 -0
  161. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_linear.py +167 -0
  162. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/linear_model/tests/test_logreg.py +45 -4
  163. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/manifold/t_sne.py +4 -0
  164. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/metrics/pairwise.py +5 -0
  165. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/metrics/ranking.py +3 -0
  166. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/model_selection/split.py +5 -0
  167. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/neighbors/_lof.py +97 -28
  168. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/neighbors/common.py +53 -6
  169. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/neighbors/knn_classification.py +48 -149
  170. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/neighbors/knn_regression.py +43 -144
  171. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/neighbors/knn_unsupervised.py +50 -93
  172. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/neighbors/tests/test_neighbors.py +6 -9
  173. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/preview/__init__.py +1 -1
  174. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/preview/covariance/covariance.py +24 -18
  175. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/preview/covariance/tests/test_covariance.py +18 -5
  176. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/preview/decomposition/__init__.py +19 -0
  177. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/preview/decomposition/incremental_pca.py +233 -0
  178. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/preview/decomposition/tests/test_incremental_pca.py +266 -0
  179. {scikit_learn_intelex-2024.2.0.data/data/Lib/site-packages/sklearnex/preview/decomposition → scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/preview/linear_model}/__init__.py +19 -19
  180. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/preview/linear_model/ridge.py +424 -0
  181. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/preview/linear_model/tests/test_ridge.py +102 -0
  182. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/__init__.py +20 -0
  183. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/incremental_basic_statistics.py +30 -0
  184. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/tests/test_basic_statistics_spmd.py +107 -0
  185. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/tests/test_incremental_basic_statistics_spmd.py +307 -0
  186. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/cluster/tests/test_dbscan_spmd.py +97 -0
  187. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/cluster/tests/test_kmeans_spmd.py +172 -0
  188. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/__init__.py +20 -0
  189. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/incremental_covariance.py +37 -0
  190. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/tests/test_covariance_spmd.py +107 -0
  191. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/tests/test_incremental_covariance_spmd.py +184 -0
  192. {scikit_learn_intelex-2024.2.0.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
  193. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/decomposition/incremental_pca.py +30 -0
  194. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/decomposition/tests/test_incremental_pca_spmd.py +269 -0
  195. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/decomposition/tests/test_pca_spmd.py +128 -0
  196. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/ensemble/forest.py +4 -12
  197. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/ensemble/tests/test_forest_spmd.py +265 -0
  198. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/linear_model/__init__.py +2 -1
  199. scikit_learn_intelex-2024.2.0.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
  200. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/tests/test_incremental_linear_spmd.py +329 -0
  201. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/tests/test_linear_regression_spmd.py +145 -0
  202. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/tests/test_logistic_regression_spmd.py +162 -0
  203. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/neighbors/tests/test_neighbors_spmd.py +288 -0
  204. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/svm/_common.py +339 -0
  205. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/svm/nusvc.py +168 -73
  206. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/svm/nusvr.py +71 -66
  207. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/svm/svc.py +166 -72
  208. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/svm/svr.py +64 -63
  209. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/svm/tests/test_svm.py +12 -20
  210. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/test_common.py +390 -0
  211. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/test_config.py +123 -0
  212. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/test_memory_usage.py +379 -0
  213. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/test_monkeypatch.py +276 -0
  214. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/test_n_jobs_support.py +108 -0
  215. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/tests/test_parallel.py +6 -8
  216. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/test_patching.py +385 -0
  217. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/test_run_to_run_stability.py +321 -0
  218. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/utils/__init__.py +44 -0
  219. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/utils/base.py +371 -0
  220. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/utils/spmd.py +198 -0
  221. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/utils/_array_api.py +82 -0
  222. scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/utils/tests/test_finite.py +89 -0
  223. {scikit_learn_intelex-2024.2.0.dist-info → scikit_learn_intelex-2025.1.0.dist-info}/METADATA +231 -230
  224. scikit_learn_intelex-2025.1.0.dist-info/RECORD +257 -0
  225. {scikit_learn_intelex-2024.2.0.dist-info → scikit_learn_intelex-2025.1.0.dist-info}/WHEEL +1 -1
  226. scikit_learn_intelex-2024.2.0.data/data/Lib/site-packages/sklearnex/_device_offload.py +0 -223
  227. scikit_learn_intelex-2024.2.0.data/data/Lib/site-packages/sklearnex/cluster/k_means.py +0 -17
  228. scikit_learn_intelex-2024.2.0.data/data/Lib/site-packages/sklearnex/cluster/tests/test_kmeans.py +0 -30
  229. scikit_learn_intelex-2024.2.0.data/data/Lib/site-packages/sklearnex/covariance/incremental_covariance.py +0 -130
  230. scikit_learn_intelex-2024.2.0.data/data/Lib/site-packages/sklearnex/decomposition/pca.py +0 -17
  231. scikit_learn_intelex-2024.2.0.data/data/Lib/site-packages/sklearnex/decomposition/tests/test_pca.py +0 -27
  232. scikit_learn_intelex-2024.2.0.data/data/Lib/site-packages/sklearnex/linear_model/linear.py +0 -381
  233. scikit_learn_intelex-2024.2.0.data/data/Lib/site-packages/sklearnex/linear_model/logistic_path.py +0 -17
  234. scikit_learn_intelex-2024.2.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_linear.py +0 -82
  235. scikit_learn_intelex-2024.2.0.data/data/Lib/site-packages/sklearnex/preview/cluster/_common.py +0 -84
  236. scikit_learn_intelex-2024.2.0.data/data/Lib/site-packages/sklearnex/preview/cluster/k_means.py +0 -371
  237. scikit_learn_intelex-2024.2.0.data/data/Lib/site-packages/sklearnex/preview/decomposition/pca.py +0 -374
  238. scikit_learn_intelex-2024.2.0.data/data/Lib/site-packages/sklearnex/svm/_common.py +0 -188
  239. scikit_learn_intelex-2024.2.0.data/data/Lib/site-packages/sklearnex/tests/test_memory_usage.py +0 -222
  240. scikit_learn_intelex-2024.2.0.data/data/Lib/site-packages/sklearnex/tests/test_monkeypatch.py +0 -240
  241. scikit_learn_intelex-2024.2.0.data/data/Lib/site-packages/sklearnex/tests/test_n_jobs_support.py +0 -93
  242. scikit_learn_intelex-2024.2.0.data/data/Lib/site-packages/sklearnex/tests/test_run_to_run_stability_tests.py +0 -428
  243. scikit_learn_intelex-2024.2.0.dist-info/RECORD +0 -101
  244. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/__main__.py +0 -0
  245. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/covariance/__init__.py +0 -0
  246. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/decomposition/__init__.py +0 -0
  247. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/doc/third-party-programs.txt +0 -0
  248. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/ensemble/__init__.py +0 -0
  249. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/glob/__main__.py +0 -0
  250. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/manifold/__init__.py +0 -0
  251. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/manifold/tests/test_tsne.py +0 -0
  252. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/metrics/__init__.py +0 -0
  253. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/metrics/tests/test_metrics.py +0 -0
  254. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/model_selection/__init__.py +0 -0
  255. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/model_selection/tests/test_model_selection.py +0 -0
  256. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/neighbors/__init__.py +0 -0
  257. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/preview/covariance/__init__.py +0 -0
  258. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/__init__.py +0 -0
  259. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/basic_statistics/basic_statistics.py +0 -0
  260. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/cluster/__init__.py +0 -0
  261. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/cluster/dbscan.py +0 -0
  262. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/cluster/kmeans.py +0 -0
  263. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/covariance/covariance.py +0 -0
  264. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/decomposition/pca.py +0 -0
  265. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/ensemble/__init__.py +0 -0
  266. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/linear_model/linear_model.py +0 -0
  267. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/linear_model/logistic_regression.py +0 -0
  268. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/neighbors/__init__.py +0 -0
  269. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/neighbors/neighbors.py +0 -0
  270. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/svm/__init__.py +0 -0
  271. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/utils/__init__.py +0 -0
  272. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/utils/parallel.py +0 -0
  273. {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/utils/validation.py +0 -0
  274. {scikit_learn_intelex-2024.2.0.dist-info → scikit_learn_intelex-2025.1.0.dist-info}/LICENSE.txt +0 -0
  275. {scikit_learn_intelex-2024.2.0.dist-info → scikit_learn_intelex-2025.1.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,153 @@
1
+ # ===============================================================================
2
+ # Copyright 2024 Intel Corporation
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ # ===============================================================================
16
+
17
+ from daal4py.sklearn._utils import daal_check_version
18
+
19
+ if daal_check_version((2024, "P", 600)):
20
+ import numpy as np
21
+ import pytest
22
+ from numpy.testing import assert_allclose
23
+ from sklearn.exceptions import NotFittedError
24
+
25
+ from onedal.tests.utils._dataframes_support import (
26
+ _as_numpy,
27
+ _convert_to_dataframe,
28
+ get_dataframes_and_queues,
29
+ )
30
+ from sklearnex.linear_model import IncrementalRidge
31
+
32
+ def _compute_ridge_coefficients(X, y, alpha, fit_intercept):
33
+ coefficients_manual, intercept_manual = None, None
34
+ if fit_intercept:
35
+ X_mean = np.mean(X, axis=0)
36
+ y_mean = np.mean(y)
37
+ X_centered = X - X_mean
38
+ y_centered = y - y_mean
39
+
40
+ X_with_intercept = np.hstack([np.ones((X.shape[0], 1)), X_centered])
41
+ lambda_identity = alpha * np.eye(X_with_intercept.shape[1])
42
+ inverse_term = np.linalg.inv(
43
+ np.dot(X_with_intercept.T, X_with_intercept) + lambda_identity
44
+ )
45
+ xt_y = np.dot(X_with_intercept.T, y_centered)
46
+ coefficients_manual = np.dot(inverse_term, xt_y)
47
+
48
+ intercept_manual = y_mean - np.dot(X_mean, coefficients_manual[1:])
49
+ coefficients_manual = coefficients_manual[1:]
50
+ else:
51
+ lambda_identity = alpha * np.eye(X.shape[1])
52
+ inverse_term = np.linalg.inv(np.dot(X.T, X) + lambda_identity)
53
+ xt_y = np.dot(X.T, y)
54
+ coefficients_manual = np.dot(inverse_term, xt_y)
55
+
56
+ return coefficients_manual, intercept_manual
57
+
58
+ @pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
59
+ @pytest.mark.parametrize("batch_size", [10, 100, 1000])
60
+ @pytest.mark.parametrize("alpha", [0.1, 0.5, 1.0])
61
+ @pytest.mark.parametrize("fit_intercept", [True, False])
62
+ def test_inc_ridge_fit_coefficients(
63
+ dataframe, queue, alpha, batch_size, fit_intercept
64
+ ):
65
+ sample_size, feature_size = 1000, 50
66
+ X = np.random.rand(sample_size, feature_size)
67
+ y = np.random.rand(sample_size)
68
+ X_c = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
69
+ y_c = _convert_to_dataframe(y, sycl_queue=queue, target_df=dataframe)
70
+
71
+ inc_ridge = IncrementalRidge(
72
+ fit_intercept=fit_intercept, alpha=alpha, batch_size=batch_size
73
+ )
74
+ inc_ridge.fit(X_c, y_c)
75
+
76
+ coefficients_manual, intercept_manual = _compute_ridge_coefficients(
77
+ X, y, alpha, fit_intercept
78
+ )
79
+ if fit_intercept:
80
+ assert_allclose(inc_ridge.intercept_, intercept_manual, rtol=1e-6, atol=1e-6)
81
+
82
+ assert_allclose(inc_ridge.coef_, coefficients_manual, rtol=1e-6, atol=1e-6)
83
+
84
+ @pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
85
+ @pytest.mark.parametrize("batch_size", [2, 5])
86
+ @pytest.mark.parametrize("alpha", [0.1, 0.5, 1.0])
87
+ def test_inc_ridge_partial_fit_coefficients(dataframe, queue, alpha, batch_size):
88
+ sample_size, feature_size = 1000, 50
89
+ X = np.random.rand(sample_size, feature_size)
90
+ y = np.random.rand(sample_size)
91
+ X_split = np.array_split(X, batch_size)
92
+ y_split = np.array_split(y, batch_size)
93
+
94
+ inc_ridge = IncrementalRidge(fit_intercept=False, alpha=alpha)
95
+
96
+ for batch_index in range(len(X_split)):
97
+ X_c = _convert_to_dataframe(
98
+ X_split[batch_index], sycl_queue=queue, target_df=dataframe
99
+ )
100
+ y_c = _convert_to_dataframe(
101
+ y_split[batch_index], sycl_queue=queue, target_df=dataframe
102
+ )
103
+ inc_ridge.partial_fit(X_c, y_c)
104
+
105
+ lambda_identity = alpha * np.eye(X.shape[1])
106
+ inverse_term = np.linalg.inv(np.dot(X.T, X) + lambda_identity)
107
+ xt_y = np.dot(X.T, y)
108
+ coefficients_manual = np.dot(inverse_term, xt_y)
109
+
110
+ assert_allclose(inc_ridge.coef_, coefficients_manual, rtol=1e-6, atol=1e-6)
111
+
112
+ def test_inc_ridge_score_before_fit():
113
+ X = np.array([[1, 1], [1, 2], [2, 2], [2, 3]])
114
+ y = np.dot(X, np.array([1, 2])) + 3
115
+ inc_ridge = IncrementalRidge(alpha=0.5)
116
+ with pytest.raises(NotFittedError):
117
+ inc_ridge.score(X, y)
118
+
119
+ def test_inc_ridge_predict_before_fit():
120
+ X = np.array([[1, 1], [1, 2], [2, 2], [2, 3]])
121
+ inc_ridge = IncrementalRidge(alpha=0.5)
122
+ with pytest.raises(NotFittedError):
123
+ inc_ridge.predict(X)
124
+
125
+ def test_inc_ridge_score_after_fit():
126
+ X = np.array([[1, 1], [1, 2], [2, 2], [2, 3]])
127
+ y = np.dot(X, np.array([1, 2])) + 3
128
+ inc_ridge = IncrementalRidge(alpha=0.5)
129
+ inc_ridge.fit(X, y)
130
+ assert inc_ridge.score(X, y) >= 0.97
131
+
132
+ @pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
133
+ @pytest.mark.parametrize("fit_intercept", [True, False])
134
+ def test_inc_ridge_predict_after_fit(dataframe, queue, fit_intercept):
135
+ sample_size, feature_size = 1000, 50
136
+ X = np.random.rand(sample_size, feature_size)
137
+ y = np.random.rand(sample_size)
138
+ X_c = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
139
+ y_c = _convert_to_dataframe(y, sycl_queue=queue, target_df=dataframe)
140
+
141
+ inc_ridge = IncrementalRidge(fit_intercept=fit_intercept, alpha=0.5)
142
+ inc_ridge.fit(X_c, y_c)
143
+
144
+ y_pred = inc_ridge.predict(X_c)
145
+
146
+ coefficients_manual, intercept_manual = _compute_ridge_coefficients(
147
+ X, y, 0.5, fit_intercept
148
+ )
149
+ y_pred_manual = np.dot(X, coefficients_manual)
150
+ if fit_intercept:
151
+ y_pred_manual += intercept_manual
152
+
153
+ assert_allclose(_as_numpy(y_pred), y_pred_manual, rtol=1e-6, atol=1e-6)
@@ -0,0 +1,167 @@
1
+ # ===============================================================================
2
+ # Copyright 2021 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
+ import pytest
19
+ from numpy.testing import assert_allclose
20
+ from scipy.linalg import lstsq
21
+ from sklearn.datasets import make_regression
22
+
23
+ from daal4py.sklearn._utils import daal_check_version
24
+ from daal4py.sklearn.linear_model.tests.test_ridge import (
25
+ _test_multivariate_ridge_alpha_shape,
26
+ _test_multivariate_ridge_coefficients,
27
+ )
28
+ from onedal.tests.utils._dataframes_support import (
29
+ _as_numpy,
30
+ _convert_to_dataframe,
31
+ get_dataframes_and_queues,
32
+ )
33
+ from sklearnex.tests.utils import _IS_INTEL
34
+
35
+
36
+ @pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
37
+ @pytest.mark.parametrize("dtype", [np.float32, np.float64])
38
+ @pytest.mark.parametrize("macro_block", [None, 1024])
39
+ @pytest.mark.parametrize("overdetermined", [False, True])
40
+ @pytest.mark.parametrize("multi_output", [False, True])
41
+ def test_sklearnex_import_linear(
42
+ dataframe, queue, dtype, macro_block, overdetermined, multi_output
43
+ ):
44
+ if (overdetermined or multi_output) and not daal_check_version((2025, "P", 1)):
45
+ pytest.skip()
46
+ if overdetermined and queue and queue.sycl_device.is_gpu:
47
+ pytest.skip()
48
+
49
+ from sklearnex.linear_model import LinearRegression
50
+
51
+ rng = np.random.default_rng(seed=123)
52
+ X = rng.standard_normal(size=(10, 20) if overdetermined else (20, 5))
53
+ y = rng.standard_normal(size=(X.shape[0], 3) if multi_output else X.shape[0])
54
+
55
+ Xi = np.c_[X, np.ones((X.shape[0], 1))]
56
+ expected_coefs = lstsq(Xi, y)[0]
57
+ expected_intercept = expected_coefs[-1]
58
+ expected_coefs = expected_coefs[: X.shape[1]]
59
+ if multi_output:
60
+ expected_coefs = expected_coefs.T
61
+
62
+ linreg = LinearRegression()
63
+ if daal_check_version((2024, "P", 0)) and macro_block is not None:
64
+ hparams = linreg.get_hyperparameters("fit")
65
+ hparams.cpu_macro_block = macro_block
66
+ hparams.gpu_macro_block = macro_block
67
+
68
+ X = X.astype(dtype=dtype)
69
+ y = y.astype(dtype=dtype)
70
+ y_list = y.tolist()
71
+ X = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
72
+ y = _convert_to_dataframe(y, sycl_queue=queue, target_df=dataframe)
73
+ linreg.fit(X, y)
74
+
75
+ assert hasattr(linreg, "_onedal_estimator")
76
+ assert "sklearnex" in linreg.__module__
77
+
78
+ rtol = 1e-3 if dtype == np.float32 else 1e-5
79
+ assert_allclose(_as_numpy(linreg.coef_), expected_coefs, rtol=rtol)
80
+ assert_allclose(_as_numpy(linreg.intercept_), expected_intercept, rtol=rtol)
81
+
82
+ # check that it also works with lists
83
+ if isinstance(X, np.ndarray):
84
+ linreg_list = LinearRegression().fit(X, y_list)
85
+ assert_allclose(linreg_list.coef_, linreg.coef_)
86
+ assert_allclose(linreg_list.intercept_, linreg.intercept_)
87
+
88
+
89
+ @pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
90
+ def test_sklearnex_import_ridge(dataframe, queue):
91
+ from sklearnex.linear_model import Ridge
92
+
93
+ X = np.array([[1, 1], [1, 2], [2, 2], [2, 3]])
94
+ y = np.dot(X, np.array([1, 2])) + 3
95
+ X = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
96
+ y = _convert_to_dataframe(y, sycl_queue=queue, target_df=dataframe)
97
+ ridgereg = Ridge().fit(X, y)
98
+ assert "daal4py" in ridgereg.__module__
99
+ assert_allclose(ridgereg.intercept_, 4.5)
100
+ assert_allclose(ridgereg.coef_, [0.8, 1.4])
101
+
102
+
103
+ @pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
104
+ def test_sklearnex_import_lasso(dataframe, queue):
105
+ from sklearnex.linear_model import Lasso
106
+
107
+ X = [[0, 0], [1, 1], [2, 2]]
108
+ y = [0, 1, 2]
109
+ X = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
110
+ y = _convert_to_dataframe(y, sycl_queue=queue, target_df=dataframe)
111
+ lasso = Lasso(alpha=0.1).fit(X, y)
112
+ assert "daal4py" in lasso.__module__
113
+ assert_allclose(lasso.intercept_, 0.15)
114
+ assert_allclose(lasso.coef_, [0.85, 0.0])
115
+
116
+
117
+ @pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
118
+ def test_sklearnex_import_elastic(dataframe, queue):
119
+ from sklearnex.linear_model import ElasticNet
120
+
121
+ X, y = make_regression(n_features=2, random_state=0)
122
+ X = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
123
+ y = _convert_to_dataframe(y, sycl_queue=queue, target_df=dataframe)
124
+ elasticnet = ElasticNet(random_state=0).fit(X, y)
125
+ assert "daal4py" in elasticnet.__module__
126
+ assert_allclose(elasticnet.intercept_, 1.451, atol=1e-3)
127
+ assert_allclose(elasticnet.coef_, [18.838, 64.559], atol=1e-3)
128
+
129
+
130
+ @pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
131
+ @pytest.mark.parametrize("dtype", [np.float32, np.float64])
132
+ def test_sklearnex_reconstruct_model(dataframe, queue, dtype):
133
+ from sklearnex.linear_model import LinearRegression
134
+
135
+ seed = 42
136
+ num_samples = 3500
137
+ num_features, num_targets = 14, 9
138
+
139
+ gen = np.random.default_rng(seed)
140
+ intercept = gen.random(size=num_targets, dtype=dtype)
141
+ coef = gen.random(size=(num_targets, num_features), dtype=dtype).T
142
+
143
+ X = gen.random(size=(num_samples, num_features), dtype=dtype)
144
+ gtr = X @ coef + intercept[np.newaxis, :]
145
+
146
+ X = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
147
+
148
+ linreg = LinearRegression(fit_intercept=True)
149
+ linreg.coef_ = coef.T
150
+ linreg.intercept_ = intercept
151
+
152
+ y_pred = linreg.predict(X)
153
+
154
+ tol = 1e-5 if _as_numpy(y_pred).dtype == np.float32 else 1e-7
155
+ assert_allclose(gtr, _as_numpy(y_pred), rtol=tol)
156
+
157
+
158
+ def test_sklearnex_multivariate_ridge_coefs():
159
+ from sklearnex.linear_model import Ridge
160
+
161
+ _test_multivariate_ridge_coefficients(Ridge, random_state=0)
162
+
163
+
164
+ def test_sklearnex_multivariate_ridge_alpha_shape():
165
+ from sklearnex.linear_model import Ridge
166
+
167
+ _test_multivariate_ridge_alpha_shape(Ridge, random_state=0)
@@ -16,8 +16,9 @@
16
16
 
17
17
  import numpy as np
18
18
  import pytest
19
- from numpy.testing import assert_allclose
20
- from sklearn.datasets import load_breast_cancer, load_iris
19
+ from numpy.testing import assert_allclose, assert_array_equal
20
+ from scipy.sparse import csr_matrix
21
+ from sklearn.datasets import load_breast_cancer, load_iris, make_classification
21
22
  from sklearn.metrics import accuracy_score
22
23
  from sklearn.model_selection import train_test_split
23
24
 
@@ -26,7 +27,9 @@ from onedal.tests.utils._dataframes_support import (
26
27
  _as_numpy,
27
28
  _convert_to_dataframe,
28
29
  get_dataframes_and_queues,
30
+ get_queues,
29
31
  )
32
+ from sklearnex import config_context
30
33
 
31
34
 
32
35
  def prepare_input(X, y, dataframe, queue):
@@ -40,8 +43,7 @@ def prepare_input(X, y, dataframe, queue):
40
43
 
41
44
 
42
45
  @pytest.mark.parametrize(
43
- "dataframe,queue",
44
- get_dataframes_and_queues(device_filter_="cpu"),
46
+ "dataframe,queue", get_dataframes_and_queues(device_filter_="cpu")
45
47
  )
46
48
  def test_sklearnex_multiclass_classification(dataframe, queue):
47
49
  from sklearnex.linear_model import LogisticRegression
@@ -91,3 +93,42 @@ def test_sklearnex_binary_classification(dataframe, queue):
91
93
 
92
94
  y_pred = _as_numpy(logreg.predict(X_test))
93
95
  assert accuracy_score(y_test, y_pred) > 0.95
96
+
97
+
98
+ if daal_check_version((2024, "P", 700)):
99
+
100
+ @pytest.mark.parametrize("queue", get_queues("gpu"))
101
+ @pytest.mark.parametrize("dtype", [np.float32, np.float64])
102
+ @pytest.mark.parametrize(
103
+ "dims", [(3007, 17, 0.05), (50000, 100, 0.01), (512, 10, 0.5)]
104
+ )
105
+ def test_csr(queue, dtype, dims):
106
+ from sklearnex.linear_model import LogisticRegression
107
+
108
+ n, p, density = dims
109
+
110
+ # Create sparse dataset for classification
111
+ X, y = make_classification(n, p, random_state=42)
112
+ X = X.astype(dtype)
113
+ y = y.astype(dtype)
114
+ np.random.seed(2007 + n + p)
115
+ mask = np.random.binomial(1, density, (n, p))
116
+ X = X * mask
117
+ X_sp = csr_matrix(X)
118
+
119
+ model = LogisticRegression(fit_intercept=True, solver="newton-cg")
120
+ model_sp = LogisticRegression(fit_intercept=True, solver="newton-cg")
121
+
122
+ with config_context(target_offload="gpu:0"):
123
+ model.fit(X, y)
124
+ pred = model.predict(X)
125
+ prob = model.predict_proba(X)
126
+ model_sp.fit(X_sp, y)
127
+ pred_sp = model_sp.predict(X_sp)
128
+ prob_sp = model_sp.predict_proba(X_sp)
129
+
130
+ rtol = 2e-4
131
+ assert_allclose(pred, pred_sp, rtol=rtol)
132
+ assert_allclose(prob, prob_sp, rtol=rtol)
133
+ assert_allclose(model.coef_, model_sp.coef_, rtol=rtol)
134
+ assert_allclose(model.intercept_, model_sp.intercept_, rtol=rtol)
@@ -15,3 +15,7 @@
15
15
  # ===============================================================================
16
16
 
17
17
  from daal4py.sklearn.manifold import TSNE
18
+ from onedal._device_offload import support_input_format
19
+
20
+ TSNE.fit = support_input_format(queue_param=False)(TSNE.fit)
21
+ TSNE.fit_transform = support_input_format(queue_param=False)(TSNE.fit_transform)
@@ -15,3 +15,8 @@
15
15
  # ===============================================================================
16
16
 
17
17
  from daal4py.sklearn.metrics import pairwise_distances
18
+ from onedal._device_offload import support_input_format
19
+
20
+ pairwise_distances = support_input_format(freefunc=True, queue_param=False)(
21
+ pairwise_distances
22
+ )
@@ -15,3 +15,6 @@
15
15
  # ===============================================================================
16
16
 
17
17
  from daal4py.sklearn.metrics import roc_auc_score
18
+ from onedal._device_offload import support_input_format
19
+
20
+ roc_auc_score = support_input_format(freefunc=True, queue_param=False)(roc_auc_score)
@@ -15,3 +15,8 @@
15
15
  # ===============================================================================
16
16
 
17
17
  from daal4py.sklearn.model_selection import train_test_split
18
+ from onedal._device_offload import support_input_format
19
+
20
+ train_test_split = support_input_format(freefunc=True, queue_param=False)(
21
+ train_test_split
22
+ )
@@ -17,29 +17,35 @@
17
17
  import warnings
18
18
 
19
19
  import numpy as np
20
- from sklearn.neighbors import LocalOutlierFactor as sklearn_LocalOutlierFactor
20
+ from sklearn.neighbors import LocalOutlierFactor as _sklearn_LocalOutlierFactor
21
21
  from sklearn.utils.metaestimators import available_if
22
22
  from sklearn.utils.validation import check_is_fitted
23
23
 
24
24
  from daal4py.sklearn._n_jobs_support import control_n_jobs
25
25
  from daal4py.sklearn._utils import sklearn_check_version
26
+ from sklearnex._device_offload import dispatch, wrap_output_data
27
+ from sklearnex.neighbors.common import KNeighborsDispatchingBase
28
+ from sklearnex.neighbors.knn_unsupervised import NearestNeighbors
26
29
 
27
- from .._device_offload import dispatch, wrap_output_data
28
- from .common import KNeighborsDispatchingBase
29
- from .knn_unsupervised import NearestNeighbors
30
+ from ..utils._array_api import get_namespace
30
31
 
32
+ if sklearn_check_version("1.6"):
33
+ from sklearn.utils.validation import validate_data
34
+ else:
35
+ validate_data = _sklearn_LocalOutlierFactor._validate_data
31
36
 
32
- @control_n_jobs(decorated_methods=["fit", "kneighbors"])
33
- class LocalOutlierFactor(KNeighborsDispatchingBase, sklearn_LocalOutlierFactor):
37
+
38
+ @control_n_jobs(decorated_methods=["fit", "kneighbors", "_kneighbors"])
39
+ class LocalOutlierFactor(KNeighborsDispatchingBase, _sklearn_LocalOutlierFactor):
34
40
  __doc__ = (
35
- sklearn_LocalOutlierFactor.__doc__
41
+ _sklearn_LocalOutlierFactor.__doc__
36
42
  + "\n NOTE: When X=None, methods kneighbors, kneighbors_graph, and predict will"
37
43
  + "\n only output numpy arrays. In that case, the only way to offload to gpu"
38
44
  + "\n is to use a global queue (e.g. using config_context)"
39
45
  )
40
46
  if sklearn_check_version("1.2"):
41
47
  _parameter_constraints: dict = {
42
- **sklearn_LocalOutlierFactor._parameter_constraints
48
+ **_sklearn_LocalOutlierFactor._parameter_constraints
43
49
  }
44
50
 
45
51
  # Only certain methods should be taken from knn to prevent code
@@ -97,32 +103,37 @@ class LocalOutlierFactor(KNeighborsDispatchingBase, sklearn_LocalOutlierFactor):
97
103
  self.negative_outlier_factor_, 100.0 * self.contamination
98
104
  )
99
105
 
106
+ # adoption of warning for data with duplicated samples from
107
+ # https://github.com/scikit-learn/scikit-learn/pull/28773
108
+ if sklearn_check_version("1.6"):
109
+ if np.min(self.negative_outlier_factor_) < -1e7 and not self.novelty:
110
+ warnings.warn(
111
+ "Duplicate values are leading to incorrect results. "
112
+ "Increase the number of neighbors for more accurate results."
113
+ )
114
+
100
115
  return self
101
116
 
102
117
  def fit(self, X, y=None):
103
- self._fit_validation(X, y)
104
118
  result = dispatch(
105
119
  self,
106
120
  "fit",
107
121
  {
108
122
  "onedal": self.__class__._onedal_fit,
109
- "sklearn": sklearn_LocalOutlierFactor.fit,
123
+ "sklearn": _sklearn_LocalOutlierFactor.fit,
110
124
  },
111
125
  X,
112
126
  None,
113
127
  )
114
128
  return result
115
129
 
116
- # Subtle order change to remove check_array and preserve dpnp and
117
- # dpctl conformance. decision_function will return a dpnp or dpctl
118
- # instance via kneighbors and an equivalent check_array exists in
119
- # that call already in sklearn so no loss of functionality occurs
120
130
  def _predict(self, X=None):
121
131
  check_is_fitted(self)
122
132
 
123
133
  if X is not None:
134
+ xp, _ = get_namespace(X)
124
135
  output = self.decision_function(X) < 0
125
- is_inlier = np.ones(output.shape[0], dtype=int)
136
+ is_inlier = xp.ones_like(output, dtype=int)
126
137
  is_inlier[output] = -1
127
138
  else:
128
139
  is_inlier = np.ones(self.n_samples_fit_, dtype=int)
@@ -134,18 +145,32 @@ class LocalOutlierFactor(KNeighborsDispatchingBase, sklearn_LocalOutlierFactor):
134
145
  # argument is given and it is a dpctl tensor or dpnp array.
135
146
  # This would cause issues in fit_predict. Also, available_if
136
147
  # is hard to unwrap, and this is the most straighforward way.
137
- @available_if(sklearn_LocalOutlierFactor._check_novelty_fit_predict)
148
+ @available_if(_sklearn_LocalOutlierFactor._check_novelty_fit_predict)
138
149
  @wrap_output_data
139
150
  def fit_predict(self, X, y=None):
151
+ """Fit the model to the training set X and return the labels.
152
+
153
+ **Not available for novelty detection (when novelty is set to True).**
154
+ Label is 1 for an inlier and -1 for an outlier according to the LOF
155
+ score and the contamination parameter.
156
+
157
+ Parameters
158
+ ----------
159
+ X : {array-like, sparse matrix} of shape (n_samples, n_features), default=None
160
+ The query sample or samples to compute the Local Outlier Factor
161
+ w.r.t. the training samples.
162
+
163
+ y : Ignored
164
+ Not used, present for API consistency by convention.
165
+
166
+ Returns
167
+ -------
168
+ is_inlier : ndarray of shape (n_samples,)
169
+ Returns -1 for anomalies/outliers and 1 for inliers.
170
+ """
140
171
  return self.fit(X)._predict()
141
172
 
142
- @available_if(sklearn_LocalOutlierFactor._check_novelty_predict)
143
- @wrap_output_data
144
- def predict(self, X=None):
145
- return self._predict(X)
146
-
147
- @wrap_output_data
148
- def kneighbors(self, X=None, n_neighbors=None, return_distance=True):
173
+ def _kneighbors(self, X=None, n_neighbors=None, return_distance=True):
149
174
  check_is_fitted(self)
150
175
  if sklearn_check_version("1.0") and X is not None:
151
176
  self._check_feature_names(X, reset=False)
@@ -154,14 +179,58 @@ class LocalOutlierFactor(KNeighborsDispatchingBase, sklearn_LocalOutlierFactor):
154
179
  "kneighbors",
155
180
  {
156
181
  "onedal": self.__class__._onedal_kneighbors,
157
- "sklearn": sklearn_LocalOutlierFactor.kneighbors,
182
+ "sklearn": _sklearn_LocalOutlierFactor.kneighbors,
158
183
  },
159
184
  X,
160
185
  n_neighbors=n_neighbors,
161
186
  return_distance=return_distance,
162
187
  )
163
188
 
164
- fit.__doc__ = sklearn_LocalOutlierFactor.fit.__doc__
165
- fit_predict.__doc__ = sklearn_LocalOutlierFactor.fit_predict.__doc__
166
- predict.__doc__ = sklearn_LocalOutlierFactor.predict.__doc__
167
- kneighbors.__doc__ = sklearn_LocalOutlierFactor.kneighbors.__doc__
189
+ kneighbors = wrap_output_data(_kneighbors)
190
+
191
+ @available_if(_sklearn_LocalOutlierFactor._check_novelty_score_samples)
192
+ @wrap_output_data
193
+ def score_samples(self, X):
194
+ """Opposite of the Local Outlier Factor of X.
195
+
196
+ It is the opposite as bigger is better, i.e. large values correspond
197
+ to inliers.
198
+
199
+ **Only available for novelty detection (when novelty is set to True).**
200
+ The argument X is supposed to contain *new data*: if X contains a
201
+ point from training, it considers the later in its own neighborhood.
202
+ Also, the samples in X are not considered in the neighborhood of any
203
+ point. Because of this, the scores obtained via ``score_samples`` may
204
+ differ from the standard LOF scores.
205
+ The standard LOF scores for the training data is available via the
206
+ ``negative_outlier_factor_`` attribute.
207
+
208
+ Parameters
209
+ ----------
210
+ X : {array-like, sparse matrix} of shape (n_samples, n_features)
211
+ The query sample or samples to compute the Local Outlier Factor
212
+ w.r.t. the training samples.
213
+
214
+ Returns
215
+ -------
216
+ opposite_lof_scores : ndarray of shape (n_samples,)
217
+ The opposite of the Local Outlier Factor of each input samples.
218
+ The lower, the more abnormal.
219
+ """
220
+ check_is_fitted(self)
221
+
222
+ distances_X, neighbors_indices_X = self._kneighbors(
223
+ X, n_neighbors=self.n_neighbors_
224
+ )
225
+
226
+ X_lrd = self._local_reachability_density(
227
+ distances_X,
228
+ neighbors_indices_X,
229
+ )
230
+
231
+ lrd_ratios_array = self._lrd[neighbors_indices_X] / X_lrd[:, np.newaxis]
232
+
233
+ return -np.mean(lrd_ratios_array, axis=1)
234
+
235
+ fit.__doc__ = _sklearn_LocalOutlierFactor.fit.__doc__
236
+ kneighbors.__doc__ = _sklearn_LocalOutlierFactor.kneighbors.__doc__