scikit-learn-intelex 2024.1.0__py311-none-manylinux1_x86_64.whl → 2024.4.0__py311-none-manylinux1_x86_64.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 (62) hide show
  1. {scikit_learn_intelex-2024.1.0.dist-info → scikit_learn_intelex-2024.4.0.dist-info}/METADATA +2 -2
  2. scikit_learn_intelex-2024.4.0.dist-info/RECORD +101 -0
  3. sklearnex/__init__.py +9 -7
  4. sklearnex/_device_offload.py +31 -4
  5. sklearnex/basic_statistics/__init__.py +2 -1
  6. sklearnex/basic_statistics/incremental_basic_statistics.py +288 -0
  7. sklearnex/basic_statistics/tests/test_incremental_basic_statistics.py +386 -0
  8. sklearnex/cluster/dbscan.py +6 -4
  9. sklearnex/conftest.py +63 -0
  10. sklearnex/{preview/decomposition → covariance}/__init__.py +19 -19
  11. sklearnex/covariance/incremental_covariance.py +130 -0
  12. sklearnex/covariance/tests/test_incremental_covariance.py +143 -0
  13. sklearnex/decomposition/pca.py +319 -1
  14. sklearnex/decomposition/tests/test_pca.py +34 -5
  15. sklearnex/dispatcher.py +93 -61
  16. sklearnex/ensemble/_forest.py +81 -97
  17. sklearnex/ensemble/tests/test_forest.py +15 -19
  18. sklearnex/linear_model/__init__.py +1 -2
  19. sklearnex/linear_model/linear.py +275 -347
  20. sklearnex/{preview/linear_model → linear_model}/logistic_regression.py +83 -50
  21. sklearnex/linear_model/tests/test_linear.py +40 -5
  22. sklearnex/linear_model/tests/test_logreg.py +70 -7
  23. sklearnex/neighbors/__init__.py +1 -1
  24. sklearnex/neighbors/_lof.py +221 -0
  25. sklearnex/neighbors/common.py +4 -1
  26. sklearnex/neighbors/knn_classification.py +47 -137
  27. sklearnex/neighbors/knn_regression.py +20 -132
  28. sklearnex/neighbors/knn_unsupervised.py +16 -93
  29. sklearnex/neighbors/tests/test_neighbors.py +12 -16
  30. sklearnex/preview/__init__.py +1 -1
  31. sklearnex/preview/cluster/k_means.py +8 -81
  32. sklearnex/preview/covariance/covariance.py +51 -16
  33. sklearnex/preview/covariance/tests/test_covariance.py +18 -5
  34. sklearnex/spmd/__init__.py +1 -0
  35. sklearnex/{preview/linear_model → spmd/covariance}/__init__.py +5 -5
  36. sklearnex/spmd/covariance/covariance.py +21 -0
  37. sklearnex/spmd/ensemble/forest.py +4 -12
  38. sklearnex/spmd/linear_model/__init__.py +2 -1
  39. sklearnex/spmd/linear_model/logistic_regression.py +21 -0
  40. sklearnex/svm/_common.py +4 -7
  41. sklearnex/svm/nusvc.py +74 -55
  42. sklearnex/svm/nusvr.py +9 -56
  43. sklearnex/svm/svc.py +74 -56
  44. sklearnex/svm/svr.py +6 -53
  45. sklearnex/tests/_utils.py +164 -0
  46. sklearnex/tests/test_memory_usage.py +9 -7
  47. sklearnex/tests/test_monkeypatch.py +179 -138
  48. sklearnex/tests/test_n_jobs_support.py +77 -9
  49. sklearnex/tests/test_parallel.py +6 -8
  50. sklearnex/tests/test_patching.py +338 -89
  51. sklearnex/utils/__init__.py +2 -1
  52. sklearnex/utils/_namespace.py +97 -0
  53. scikit_learn_intelex-2024.1.0.dist-info/RECORD +0 -97
  54. sklearnex/neighbors/lof.py +0 -436
  55. sklearnex/preview/decomposition/pca.py +0 -376
  56. sklearnex/preview/decomposition/tests/test_preview_pca.py +0 -42
  57. sklearnex/preview/linear_model/tests/test_preview_logistic_regression.py +0 -59
  58. sklearnex/tests/_models_info.py +0 -170
  59. sklearnex/tests/utils/_launch_algorithms.py +0 -118
  60. {scikit_learn_intelex-2024.1.0.dist-info → scikit_learn_intelex-2024.4.0.dist-info}/LICENSE.txt +0 -0
  61. {scikit_learn_intelex-2024.1.0.dist-info → scikit_learn_intelex-2024.4.0.dist-info}/WHEEL +0 -0
  62. {scikit_learn_intelex-2024.1.0.dist-info → scikit_learn_intelex-2024.4.0.dist-info}/top_level.txt +0 -0
