scikit-learn-intelex 2024.0.1__py39-none-manylinux1_x86_64.whl → 2024.2.0__py39-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 (78) hide show
  1. {scikit_learn_intelex-2024.0.1.dist-info → scikit_learn_intelex-2024.2.0.dist-info}/METADATA +2 -2
  2. scikit_learn_intelex-2024.2.0.dist-info/RECORD +101 -0
  3. sklearnex/__init__.py +3 -1
  4. sklearnex/__main__.py +0 -1
  5. sklearnex/_utils.py +15 -1
  6. sklearnex/basic_statistics/__init__.py +0 -1
  7. sklearnex/cluster/__init__.py +0 -1
  8. sklearnex/cluster/dbscan.py +2 -1
  9. sklearnex/cluster/k_means.py +0 -1
  10. sklearnex/cluster/tests/test_dbscan.py +0 -1
  11. sklearnex/cluster/tests/test_kmeans.py +0 -1
  12. sklearnex/covariance/__init__.py +19 -0
  13. sklearnex/covariance/incremental_covariance.py +130 -0
  14. sklearnex/covariance/tests/test_incremental_covariance.py +143 -0
  15. sklearnex/decomposition/__init__.py +0 -1
  16. sklearnex/decomposition/pca.py +0 -1
  17. sklearnex/decomposition/tests/test_pca.py +0 -1
  18. sklearnex/dispatcher.py +35 -1
  19. sklearnex/ensemble/__init__.py +0 -1
  20. sklearnex/ensemble/_forest.py +17 -2
  21. sklearnex/ensemble/tests/test_forest.py +0 -1
  22. sklearnex/glob/__main__.py +0 -1
  23. sklearnex/glob/dispatcher.py +0 -1
  24. sklearnex/linear_model/__init__.py +1 -3
  25. sklearnex/linear_model/coordinate_descent.py +0 -1
  26. sklearnex/linear_model/linear.py +9 -1
  27. sklearnex/linear_model/logistic_path.py +0 -1
  28. sklearnex/linear_model/logistic_regression.py +333 -0
  29. sklearnex/linear_model/ridge.py +0 -1
  30. sklearnex/linear_model/tests/test_linear.py +8 -3
  31. sklearnex/linear_model/tests/test_logreg.py +70 -6
  32. sklearnex/manifold/__init__.py +0 -1
  33. sklearnex/manifold/t_sne.py +0 -1
  34. sklearnex/manifold/tests/test_tsne.py +0 -1
  35. sklearnex/metrics/__init__.py +0 -1
  36. sklearnex/metrics/pairwise.py +0 -1
  37. sklearnex/metrics/ranking.py +0 -1
  38. sklearnex/metrics/tests/test_metrics.py +0 -1
  39. sklearnex/model_selection/__init__.py +0 -1
  40. sklearnex/model_selection/split.py +0 -1
  41. sklearnex/model_selection/tests/test_model_selection.py +0 -1
  42. sklearnex/neighbors/__init__.py +1 -2
  43. sklearnex/neighbors/_lof.py +167 -0
  44. sklearnex/neighbors/common.py +1 -2
  45. sklearnex/neighbors/knn_classification.py +5 -4
  46. sklearnex/neighbors/knn_regression.py +5 -4
  47. sklearnex/neighbors/knn_unsupervised.py +4 -3
  48. sklearnex/neighbors/tests/test_neighbors.py +12 -12
  49. sklearnex/preview/__init__.py +1 -2
  50. sklearnex/preview/cluster/__init__.py +0 -1
  51. sklearnex/preview/cluster/k_means.py +2 -1
  52. sklearnex/preview/covariance/__init__.py +19 -0
  53. sklearnex/preview/covariance/covariance.py +132 -0
  54. sklearnex/preview/covariance/tests/test_covariance.py +53 -0
  55. sklearnex/preview/decomposition/__init__.py +0 -1
  56. sklearnex/preview/decomposition/pca.py +43 -45
  57. sklearnex/preview/decomposition/tests/test_preview_pca.py +7 -3
  58. sklearnex/spmd/__init__.py +1 -0
  59. sklearnex/spmd/covariance/__init__.py +19 -0
  60. sklearnex/spmd/covariance/covariance.py +21 -0
  61. sklearnex/spmd/linear_model/__init__.py +2 -1
  62. sklearnex/spmd/linear_model/logistic_regression.py +21 -0
  63. sklearnex/svm/__init__.py +0 -1
  64. sklearnex/svm/nusvc.py +4 -0
  65. sklearnex/svm/nusvr.py +2 -0
  66. sklearnex/svm/svc.py +5 -1
  67. sklearnex/svm/svr.py +2 -0
  68. sklearnex/svm/tests/test_svm.py +0 -1
  69. sklearnex/tests/test_memory_usage.py +1 -4
  70. sklearnex/tests/test_monkeypatch.py +46 -16
  71. sklearnex/tests/test_n_jobs_support.py +93 -0
  72. sklearnex/tests/test_patching.py +19 -5
  73. sklearnex/utils/validation.py +0 -1
  74. scikit_learn_intelex-2024.0.1.dist-info/RECORD +0 -90
  75. sklearnex/neighbors/lof.py +0 -437
  76. {scikit_learn_intelex-2024.0.1.dist-info → scikit_learn_intelex-2024.2.0.dist-info}/LICENSE.txt +0 -0
  77. {scikit_learn_intelex-2024.0.1.dist-info → scikit_learn_intelex-2024.2.0.dist-info}/WHEEL +0 -0
  78. {scikit_learn_intelex-2024.0.1.dist-info → scikit_learn_intelex-2024.2.0.dist-info}/top_level.txt +0 -0