@@ -1,97 +0,0 @@
1
- sklearnex/__init__.py,sha256=ScbLh27pOsTushgVj4zxZsNOLLYct65-7XrD_96Pu94,1648
2
- sklearnex/__main__.py,sha256=Le9BJq6aLEGSSoZwJLsOADxsV89ynBfA8BcoJHk9F24,1921
3
- sklearnex/_config.py,sha256=6WS3UuS4-0DxIJyGn7yQMosj-mGkLybLQrg3W7dED5o,3928
4
- sklearnex/_device_offload.py,sha256=J0tZqj6tfvIFonWR01PadtTLgloQk_QEfXeCoqEvJlk,7710
5
- sklearnex/_utils.py,sha256=EV4jC3plVdndsgrfPBsJZTzggrRdYWLwOpoIRWtTXt4,3812
6
- sklearnex/dispatcher.py,sha256=9prbr6QrUWjc8wq1OyTxhuFEIKlTR-Qup9ZMfNszBPE,12884
7
- sklearnex/basic_statistics/__init__.py,sha256=NA5RGlwcp27UEeCgz0ngzYYd3MAIRpxlTy86uhM2-RE,821
8
- sklearnex/basic_statistics/basic_statistics.py,sha256=j5jBZ3DgXjoyjCBEFfYQHyl3LgLXEWWFnNHwInThdZw,796
9
- sklearnex/cluster/__init__.py,sha256=TsDzdbKzEubaP86iY8a7mSW0ZQzgjzGYuPkhc5lZmlQ,853
10
- sklearnex/cluster/dbscan.py,sha256=o3ZJVsvQXGG5y2bUja7Xd0V57VQGmB93FWDbKVo20kw,6674
11
- sklearnex/cluster/k_means.py,sha256=1QKcFUQcnycu8kSD8uYSaDIuedHbxZsV_gvUfcEwVAM,806
12
- sklearnex/cluster/tests/test_dbscan.py,sha256=AgFoKwXFVyLKLvEtJVs0qlbBs1Ci3PcRft7f-6_ENOU,1464
13
- sklearnex/cluster/tests/test_kmeans.py,sha256=H3a9NSHRRSASo0Eceo44Kjq6GwEoMqMzcubaNt1s1QQ,1213
14
- sklearnex/decomposition/__init__.py,sha256=RJBYDWyvnn5DA-j5r4IqVdXLp6H4mdPySsSjnXhlv-U,805
15
- sklearnex/decomposition/pca.py,sha256=68ksLxTP5fMOUhRmiIq9QNm0YzQanBNzxsq-zA8DKaY,809
16
- sklearnex/decomposition/tests/test_pca.py,sha256=aP4gxjML38CFpknwNVIkZLQCc8t2rqYGlWVo03vsMfE,1146
17
- sklearnex/doc/third-party-programs.txt,sha256=qA1XbOqYkMRnp29p8VxXjfcH0kHE8NSO5s2heea83-8,21773
18
- sklearnex/ensemble/__init__.py,sha256=2xB2KfG7l7uJv0p3kfVhrs4KLM174SCsigZhYqwSYAA,1035
19
- sklearnex/ensemble/_forest.py,sha256=Q3foDFaNmEHVeYjK8dIvP_-6GvSEV7dYPTXCrVN0e6A,70441
20
- sklearnex/ensemble/tests/test_forest.py,sha256=KoETKE1sSpKgp38s9bepAujJjcG21eFX5RyYINcHCUo,4516
21
- sklearnex/glob/__main__.py,sha256=--FAjkhh5E6a1TFOGu6_BM3MHe78jP8oSpl0xKiRtTI,2531
22
- sklearnex/glob/dispatcher.py,sha256=IEEPhAOCVzC2JDFvYtijbiPAbaUY5RrCAhFLRjMMe1w,3018
23
- sklearnex/linear_model/__init__.py,sha256=97jj68r_V3JmsO8sZJt9BXlXazAPAzAz0E56dsNu4Sk,1100
24
- sklearnex/linear_model/coordinate_descent.py,sha256=uZOHIKfFlHoMlNXZCh2MAnZE30fRZlmtcF7UsZQ3Vq4,822
25
- sklearnex/linear_model/linear.py,sha256=see-YysI8U1ilseHlerfcb97BFmenaubW-3BmDy0ixI,13870
26
- sklearnex/linear_model/logistic_path.py,sha256=Nq3JPXSzE4bjamnP3gGQtsMKks2v7s6bSiuYRnFqrRw,849
27
- sklearnex/linear_model/ridge.py,sha256=0oxlM5McYYvl0KxK9OIGJKM6lOADuFSPTdfx-efJNTI,810
28
- sklearnex/linear_model/tests/test_linear.py,sha256=li9LLWgap6YCwvNiHQ9yHduvUIsK1lpXfuVNR3dLwig,3200
29
- sklearnex/linear_model/tests/test_logreg.py,sha256=KO4240ACvhLsVHC_H09lhj4APUWPxmimHBE1JoY6TB8,1175
30
- sklearnex/manifold/__init__.py,sha256=3FU5fY1YvHAyNeSlUHsZfPnAbvlAUtZpum0Obmok2KE,809
31
- sklearnex/manifold/t_sne.py,sha256=U6F_dGB6taVuEJvTnVBWD-sri3x3m0Khu3HI4wXidhg,805
32
- sklearnex/manifold/tests/test_tsne.py,sha256=SNqe1yg45mL4qIsxpX5hDpBsIyrv9r__6wfrerjp3yU,1063
33
- sklearnex/metrics/__init__.py,sha256=EHOCTU9RERa0Rrkr4dgmyO9ippbN5kjH_FwK3BqIROc,907
34
- sklearnex/metrics/pairwise.py,sha256=5T_Vcbiadzi7oo0hq6vLl_BHQzXOmDsn5pHaMCPSHd8,818
35
- sklearnex/metrics/ranking.py,sha256=rjJxQntblbegSZRwDsOOy2ntIYBqlnV8NM46IAc0MiE,813
36
- sklearnex/metrics/tests/test_metrics.py,sha256=Nwfz8UV4V4fKLLY7f9P9eg8uY09xLXaFx1GC49TOiA8,1579
37
- sklearnex/model_selection/__init__.py,sha256=64045Y-nzLDBepO6IRjt88LhL2DM3KdvpCF2vvj_RpA,842
38
- sklearnex/model_selection/split.py,sha256=qjmy8sRf_QEG8LhT0ivn_tICMCYmt7ffZZV1-rLQnko,824
39
- sklearnex/model_selection/tests/test_model_selection.py,sha256=3kZIq8kba8SW93DBWXupoRymNStR1_mGGYSErQRnwME,1338
40
- sklearnex/neighbors/__init__.py,sha256=fyxRt3wosR6Tg_QYWOOt477jLisT2iZl6CzfTL1y9ro,1077
41
- sklearnex/neighbors/common.py,sha256=iia-EUIRUIohDCIGpHbVx2PeDlwUvz4Mj1Tn169jidA,10781
42
- sklearnex/neighbors/knn_classification.py,sha256=z6-GgVnOnkyypZGyf0wFOev2Hc8iWy62gfr4dMFFdXM,11023
43
- sklearnex/neighbors/knn_regression.py,sha256=Ns_VPJ1ismXcPeJkUp8JxiHe-Y3QqI0d5HZuub7owkQ,9917
44
- sklearnex/neighbors/knn_unsupervised.py,sha256=MaapzNDA1wy2ZTuCeqpkKDEMBItrbMoW0p3JniCRCsA,7590
45
- sklearnex/neighbors/lof.py,sha256=XNnqrOnpIC5apeg6nToxeGqjQNIEp7sotflmm9iF4UY,16264
46
- sklearnex/neighbors/tests/test_neighbors.py,sha256=EAGF7Opgf-xWUAWYc6OdDgW5-2XsdkzLK_a35IX4Se4,3565
47
- sklearnex/preview/__init__.py,sha256=hZfIgTkkkUVaQ-SKaqI-S_SiXCkUzCUYxpSnbrhhEJU,813
48
- sklearnex/preview/cluster/__init__.py,sha256=FONzOuTGAb5NwdfFhLco99P_VccRk9NBkDHU3EKuAIs,794
49
- sklearnex/preview/cluster/_common.py,sha256=bgpzijxgyrAtdNCCHyCNsZ-N70KQYNwMuoCTNdUna6o,2718
50
- sklearnex/preview/cluster/k_means.py,sha256=hG_hq8dfHM8B97L9T6fPU5TuQB7d3URWHfnB1cskT_8,13022
51
- sklearnex/preview/covariance/__init__.py,sha256=DPYTk8lwcVphtwU8J3CyUYH8Uz6Zr0Uz4S6nn-RY5iM,825
52
- sklearnex/preview/covariance/covariance.py,sha256=FXcRqdrHAhRNsyD6hG4a63ZxHMOZqdOS9yAqzfPY1LI,3614
53
- sklearnex/preview/covariance/tests/test_covariance.py,sha256=GYI4bMIhGnjmOXpt8J7R0JQmpm9eOvDjIphugRa4kD8,2140
54
- sklearnex/preview/decomposition/__init__.py,sha256=uRenwBGf7hHQqwAVYbBw3clUQB_HWUqJGOAKTuCnrcM,805
55
- sklearnex/preview/decomposition/pca.py,sha256=KkbK3NwBCvE_0eQryI3zFiwlXPiNdj4dCQd2ywgSIn8,14341
56
- sklearnex/preview/decomposition/tests/test_preview_pca.py,sha256=xcllHM-jDIq33rAWTeh_gjhS2qfCNbUIAI5KeLPA8aY,1790
57
- sklearnex/preview/linear_model/__init__.py,sha256=Xr9Gk6mCq794GDLA2UlJPiLovOhZAx6rA5Bu123L-Rg,832
58
- sklearnex/preview/linear_model/logistic_regression.py,sha256=KIqpboN15BFV4BOyEokc5LF9eiqwBetlx2i27WBNIK0,13377
59
- sklearnex/preview/linear_model/tests/test_preview_logistic_regression.py,sha256=UjHXFhlea2P7feUKC64uHGNOhJpEaM2EZoAK0JJbz3I,2422
60
- sklearnex/spmd/__init__.py,sha256=8cxQy-oCFy1TJto0qoRf4lt98siPx2c-YV99YC-sk6s,871
61
- sklearnex/spmd/basic_statistics/__init__.py,sha256=NA5RGlwcp27UEeCgz0ngzYYd3MAIRpxlTy86uhM2-RE,821
62
- sklearnex/spmd/basic_statistics/basic_statistics.py,sha256=_dQ9mhVYxeuChATEpAmHpXDpgW3YvtK1qrG-kLr2MtI,886
63
- sklearnex/spmd/cluster/__init__.py,sha256=qBBfrCHh6_82EROLbu54XKk7SmmRwS1XJyCj0zwkoUw,1029
64
- sklearnex/spmd/cluster/dbscan.py,sha256=23YNzPhx4MZijU0md-E3ZkHpTkhUh5cmtS3loHe-KhI,1824
65
- sklearnex/spmd/cluster/kmeans.py,sha256=Rnb9tr9LXVto5vCAumk7ZJfa9BYYDhdD1qUWL-QK5bY,868
66
- sklearnex/spmd/decomposition/__init__.py,sha256=dBh0ZMIiaqdf3DKbt8FWNB2K9Iacs395m8OxaDFQg_M,784
67
- sklearnex/spmd/decomposition/pca.py,sha256=CUrsVD2jae-A9H8RB_emza_fe82CwnFa5PEy0fW_EZ8,871
68
- sklearnex/spmd/ensemble/__init__.py,sha256=B3yi7hWoVogMIiw0QRT_x5atsAFS-OO72YPLGeUQJ8M,873
69
- sklearnex/spmd/ensemble/forest.py,sha256=ao6lyzcxoRW-RG9xIYwtDFyM7JIjlF8wmQKpOv_oSRQ,3113
70
- sklearnex/spmd/linear_model/__init__.py,sha256=eCJGleo00O6c280G97i18KNmSvi6uwX7wM1ZN5JMqhw,819
71
- sklearnex/spmd/linear_model/linear_model.py,sha256=7QPCIQTWKBiZBTDZZbpZXi-REgxQCfRMt6rHPJAnc5E,883
72
- sklearnex/spmd/neighbors/__init__.py,sha256=S16sH8N_18LN_8AgC_wGK5EDSNyuN-F-gI6GVlaiWVE,906
73
- sklearnex/spmd/neighbors/neighbors.py,sha256=SiKAS_RVt34MUcGytBS5pHnI_5vFNxJn8jqt1MOhDh8,940
74
- sklearnex/svm/__init__.py,sha256=f3e4ZFwZfx6MsXsn94VK1xVm6mWKT5XCiHczo6zNyAQ,1057
75
- sklearnex/svm/_common.py,sha256=Dt1Iyz1g04zOW6hn9cHa9ruzM_MHAIq0ZEEIxh5s7nI,7167
76
- sklearnex/svm/nusvc.py,sha256=0-18XPzyhxQpD1nqVaUS-cymdnqZDCqZbCznD-oLr_U,8983
77
- sklearnex/svm/nusvr.py,sha256=BJiQYQV5-YS5P0DZTh3k-vvbGuu-GWZI3QBUsuxLMak,5215
78
- sklearnex/svm/svc.py,sha256=FL5GLMh82nhqUfaWjbAivghXq5iM9V_AVtkp_MAhCnI,10263
79
- sklearnex/svm/svr.py,sha256=dsVkOGsJ5qqx7uaWkkc5Dv7zwYaZrC1mUgcPQOadq7s,5219
80
- sklearnex/svm/tests/test_svm.py,sha256=Ru-aGNGCsRJts7SEEYbnKcVqUx-DqPyUtw-hEoMVpW8,4190
81
- sklearnex/tests/_models_info.py,sha256=xhjvnU3TvQg8J5Cih2hphWAOSsT8DnKmCyYbtwa0Qvs,4785
82
- sklearnex/tests/test_config.py,sha256=SnSJjxAAysISDyC3bYKSJiRHStkB9X-yjLeF11LpRog,1372
83
- sklearnex/tests/test_memory_usage.py,sha256=-9S5EY9Ivy6WRW18IJEY1uyJxo9073GwXHybnFrJULc,7381
84
- sklearnex/tests/test_monkeypatch.py,sha256=D1ATlQtrNAtpHE7zmIxl7Mv41HxmRDRFAnjBmkUDGW8,8233
85
- sklearnex/tests/test_n_jobs_support.py,sha256=fa_XVNbBm5YQIguz5mgiQM8jmf2pQ7IwE8mgutyAbxk,1242
86
- sklearnex/tests/test_parallel.py,sha256=bMu22noUvGiDX4oyxKIHPiOEoBP9lRQQUq6wq8ZD730,1776
87
- sklearnex/tests/test_patching.py,sha256=6H0Um6N5qhD5OZ875HhAcKPFXM81les5XWCCsaNyMb8,3759
88
- sklearnex/tests/test_run_to_run_stability_tests.py,sha256=4HDOeJruA1EDILbyQJtsHFmEXC0D1upSHuOT-KyTlEc,14008
89
- sklearnex/tests/utils/_launch_algorithms.py,sha256=pJT5tAW9rWvk7GT37R-B0-e8SLz8e9FSZw8yu4LWNJ4,3724
90
- sklearnex/utils/__init__.py,sha256=I8mbJQ3Zsm_F3sCLAhJQb7tUrG30kVsQ-wZoqA8vDdA,842
91
- sklearnex/utils/parallel.py,sha256=VBcS-KUdyq7XpJUN6ygmNjyWtYLroghbvCxQ8nVU3YI,2085
92
- sklearnex/utils/validation.py,sha256=fjfhQiKnBQnD7LCBlacMyvsrhGnlMLRXk5Q69uoZIP4,827
93
- scikit_learn_intelex-2024.1.0.dist-info/LICENSE.txt,sha256=7micbUpzQXphq9e_2oL7PpZcvoXzPuQHIDEXyKXC81s,10797
94
- scikit_learn_intelex-2024.1.0.dist-info/METADATA,sha256=qYwrcOCj5B6HvCitweNkQDzI5qgtww7X6MdAeKdLElo,12449
95
- scikit_learn_intelex-2024.1.0.dist-info/WHEEL,sha256=nUImGVghXI3BbWH-HS5yME2RP5X-J5sfF99vWXe2MpQ,108
96
- scikit_learn_intelex-2024.1.0.dist-info/top_level.txt,sha256=kzKChSWGJEYFmdj5PwE63HNuP_PVOhWfD32ytH9rL9Q,10
97
- scikit_learn_intelex-2024.1.0.dist-info/RECORD,,
@@ -1,436 +0,0 @@
1
- # ===============================================================================
2
- # Copyright 2023 Intel Corporation
3
- #
4
- # Licensed under the Apache License, Version 2.0 (the "License");
5
- # you may not use this file except in compliance with the License.
6
- # You may obtain a copy of the License at
7
- #
8
- # http://www.apache.org/licenses/LICENSE-2.0
9
- #
10
- # Unless required by applicable law or agreed to in writing, software
11
- # distributed under the License is distributed on an "AS IS" BASIS,
12
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- # See the License for the specific language governing permissions and
14
- # limitations under the License.
15
- # ===============================================================================
16
-
17
- import warnings
18
-
19
- import numpy as np
20
- from sklearn.neighbors._lof import LocalOutlierFactor as sklearn_LocalOutlierFactor
21
-
22
- from .knn_unsupervised import NearestNeighbors
23
-
24
- try:
25
- from sklearn.utils.metaestimators import available_if
26
- except ImportError:
27
- pass
28
-
29
- from sklearn.utils import check_array
30
- from sklearn.utils.validation import check_is_fitted
31
-
32
- from daal4py.sklearn._utils import sklearn_check_version
33
-
34
- from .._config import config_context
35
- from .._device_offload import dispatch, wrap_output_data
36
- from .._utils import PatchingConditionsChain
37
-
38
- if sklearn_check_version("1.0"):
39
-
40
- class LocalOutlierFactor(sklearn_LocalOutlierFactor):
41
- if sklearn_check_version("1.2"):
42
- _parameter_constraints: dict = {
43
- **sklearn_LocalOutlierFactor._parameter_constraints
44
- }
45
-
46
- def __init__(
47
- self,
48
- n_neighbors=20,
49
- *,
50
- algorithm="auto",
51
- leaf_size=30,
52
- metric="minkowski",
53
- p=2,
54
- metric_params=None,
55
- contamination="auto",
56
- novelty=False,
57
- n_jobs=None,
58
- ):
59
- super().__init__(
60
- n_neighbors=n_neighbors,
61
- algorithm=algorithm,
62
- leaf_size=leaf_size,
63
- metric=metric,
64
- p=p,
65
- metric_params=metric_params,
66
- n_jobs=n_jobs,
67
- contamination=contamination,
68
- novelty=novelty,
69
- )
70
-
71
- def _fit(self, X, y, queue=None):
72
- with config_context(target_offload=queue):
73
- if sklearn_check_version("1.2"):
74
- self._validate_params()
75
- self._knn = NearestNeighbors(
76
- n_neighbors=self.n_neighbors,
77
- algorithm=self.algorithm,
78
- leaf_size=self.leaf_size,
79
- metric=self.metric,
80
- p=self.p,
81
- metric_params=self.metric_params,
82
- n_jobs=self.n_jobs,
83
- )
84
- self._knn.fit(X)
85
-
86
- if self.contamination != "auto":
87
- if not (0.0 < self.contamination <= 0.5):
88
- raise ValueError(
89
- "contamination must be in (0, 0.5], "
90
- "got: %f" % self.contamination
91
- )
92
-
93
- n_samples = self._knn.n_samples_fit_
94
-
95
- if self.n_neighbors > n_samples:
96
- warnings.warn(
97
- "n_neighbors (%s) is greater than the "
98
- "total number of samples (%s). n_neighbors "
99
- "will be set to (n_samples - 1) for estimation."
100
- % (self.n_neighbors, n_samples)
101
- )
102
- self.n_neighbors_ = max(1, min(self.n_neighbors, n_samples - 1))
103
-
104
- self._distances_fit_X_, _neighbors_indices_fit_X_ = self._knn.kneighbors(
105
- n_neighbors=self.n_neighbors_
106
- )
107
-
108
- self._lrd = self._local_reachability_density(
109
- self._distances_fit_X_, _neighbors_indices_fit_X_
110
- )
111
-
112
- # Compute lof score over training samples to define offset_:
113
- lrd_ratios_array = (
114
- self._lrd[_neighbors_indices_fit_X_] / self._lrd[:, np.newaxis]
115
- )
116
-
117
- self.negative_outlier_factor_ = -np.mean(lrd_ratios_array, axis=1)
118
-
119
- if self.contamination == "auto":
120
- # inliers score around -1 (the higher, the less abnormal).
121
- self.offset_ = -1.5
122
- else:
123
- self.offset_ = np.percentile(
124
- self.negative_outlier_factor_, 100.0 * self.contamination
125
- )
126
-
127
- for knn_prop_name in self._knn.__dict__.keys():
128
- if knn_prop_name not in self.__dict__.keys():
129
- setattr(self, knn_prop_name, self._knn.__dict__[knn_prop_name])
130
-
131
- return self
132
-
133
- def fit(self, X, y=None):
134
- return dispatch(
135
- self,
136
- "neighbors.LocalOutlierFactor.fit",
137
- {
138
- "onedal": self.__class__._fit,
139
- "sklearn": None,
140
- },
141
- X,
142
- y,
143
- )
144
-
145
- def _onedal_predict(self, X, queue=None):
146
- with config_context(target_offload=queue):
147
- check_is_fitted(self)
148
-
149
- if X is not None:
150
- X = check_array(X, accept_sparse="csr")
151
- is_inlier = np.ones(X.shape[0], dtype=int)
152
- is_inlier[self.decision_function(X) < 0] = -1
153
- else:
154
- is_inlier = np.ones(self._knn.n_samples_fit_, dtype=int)
155
- is_inlier[self.negative_outlier_factor_ < self.offset_] = -1
156
-
157
- return is_inlier
158
-
159
- @wrap_output_data
160
- def _predict(self, X=None):
161
- return dispatch(
162
- self,
163
- "neighbors.LocalOutlierFactor.predict",
164
- {
165
- "onedal": self.__class__._onedal_predict,
166
- "sklearn": None,
167
- },
168
- X,
169
- )
170
-
171
- def _score_samples(self, X, queue=None):
172
- with config_context(target_offload=queue):
173
- check_is_fitted(self)
174
- X = check_array(X, accept_sparse="csr")
175
-
176
- distances_X, neighbors_indices_X = self._knn.kneighbors(
177
- X, n_neighbors=self.n_neighbors_
178
- )
179
- X_lrd = self._local_reachability_density(distances_X, neighbors_indices_X)
180
-
181
- lrd_ratios_array = self._lrd[neighbors_indices_X] / X_lrd[:, np.newaxis]
182
-
183
- # as bigger is better:
184
- return -np.mean(lrd_ratios_array, axis=1)
185
-
186
- def _check_novelty_score_samples(self):
187
- if not self.novelty:
188
- msg = (
189
- "score_samples is not available when novelty=False. The "
190
- "scores of the training samples are always available "
191
- "through the negative_outlier_factor_ attribute. Use "
192
- "novelty=True if you want to use LOF for novelty detection "
193
- "and compute score_samples for new unseen data."
194
- )
195
- raise AttributeError(msg)
196
- return True
197
-
198
- @available_if(_check_novelty_score_samples)
199
- @wrap_output_data
200
- def score_samples(self, X):
201
- return dispatch(
202
- self,
203
- "neighbors.LocalOutlierFactor.score_samples",
204
- {
205
- "onedal": self.__class__._score_samples,
206
- "sklearn": None,
207
- },
208
- X,
209
- )
210
-
211
- def _check_novelty_fit_predict(self):
212
- if self.novelty:
213
- msg = (
214
- "fit_predict is not available when novelty=True. Use "
215
- "novelty=False if you want to predict on the training set."
216
- )
217
- raise AttributeError(msg)
218
- return True
219
-
220
- def _fit_predict(self, X, y, queue=None):
221
- with config_context(target_offload=queue):
222
- return self.fit(X)._predict()
223
-
224
- @available_if(_check_novelty_fit_predict)
225
- @wrap_output_data
226
- def fit_predict(self, X, y=None):
227
- return dispatch(
228
- self,
229
- "neighbors.LocalOutlierFactor.fit_predict",
230
- {
231
- "onedal": self.__class__._fit_predict,
232
- "sklearn": None,
233
- },
234
- X,
235
- y,
236
- )
237
-
238
- def _onedal_gpu_supported(self, method_name, *data):
239
- class_name = self.__class__.__name__
240
- patching_status = PatchingConditionsChain(
241
- f"sklearn.neighbors.{class_name}.{method_name}"
242
- )
243
- return patching_status
244
-
245
- def _onedal_cpu_supported(self, method_name, *data):
246
- class_name = self.__class__.__name__
247
- patching_status = PatchingConditionsChain(
248
- f"sklearn.neighbors.{class_name}.{method_name}"
249
- )
250
- return patching_status
251
-
252
- else:
253
-
254
- class LocalOutlierFactor(sklearn_LocalOutlierFactor):
255
- def __init__(
256
- self,
257
- n_neighbors=20,
258
- *,
259
- algorithm="auto",
260
- leaf_size=30,
261
- metric="minkowski",
262
- p=2,
263
- metric_params=None,
264
- contamination="auto",
265
- novelty=False,
266
- n_jobs=None,
267
- ):
268
- super().__init__(
269
- n_neighbors=n_neighbors,
270
- algorithm=algorithm,
271
- leaf_size=leaf_size,
272
- metric=metric,
273
- p=p,
274
- metric_params=metric_params,
275
- n_jobs=n_jobs,
276
- contamination=contamination,
277
- novelty=novelty,
278
- )
279
-
280
- def _fit(self, X, y=None, queue=None):
281
- with config_context(target_offload=queue):
282
- self._knn = NearestNeighbors(
283
- n_neighbors=self.n_neighbors,
284
- algorithm=self.algorithm,
285
- leaf_size=self.leaf_size,
286
- metric=self.metric,
287
- p=self.p,
288
- metric_params=self.metric_params,
289
- n_jobs=self.n_jobs,
290
- )
291
- self._knn.fit(X)
292
-
293
- if self.contamination != "auto":
294
- if not (0.0 < self.contamination <= 0.5):
295
- raise ValueError(
296
- "contamination must be in (0, 0.5], "
297
- "got: %f" % self.contamination
298
- )
299
-
300
- n_samples = self._knn.n_samples_fit_
301
-
302
- if self.n_neighbors > n_samples:
303
- warnings.warn(
304
- "n_neighbors (%s) is greater than the "
305
- "total number of samples (%s). n_neighbors "
306
- "will be set to (n_samples - 1) for estimation."
307
- % (self.n_neighbors, n_samples)
308
- )
309
- self.n_neighbors_ = max(1, min(self.n_neighbors, n_samples - 1))
310
-
311
- self._distances_fit_X_, _neighbors_indices_fit_X_ = self._knn.kneighbors(
312
- n_neighbors=self.n_neighbors_
313
- )
314
-
315
- self._lrd = self._local_reachability_density(
316
- self._distances_fit_X_, _neighbors_indices_fit_X_
317
- )
318
-
319
- # Compute lof score over training samples to define offset_:
320
- lrd_ratios_array = (
321
- self._lrd[_neighbors_indices_fit_X_] / self._lrd[:, np.newaxis]
322
- )
323
-
324
- self.negative_outlier_factor_ = -np.mean(lrd_ratios_array, axis=1)
325
-
326
- if self.contamination == "auto":
327
- # inliers score around -1 (the higher, the less abnormal).
328
- self.offset_ = -1.5
329
- else:
330
- self.offset_ = np.percentile(
331
- self.negative_outlier_factor_, 100.0 * self.contamination
332
- )
333
-
334
- for knn_prop_name in self._knn.__dict__.keys():
335
- if knn_prop_name not in self.__dict__.keys():
336
- setattr(self, knn_prop_name, self._knn.__dict__[knn_prop_name])
337
-
338
- return self
339
-
340
- def fit(self, X, y=None):
341
- return dispatch(
342
- self,
343
- "neighbors.LocalOutlierFactor.fit",
344
- {
345
- "onedal": self.__class__._fit,
346
- "sklearn": None,
347
- },
348
- X,
349
- y,
350
- )
351
-
352
- def _onedal_predict(self, X, queue=None):
353
- with config_context(target_offload=queue):
354
- check_is_fitted(self)
355
-
356
- if X is not None:
357
- X = check_array(X, accept_sparse="csr")
358
- is_inlier = np.ones(X.shape[0], dtype=int)
359
- is_inlier[self.decision_function(X) < 0] = -1
360
- else:
361
- is_inlier = np.ones(self._knn.n_samples_fit_, dtype=int)
362
- is_inlier[self.negative_outlier_factor_ < self.offset_] = -1
363
-
364
- return is_inlier
365
-
366
- @wrap_output_data
367
- def _predict(self, X=None):
368
- return dispatch(
369
- self,
370
- "neighbors.LocalOutlierFactor.predict",
371
- {
372
- "onedal": self.__class__._onedal_predict,
373
- "sklearn": None,
374
- },
375
- X,
376
- )
377
-
378
- def _onedal_score_samples(self, X, queue=None):
379
- with config_context(target_offload=queue):
380
- check_is_fitted(self)
381
- X = check_array(X, accept_sparse="csr")
382
-
383
- distances_X, neighbors_indices_X = self._knn.kneighbors(
384
- X, n_neighbors=self.n_neighbors_
385
- )
386
- X_lrd = self._local_reachability_density(distances_X, neighbors_indices_X)
387
-
388
- lrd_ratios_array = self._lrd[neighbors_indices_X] / X_lrd[:, np.newaxis]
389
-
390
- # as bigger is better:
391
- return -np.mean(lrd_ratios_array, axis=1)
392
-
393
- @wrap_output_data
394
- def _score_samples(self, X):
395
- if not self.novelty:
396
- msg = (
397
- "score_samples is not available when novelty=False. The "
398
- "scores of the training samples are always available "
399
- "through the negative_outlier_factor_ attribute. Use "
400
- "novelty=True if you want to use LOF for novelty detection "
401
- "and compute score_samples for new unseen data."
402
- )
403
- raise AttributeError(msg)
404
-
405
- return dispatch(
406
- self,
407
- "neighbors.LocalOutlierFactor.score_samples",
408
- {
409
- "onedal": self.__class__._onedal_score_samples,
410
- "sklearn": None,
411
- },
412
- X,
413
- )
414
-
415
- def _onedal_fit_predict(self, X, y, queue=None):
416
- with config_context(target_offload=queue):
417
- return self.fit(X)._predict()
418
-
419
- @wrap_output_data
420
- def _fit_predict(self, X, y=None):
421
- return dispatch(
422
- self,
423
- "neighbors.LocalOutlierFactor._onedal_fit_predict",
424
- {
425
- "onedal": self.__class__._onedal_fit_predict,
426
- "sklearn": None,
427
- },
428
- X,
429
- y,
430
- )
431
-
432
- def _onedal_gpu_supported(self, method_name, *data):
433
- return True
434
-
435
- def _onedal_cpu_supported(self, method_name, *data):
436
- return True