@@ -1,90 +0,0 @@
1
- sklearnex/__init__.py,sha256=tEVwU6DfbDy6ZRz-ii8lKaNvvSeACNL7ckci-Mxgk9I,1580
2
- sklearnex/__main__.py,sha256=8OjFE_Dr4GxqRHE407tvqoVlaQ3Tq7OMLoVafTuwFlg,1943
3
- sklearnex/_config.py,sha256=6WS3UuS4-0DxIJyGn7yQMosj-mGkLybLQrg3W7dED5o,3928
4
- sklearnex/_device_offload.py,sha256=J0tZqj6tfvIFonWR01PadtTLgloQk_QEfXeCoqEvJlk,7710
5
- sklearnex/_utils.py,sha256=hpPk7iIEMOUSzK6YnSNBdpJqUWD6BRPgJLZS-0R_C94,3401
6
- sklearnex/dispatcher.py,sha256=RpmYFWWxyv-FQujLxMm88nAdle0x2mw8WMl4u4Ys3D4,11797
7
- sklearnex/basic_statistics/__init__.py,sha256=vR2aU4OXaukmuNhI1BgAZNwQcjXBGqjTrxoU0zv6AsU,843
8
- sklearnex/basic_statistics/basic_statistics.py,sha256=j5jBZ3DgXjoyjCBEFfYQHyl3LgLXEWWFnNHwInThdZw,796
9
- sklearnex/cluster/__init__.py,sha256=0wLPkqPWr6O3-SaL6bshmuuLN2i61WYlnCKuTHDx2Eg,876
10
- sklearnex/cluster/dbscan.py,sha256=2wc8mi0OTsjmGGyNJViyBv_L906xGq4NscHb7IuyGbE,6625
11
- sklearnex/cluster/k_means.py,sha256=1NQNXdyBDX7XrrdUB8kuU4z2pHOSqK2TbJtRrU1sltQ,829
12
- sklearnex/cluster/tests/test_dbscan.py,sha256=N04puPOBMI0aW2w19AHI17iqyQFMeoebJNwxzcmR9qY,1487
13
- sklearnex/cluster/tests/test_kmeans.py,sha256=SOKXULDw_h0YTOnUKMJ3e5tUobdYffsnSa6-bTTzy1A,1236
14
- sklearnex/decomposition/__init__.py,sha256=iWLonuyjtG2OtGodiWdgHsylgCODZEd4T-7BynHRJlc,828
15
- sklearnex/decomposition/pca.py,sha256=JXCmMFf6MFSYMh3dej5-A6mQN8q8RMAB3LAxk1Fb4Qg,832
16
- sklearnex/decomposition/tests/test_pca.py,sha256=oYsMN7BtqfBqR1Ubsmv6it46R7KdMQWF4ozi16p0iYE,1169
17
- sklearnex/doc/third-party-programs.txt,sha256=qA1XbOqYkMRnp29p8VxXjfcH0kHE8NSO5s2heea83-8,21773
18
- sklearnex/ensemble/__init__.py,sha256=YgWzjycWS5jWcGr52fjqnnU2RJbn9yoiFgiqcLbXEf4,1058
19
- sklearnex/ensemble/_forest.py,sha256=mFf7byarVtAUGQdfDSIyvs6P4cj9w2tDVHjnUiKke3g,69905
20
- sklearnex/ensemble/tests/test_forest.py,sha256=STPvCRAlxBaKl229jPF9bIZ-L9KqnwK_6rthUg3uyi0,4539
21
- sklearnex/glob/__main__.py,sha256=aeuJrm_SpvNje7wNhuI8wMxt2eJFPv-sdGJoCH6YDpA,2554
22
- sklearnex/glob/dispatcher.py,sha256=xcorUAME9Iex2AgROH20GV4z2RNiXrBL4TlFkBVgnSI,3041
23
- sklearnex/linear_model/__init__.py,sha256=jTSIlC5SusySbs1ertugjQA2z_7YRcvWQFOpsVDy5tU,1123
24
- sklearnex/linear_model/coordinate_descent.py,sha256=l_8PcqbCIgVKEuV_X7nbT2kfvQlmDBKWccTo5N-3Gr4,845
25
- sklearnex/linear_model/linear.py,sha256=_9rUZzhCasNYZL8yB20eqMS_odZrlgf1uJF4m6-aYls,13488
26
- sklearnex/linear_model/logistic_path.py,sha256=tcJTtn1jaUFcAozVI9IVfPoJSzAvQ_NMavW40TEEvSc,872
27
- sklearnex/linear_model/ridge.py,sha256=XHSwzQc1k8PkYUDNGvodRG2EgsIJJYNNOXvXyf_4o5s,833
28
- sklearnex/linear_model/tests/test_linear.py,sha256=sxivv1E6O33BOphV-W3xxUs52-3k9qEFIbzCDqyV_Yo,2924
29
- sklearnex/linear_model/tests/test_logreg.py,sha256=PDJZiVu0TFCh995-7OCud3-XnraJzfHTIIp_SORfc70,1198
30
- sklearnex/manifold/__init__.py,sha256=6KtNG4ZRbJUg_Iu1AdCz4h5fM5GhMz-2e4PMOOVdKCE,832
31
- sklearnex/manifold/t_sne.py,sha256=AaHGbnbqQFX_9zxqi-lShihoB7Rs4iDDWD8pftycxtU,828
32
- sklearnex/manifold/tests/test_tsne.py,sha256=_6eB-NPHvDFRuaXIoVAOOUe0DY3u2G8dVuwivp9UHSQ,1086
33
- sklearnex/metrics/__init__.py,sha256=Ktd6l7mbJwSd7y23z90mC43NbnbJfzYZU8iN9wuBaFM,930
34
- sklearnex/metrics/pairwise.py,sha256=8zSV7GhfBI2I-4eJ15CTs2RWIXRo5B1K3fXjPQHAqMI,841
35
- sklearnex/metrics/ranking.py,sha256=9QcnfnNbQIeLLtH5GbA0XDw5LPwpx9ONDp5Pn8J964g,836
36
- sklearnex/metrics/tests/test_metrics.py,sha256=tZYVjntV60QQPRJhidWF6071rG5kZfRzYi4hMR4dK18,1602
37
- sklearnex/model_selection/__init__.py,sha256=Frgfgmn9VxIZZUDc7QuwiIegeUcVB_QzVYMbuzbFtzQ,865
38
- sklearnex/model_selection/split.py,sha256=KFcH_Khll_tPwGVKzzxJaH-4UEOPLXLQOU-sk-2wfuU,847
39
- sklearnex/model_selection/tests/test_model_selection.py,sha256=rDJrR3b8vmGuOneQZAEV6MiERN2Uzu6NpG46d__C_aY,1361
40
- sklearnex/neighbors/__init__.py,sha256=ECtrr26pXdyHiRDGZ5TNI3vMo6Lc9FV_ObjJBQeuCbw,1100
41
- sklearnex/neighbors/common.py,sha256=m6vHNHT_wnZmKf3DfkJbfnARuMtwXuI4Hs6ff6060sM,10805
42
- sklearnex/neighbors/knn_classification.py,sha256=Vv4GVTcTSwjmXIeyqRY2DLn0waOW5Vff_AA3r1vz5To,10908
43
- sklearnex/neighbors/knn_regression.py,sha256=VQBiT7izukJ30Xq6-5Aft8zGkCODyuEoBR2pdr8H8ag,9827
44
- sklearnex/neighbors/knn_unsupervised.py,sha256=NjhAzqn6L3CAICFDn4AMrSiqz5EN3Sw4zlhFZN2f7DQ,7497
45
- sklearnex/neighbors/lof.py,sha256=l6m3qk8ikDStT6KYQGd_cnw1ao4U0qYZi6cTpXCgcuo,16287
46
- sklearnex/neighbors/tests/test_neighbors.py,sha256=4DfPmbm2_95oSmjecrHqICAvUgts_DqxZzdP0c0cBSU,3588
47
- sklearnex/preview/__init__.py,sha256=wHze7Itms2CEgqDAyVsgUUkoby4V29DQ3jq7sWjM7sw,805
48
- sklearnex/preview/cluster/__init__.py,sha256=DVm0fd9GY7NPqWivFaFDRC8-RgYmx8_LGrb_9lQO5H8,816
49
- sklearnex/preview/cluster/_common.py,sha256=bgpzijxgyrAtdNCCHyCNsZ-N70KQYNwMuoCTNdUna6o,2718
50
- sklearnex/preview/cluster/k_means.py,sha256=6PHbqYkoLB9HQnwrvGRsuD65Dn9Vg_GwWPk0s5rZoZA,12908
51
- sklearnex/preview/decomposition/__init__.py,sha256=EqdGlm-BdYa7B68ANaBAJmVrpXnI2IGeEqYDJKCLmis,828
52
- sklearnex/preview/decomposition/pca.py,sha256=yzGY5jOwDPfMadB86HWpCOGklf6im39N5xeJdXVqsLw,14579
53
- sklearnex/preview/decomposition/tests/test_preview_pca.py,sha256=lTcgVUhmGq_tLmKvB5YaIjqQ5zxrU0yciFW02cMnoDk,1539
54
- sklearnex/spmd/__init__.py,sha256=8cxQy-oCFy1TJto0qoRf4lt98siPx2c-YV99YC-sk6s,871
55
- sklearnex/spmd/basic_statistics/__init__.py,sha256=NA5RGlwcp27UEeCgz0ngzYYd3MAIRpxlTy86uhM2-RE,821
56
- sklearnex/spmd/basic_statistics/basic_statistics.py,sha256=_dQ9mhVYxeuChATEpAmHpXDpgW3YvtK1qrG-kLr2MtI,886
57
- sklearnex/spmd/cluster/__init__.py,sha256=qBBfrCHh6_82EROLbu54XKk7SmmRwS1XJyCj0zwkoUw,1029
58
- sklearnex/spmd/cluster/dbscan.py,sha256=23YNzPhx4MZijU0md-E3ZkHpTkhUh5cmtS3loHe-KhI,1824
59
- sklearnex/spmd/cluster/kmeans.py,sha256=Rnb9tr9LXVto5vCAumk7ZJfa9BYYDhdD1qUWL-QK5bY,868
60
- sklearnex/spmd/decomposition/__init__.py,sha256=dBh0ZMIiaqdf3DKbt8FWNB2K9Iacs395m8OxaDFQg_M,784
61
- sklearnex/spmd/decomposition/pca.py,sha256=CUrsVD2jae-A9H8RB_emza_fe82CwnFa5PEy0fW_EZ8,871
62
- sklearnex/spmd/ensemble/__init__.py,sha256=B3yi7hWoVogMIiw0QRT_x5atsAFS-OO72YPLGeUQJ8M,873
63
- sklearnex/spmd/ensemble/forest.py,sha256=ao6lyzcxoRW-RG9xIYwtDFyM7JIjlF8wmQKpOv_oSRQ,3113
64
- sklearnex/spmd/linear_model/__init__.py,sha256=eCJGleo00O6c280G97i18KNmSvi6uwX7wM1ZN5JMqhw,819
65
- sklearnex/spmd/linear_model/linear_model.py,sha256=7QPCIQTWKBiZBTDZZbpZXi-REgxQCfRMt6rHPJAnc5E,883
66
- sklearnex/spmd/neighbors/__init__.py,sha256=S16sH8N_18LN_8AgC_wGK5EDSNyuN-F-gI6GVlaiWVE,906
67
- sklearnex/spmd/neighbors/neighbors.py,sha256=SiKAS_RVt34MUcGytBS5pHnI_5vFNxJn8jqt1MOhDh8,940
68
- sklearnex/svm/__init__.py,sha256=X-iZnbXkz-ulBilzsBJXKC1hDzH5E7epiQbk-LxmT88,1079
69
- sklearnex/svm/_common.py,sha256=Dt1Iyz1g04zOW6hn9cHa9ruzM_MHAIq0ZEEIxh5s7nI,7167
70
- sklearnex/svm/nusvc.py,sha256=JEITTg810wcFBLOfmGy_3VTcKVlRai2GTrNYBJEWu7E,8850
71
- sklearnex/svm/nusvr.py,sha256=WqIBW2ALTq1J1HEjeL_lcRJph553qWLFOkJ1gdETj7E,5124
72
- sklearnex/svm/svc.py,sha256=Yph6bTgqahimBSHLCod0Tywv3Nw-oFoAPD1DTHfxSuY,10132
73
- sklearnex/svm/svr.py,sha256=z3MDzTtbod2wt22TUzgBhK5L_XoRyNTCvG31ijl4280,5128
74
- sklearnex/svm/tests/test_svm.py,sha256=9_jjPNCmlGnxgt6Ga1vOauKF3wGE-KYQ4jTdZUBxNXg,4213
75
- sklearnex/tests/_models_info.py,sha256=xhjvnU3TvQg8J5Cih2hphWAOSsT8DnKmCyYbtwa0Qvs,4785
76
- sklearnex/tests/test_config.py,sha256=SnSJjxAAysISDyC3bYKSJiRHStkB9X-yjLeF11LpRog,1372
77
- sklearnex/tests/test_memory_usage.py,sha256=-9S5EY9Ivy6WRW18IJEY1uyJxo9073GwXHybnFrJULc,7381
78
- sklearnex/tests/test_monkeypatch.py,sha256=YlnYNEFNE9jUZmWSHt0JJl8hseWQmipjIvvGkhxJk6I,7586
79
- sklearnex/tests/test_parallel.py,sha256=bMu22noUvGiDX4oyxKIHPiOEoBP9lRQQUq6wq8ZD730,1776
80
- sklearnex/tests/test_patching.py,sha256=6H0Um6N5qhD5OZ875HhAcKPFXM81les5XWCCsaNyMb8,3759
81
- sklearnex/tests/test_run_to_run_stability_tests.py,sha256=4HDOeJruA1EDILbyQJtsHFmEXC0D1upSHuOT-KyTlEc,14008
82
- sklearnex/tests/utils/_launch_algorithms.py,sha256=pJT5tAW9rWvk7GT37R-B0-e8SLz8e9FSZw8yu4LWNJ4,3724
83
- sklearnex/utils/__init__.py,sha256=I8mbJQ3Zsm_F3sCLAhJQb7tUrG30kVsQ-wZoqA8vDdA,842
84
- sklearnex/utils/parallel.py,sha256=VBcS-KUdyq7XpJUN6ygmNjyWtYLroghbvCxQ8nVU3YI,2085
85
- sklearnex/utils/validation.py,sha256=w1MhNVEK59O5xK1wwzej9llsHXCU2yHjhcnskZseDdg,850
86
- scikit_learn_intelex-2024.0.1.dist-info/LICENSE.txt,sha256=7micbUpzQXphq9e_2oL7PpZcvoXzPuQHIDEXyKXC81s,10797
87
- scikit_learn_intelex-2024.0.1.dist-info/METADATA,sha256=kRJGAK0Larrj8IVlJuGctIcjnX00-W1dKTVMpodGcMI,12449
88
- scikit_learn_intelex-2024.0.1.dist-info/WHEEL,sha256=rxMEw7jRW2YnjujGudhK0a-ZC6J_VMIRJJ7uhbmewD4,107
89
- scikit_learn_intelex-2024.0.1.dist-info/top_level.txt,sha256=kzKChSWGJEYFmdj5PwE63HNuP_PVOhWfD32ytH9rL9Q,10
90
- scikit_learn_intelex-2024.0.1.dist-info/RECORD,,
@@ -1,437 +0,0 @@
1
- #!/usr/bin/env python
2
- # ===============================================================================
3
- # Copyright 2023 Intel Corporation
4
- #
5
- # Licensed under the Apache License, Version 2.0 (the "License");
6
- # you may not use this file except in compliance with the License.
7
- # You may obtain a copy of the License at
8
- #
9
- # http://www.apache.org/licenses/LICENSE-2.0
10
- #
11
- # Unless required by applicable law or agreed to in writing, software
12
- # distributed under the License is distributed on an "AS IS" BASIS,
13
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- # See the License for the specific language governing permissions and
15
- # limitations under the License.
16
- # ===============================================================================
17
-
18
- import warnings
19
-
20
- import numpy as np
21
- from sklearn.neighbors._lof import LocalOutlierFactor as sklearn_LocalOutlierFactor
22
-
23
- from .knn_unsupervised import NearestNeighbors
24
-
25
- try:
26
- from sklearn.utils.metaestimators import available_if
27
- except ImportError:
28
- pass
29
-
30
- from sklearn.utils import check_array
31
- from sklearn.utils.validation import check_is_fitted
32
-
33
- from daal4py.sklearn._utils import sklearn_check_version
34
-
35
- from .._config import config_context
36
- from .._device_offload import dispatch, wrap_output_data
37
- from .._utils import PatchingConditionsChain
38
-
39
- if sklearn_check_version("1.0"):
40
-
41
- class LocalOutlierFactor(sklearn_LocalOutlierFactor):
42
- if sklearn_check_version("1.2"):
43
- _parameter_constraints: dict = {
44
- **sklearn_LocalOutlierFactor._parameter_constraints
45
- }
46
-
47
- def __init__(
48
- self,
49
- n_neighbors=20,
50
- *,
51
- algorithm="auto",
52
- leaf_size=30,
53
- metric="minkowski",
54
- p=2,
55
- metric_params=None,
56
- contamination="auto",
57
- novelty=False,
58
- n_jobs=None,
59
- ):
60
- super().__init__(
61
- n_neighbors=n_neighbors,
62
- algorithm=algorithm,
63
- leaf_size=leaf_size,
64
- metric=metric,
65
- p=p,
66
- metric_params=metric_params,
67
- n_jobs=n_jobs,
68
- contamination=contamination,
69
- novelty=novelty,
70
- )
71
-
72
- def _fit(self, X, y, queue=None):
73
- with config_context(target_offload=queue):
74
- if sklearn_check_version("1.2"):
75
- self._validate_params()
76
- self._knn = NearestNeighbors(
77
- n_neighbors=self.n_neighbors,
78
- algorithm=self.algorithm,
79
- leaf_size=self.leaf_size,
80
- metric=self.metric,
81
- p=self.p,
82
- metric_params=self.metric_params,
83
- n_jobs=self.n_jobs,
84
- )
85
- self._knn.fit(X)
86
-
87
- if self.contamination != "auto":
88
- if not (0.0 < self.contamination <= 0.5):
89
- raise ValueError(
90
- "contamination must be in (0, 0.5], "
91
- "got: %f" % self.contamination
92
- )
93
-
94
- n_samples = self._knn.n_samples_fit_
95
-
96
- if self.n_neighbors > n_samples:
97
- warnings.warn(
98
- "n_neighbors (%s) is greater than the "
99
- "total number of samples (%s). n_neighbors "
100
- "will be set to (n_samples - 1) for estimation."
101
- % (self.n_neighbors, n_samples)
102
- )
103
- self.n_neighbors_ = max(1, min(self.n_neighbors, n_samples - 1))
104
-
105
- self._distances_fit_X_, _neighbors_indices_fit_X_ = self._knn.kneighbors(
106
- n_neighbors=self.n_neighbors_
107
- )
108
-
109
- self._lrd = self._local_reachability_density(
110
- self._distances_fit_X_, _neighbors_indices_fit_X_
111
- )
112
-
113
- # Compute lof score over training samples to define offset_:
114
- lrd_ratios_array = (
115
- self._lrd[_neighbors_indices_fit_X_] / self._lrd[:, np.newaxis]
116
- )
117
-
118
- self.negative_outlier_factor_ = -np.mean(lrd_ratios_array, axis=1)
119
-
120
- if self.contamination == "auto":
121
- # inliers score around -1 (the higher, the less abnormal).
122
- self.offset_ = -1.5
123
- else:
124
- self.offset_ = np.percentile(
125
- self.negative_outlier_factor_, 100.0 * self.contamination
126
- )
127
-
128
- for knn_prop_name in self._knn.__dict__.keys():
129
- if knn_prop_name not in self.__dict__.keys():
130
- setattr(self, knn_prop_name, self._knn.__dict__[knn_prop_name])
131
-
132
- return self
133
-
134
- def fit(self, X, y=None):
135
- return dispatch(
136
- self,
137
- "neighbors.LocalOutlierFactor.fit",
138
- {
139
- "onedal": self.__class__._fit,
140
- "sklearn": None,
141
- },
142
- X,
143
- y,
144
- )
145
-
146
- def _onedal_predict(self, X, queue=None):
147
- with config_context(target_offload=queue):
148
- check_is_fitted(self)
149
-
150
- if X is not None:
151
- X = check_array(X, accept_sparse="csr")
152
- is_inlier = np.ones(X.shape[0], dtype=int)
153
- is_inlier[self.decision_function(X) < 0] = -1
154
- else:
155
- is_inlier = np.ones(self._knn.n_samples_fit_, dtype=int)
156
- is_inlier[self.negative_outlier_factor_ < self.offset_] = -1
157
-
158
- return is_inlier
159
-
160
- @wrap_output_data
161
- def _predict(self, X=None):
162
- return dispatch(
163
- self,
164
- "neighbors.LocalOutlierFactor.predict",
165
- {
166
- "onedal": self.__class__._onedal_predict,
167
- "sklearn": None,
168
- },
169
- X,
170
- )
171
-
172
- def _score_samples(self, X, queue=None):
173
- with config_context(target_offload=queue):
174
- check_is_fitted(self)
175
- X = check_array(X, accept_sparse="csr")
176
-
177
- distances_X, neighbors_indices_X = self._knn.kneighbors(
178
- X, n_neighbors=self.n_neighbors_
179
- )
180
- X_lrd = self._local_reachability_density(distances_X, neighbors_indices_X)
181
-
182
- lrd_ratios_array = self._lrd[neighbors_indices_X] / X_lrd[:, np.newaxis]
183
-
184
- # as bigger is better:
185
- return -np.mean(lrd_ratios_array, axis=1)
186
-
187
- def _check_novelty_score_samples(self):
188
- if not self.novelty:
189
- msg = (
190
- "score_samples is not available when novelty=False. The "
191
- "scores of the training samples are always available "
192
- "through the negative_outlier_factor_ attribute. Use "
193
- "novelty=True if you want to use LOF for novelty detection "
194
- "and compute score_samples for new unseen data."
195
- )
196
- raise AttributeError(msg)
197
- return True
198
-
199
- @available_if(_check_novelty_score_samples)
200
- @wrap_output_data
201
- def score_samples(self, X):
202
- return dispatch(
203
- self,
204
- "neighbors.LocalOutlierFactor.score_samples",
205
- {
206
- "onedal": self.__class__._score_samples,
207
- "sklearn": None,
208
- },
209
- X,
210
- )
211
-
212
- def _check_novelty_fit_predict(self):
213
- if self.novelty:
214
- msg = (
215
- "fit_predict is not available when novelty=True. Use "
216
- "novelty=False if you want to predict on the training set."
217
- )
218
- raise AttributeError(msg)
219
- return True
220
-
221
- def _fit_predict(self, X, y, queue=None):
222
- with config_context(target_offload=queue):
223
- return self.fit(X)._predict()
224
-
225
- @available_if(_check_novelty_fit_predict)
226
- @wrap_output_data
227
- def fit_predict(self, X, y=None):
228
- return dispatch(
229
- self,
230
- "neighbors.LocalOutlierFactor.fit_predict",
231
- {
232
- "onedal": self.__class__._fit_predict,
233
- "sklearn": None,
234
- },
235
- X,
236
- y,
237
- )
238
-
239
- def _onedal_gpu_supported(self, method_name, *data):
240
- class_name = self.__class__.__name__
241
- patching_status = PatchingConditionsChain(
242
- f"sklearn.neighbors.{class_name}.{method_name}"
243
- )
244
- return patching_status
245
-
246
- def _onedal_cpu_supported(self, method_name, *data):
247
- class_name = self.__class__.__name__
248
- patching_status = PatchingConditionsChain(
249
- f"sklearn.neighbors.{class_name}.{method_name}"
250
- )
251
- return patching_status
252
-
253
- else:
254
-
255
- class LocalOutlierFactor(sklearn_LocalOutlierFactor):
256
- def __init__(
257
- self,
258
- n_neighbors=20,
259
- *,
260
- algorithm="auto",
261
- leaf_size=30,
262
- metric="minkowski",
263
- p=2,
264
- metric_params=None,
265
- contamination="auto",
266
- novelty=False,
267
- n_jobs=None,
268
- ):
269
- super().__init__(
270
- n_neighbors=n_neighbors,
271
- algorithm=algorithm,
272
- leaf_size=leaf_size,
273
- metric=metric,
274
- p=p,
275
- metric_params=metric_params,
276
- n_jobs=n_jobs,
277
- contamination=contamination,
278
- novelty=novelty,
279
- )
280
-
281
- def _fit(self, X, y=None, queue=None):
282
- with config_context(target_offload=queue):
283
- self._knn = NearestNeighbors(
284
- n_neighbors=self.n_neighbors,
285
- algorithm=self.algorithm,
286
- leaf_size=self.leaf_size,
287
- metric=self.metric,
288
- p=self.p,
289
- metric_params=self.metric_params,
290
- n_jobs=self.n_jobs,
291
- )
292
- self._knn.fit(X)
293
-
294
- if self.contamination != "auto":
295
- if not (0.0 < self.contamination <= 0.5):
296
- raise ValueError(
297
- "contamination must be in (0, 0.5], "
298
- "got: %f" % self.contamination
299
- )
300
-
301
- n_samples = self._knn.n_samples_fit_
302
-
303
- if self.n_neighbors > n_samples:
304
- warnings.warn(
305
- "n_neighbors (%s) is greater than the "
306
- "total number of samples (%s). n_neighbors "
307
- "will be set to (n_samples - 1) for estimation."
308
- % (self.n_neighbors, n_samples)
309
- )
310
- self.n_neighbors_ = max(1, min(self.n_neighbors, n_samples - 1))
311
-
312
- self._distances_fit_X_, _neighbors_indices_fit_X_ = self._knn.kneighbors(
313
- n_neighbors=self.n_neighbors_
314
- )
315
-
316
- self._lrd = self._local_reachability_density(
317
- self._distances_fit_X_, _neighbors_indices_fit_X_
318
- )
319
-
320
- # Compute lof score over training samples to define offset_:
321
- lrd_ratios_array = (
322
- self._lrd[_neighbors_indices_fit_X_] / self._lrd[:, np.newaxis]
323
- )
324
-
325
- self.negative_outlier_factor_ = -np.mean(lrd_ratios_array, axis=1)
326
-
327
- if self.contamination == "auto":
328
- # inliers score around -1 (the higher, the less abnormal).
329
- self.offset_ = -1.5
330
- else:
331
- self.offset_ = np.percentile(
332
- self.negative_outlier_factor_, 100.0 * self.contamination
333
- )
334
-
335
- for knn_prop_name in self._knn.__dict__.keys():
336
- if knn_prop_name not in self.__dict__.keys():
337
- setattr(self, knn_prop_name, self._knn.__dict__[knn_prop_name])
338
-
339
- return self
340
-
341
- def fit(self, X, y=None):
342
- return dispatch(
343
- self,
344
- "neighbors.LocalOutlierFactor.fit",
345
- {
346
- "onedal": self.__class__._fit,
347
- "sklearn": None,
348
- },
349
- X,
350
- y,
351
- )
352
-
353
- def _onedal_predict(self, X, queue=None):
354
- with config_context(target_offload=queue):
355
- check_is_fitted(self)
356
-
357
- if X is not None:
358
- X = check_array(X, accept_sparse="csr")
359
- is_inlier = np.ones(X.shape[0], dtype=int)
360
- is_inlier[self.decision_function(X) < 0] = -1
361
- else:
362
- is_inlier = np.ones(self._knn.n_samples_fit_, dtype=int)
363
- is_inlier[self.negative_outlier_factor_ < self.offset_] = -1
364
-
365
- return is_inlier
366
-
367
- @wrap_output_data
368
- def _predict(self, X=None):
369
- return dispatch(
370
- self,
371
- "neighbors.LocalOutlierFactor.predict",
372
- {
373
- "onedal": self.__class__._onedal_predict,
374
- "sklearn": None,
375
- },
376
- X,
377
- )
378
-
379
- def _onedal_score_samples(self, X, queue=None):
380
- with config_context(target_offload=queue):
381
- check_is_fitted(self)
382
- X = check_array(X, accept_sparse="csr")
383
-
384
- distances_X, neighbors_indices_X = self._knn.kneighbors(
385
- X, n_neighbors=self.n_neighbors_
386
- )
387
- X_lrd = self._local_reachability_density(distances_X, neighbors_indices_X)
388
-
389
- lrd_ratios_array = self._lrd[neighbors_indices_X] / X_lrd[:, np.newaxis]
390
-
391
- # as bigger is better:
392
- return -np.mean(lrd_ratios_array, axis=1)
393
-
394
- @wrap_output_data
395
- def _score_samples(self, X):
396
- if not self.novelty:
397
- msg = (
398
- "score_samples is not available when novelty=False. The "
399
- "scores of the training samples are always available "
400
- "through the negative_outlier_factor_ attribute. Use "
401
- "novelty=True if you want to use LOF for novelty detection "
402
- "and compute score_samples for new unseen data."
403
- )
404
- raise AttributeError(msg)
405
-
406
- return dispatch(
407
- self,
408
- "neighbors.LocalOutlierFactor.score_samples",
409
- {
410
- "onedal": self.__class__._onedal_score_samples,
411
- "sklearn": None,
412
- },
413
- X,
414
- )
415
-
416
- def _onedal_fit_predict(self, X, y, queue=None):
417
- with config_context(target_offload=queue):
418
- return self.fit(X)._predict()
419
-
420
- @wrap_output_data
421
- def _fit_predict(self, X, y=None):
422
- return dispatch(
423
- self,
424
- "neighbors.LocalOutlierFactor._onedal_fit_predict",
425
- {
426
- "onedal": self.__class__._onedal_fit_predict,
427
- "sklearn": None,
428
- },
429
- X,
430
- y,
431
- )
432
-
433
- def _onedal_gpu_supported(self, method_name, *data):
434
- return True
435
-
436
- def _onedal_cpu_supported(self, method_name, *data):
437
- return True