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.
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/__init__.py +73 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/__main__.py +58 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/_daal4py.cp39-win_amd64.pyd +0 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/doc/third-party-programs.txt +424 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/mb/__init__.py +19 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/mb/model_builders.py +377 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/mpi_transceiver.cp39-win_amd64.pyd +0 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/__init__.py +40 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/_n_jobs_support.py +248 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/_utils.py +245 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/cluster/__init__.py +20 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/cluster/dbscan.py +165 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/cluster/k_means.py +597 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/cluster/tests/test_dbscan.py +109 -0
- {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
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/decomposition/_pca.py +524 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/ensemble/AdaBoostClassifier.py +196 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/ensemble/GBTDAAL.py +337 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/ensemble/__init__.py +27 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/ensemble/_forest.py +1397 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/ensemble/tests/test_decision_forest.py +206 -0
- {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
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/_coordinate_descent.py +848 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/_linear.py +272 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/_ridge.py +325 -0
- 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
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/linear.py +17 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/logistic_loss.py +195 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/logistic_path.py +1026 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/ridge.py +17 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/tests/test_linear.py +208 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/tests/test_ridge.py +69 -0
- {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
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/manifold/_t_sne.py +405 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/metrics/__init__.py +20 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/metrics/_pairwise.py +236 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/metrics/_ranking.py +210 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/model_selection/__init__.py +19 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/model_selection/_split.py +309 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/model_selection/tests/test_split.py +56 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/__init__.py +0 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/dispatcher.py +232 -0
- {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
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/tests/test_monkeypatch.py +71 -0
- {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
- {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
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/__init__.py +21 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/_base.py +503 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/_classification.py +139 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/_regression.py +74 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/_unsupervised.py +55 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/tests/test_kneighbors.py +113 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/svm/__init__.py +19 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/svm/svm.py +734 -0
- {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
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/utils/base.py +75 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/utils/tests/test_utils.py +51 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/daal4py/sklearn/utils/validation.py +693 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/__init__.py +83 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/_config.py +54 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/_device_offload.py +222 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/_onedal_py_dpc.cp39-win_amd64.pyd +0 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/_onedal_py_host.cp39-win_amd64.pyd +0 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/basic_statistics/__init__.py +20 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/basic_statistics/basic_statistics.py +107 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/basic_statistics/incremental_basic_statistics.py +160 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/basic_statistics/tests/test_basic_statistics.py +298 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/basic_statistics/tests/test_incremental_basic_statistics.py +196 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/cluster/__init__.py +27 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/cluster/dbscan.py +110 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/cluster/kmeans.py +564 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/cluster/kmeans_init.py +115 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/cluster/tests/test_dbscan.py +125 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/cluster/tests/test_kmeans.py +88 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/cluster/tests/test_kmeans_init.py +93 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/common/_base.py +38 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/common/_estimator_checks.py +47 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/common/_mixin.py +62 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/common/_policy.py +59 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/common/_spmd_policy.py +30 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/common/hyperparameters.py +125 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/common/tests/test_policy.py +76 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/covariance/__init__.py +20 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/covariance/covariance.py +125 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/covariance/incremental_covariance.py +146 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/covariance/tests/test_covariance.py +50 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/covariance/tests/test_incremental_covariance.py +122 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/datatypes/__init__.py +19 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/datatypes/_data_conversion.py +154 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/datatypes/tests/common.py +126 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/datatypes/tests/test_data.py +414 -0
- {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
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/decomposition/incremental_pca.py +204 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/decomposition/pca.py +186 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/decomposition/tests/test_incremental_pca.py +198 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/ensemble/__init__.py +29 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/ensemble/forest.py +727 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/ensemble/tests/test_random_forest.py +97 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/linear_model/__init__.py +27 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/linear_model/incremental_linear_model.py +258 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/linear_model/linear_model.py +329 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/linear_model/logistic_regression.py +249 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/linear_model/tests/test_incremental_linear_regression.py +168 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/linear_model/tests/test_incremental_ridge_regression.py +107 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/linear_model/tests/test_linear_regression.py +250 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/linear_model/tests/test_logistic_regression.py +95 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/linear_model/tests/test_ridge.py +95 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/neighbors/__init__.py +19 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/neighbors/neighbors.py +767 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/neighbors/tests/test_knn_classification.py +49 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/primitives/__init__.py +27 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/primitives/get_tree.py +25 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/primitives/kernel_functions.py +153 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/primitives/tests/test_kernel_functions.py +159 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/svm/__init__.py +19 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/svm/svm.py +556 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/svm/tests/test_csr_svm.py +351 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/svm/tests/test_nusvc.py +204 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/svm/tests/test_nusvr.py +210 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/svm/tests/test_svc.py +176 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/svm/tests/test_svr.py +243 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/tests/test_common.py +57 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/tests/utils/_dataframes_support.py +162 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/tests/utils/_device_selection.py +102 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/utils/__init__.py +49 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/utils/_array_api.py +81 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/utils/_dpep_helpers.py +56 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/onedal/utils/validation.py +440 -0
- {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/__init__.py +10 -7
- {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/_config.py +22 -16
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/_device_offload.py +126 -0
- {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/_utils.py +27 -4
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/basic_statistics/__init__.py +20 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/basic_statistics/basic_statistics.py +230 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/basic_statistics/incremental_basic_statistics.py +345 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/basic_statistics/tests/test_basic_statistics.py +270 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/basic_statistics/tests/test_incremental_basic_statistics.py +404 -0
- {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/cluster/__init__.py +1 -1
- {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/cluster/dbscan.py +16 -7
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/cluster/k_means.py +395 -0
- {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
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/cluster/tests/test_kmeans.py +159 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/conftest.py +82 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/covariance/incremental_covariance.py +398 -0
- {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
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/decomposition/pca.py +425 -0
- 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
- {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/dispatcher.py +222 -42
- {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/ensemble/_forest.py +249 -182
- {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
- {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/glob/dispatcher.py +16 -2
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/linear_model/__init__.py +32 -0
- {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
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/linear_model/incremental_linear.py +482 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/linear_model/incremental_ridge.py +425 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/linear_model/linear.py +341 -0
- {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
- {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
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_incremental_linear.py +207 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_incremental_ridge.py +153 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_linear.py +167 -0
- {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
- {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
- {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/metrics/pairwise.py +5 -0
- {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/metrics/ranking.py +3 -0
- {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
- {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/neighbors/_lof.py +97 -28
- {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/neighbors/common.py +53 -6
- {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
- {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
- {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
- {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
- {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/preview/__init__.py +1 -1
- {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
- {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
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/preview/decomposition/__init__.py +19 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/preview/decomposition/incremental_pca.py +233 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/preview/decomposition/tests/test_incremental_pca.py +266 -0
- {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
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/preview/linear_model/ridge.py +424 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/preview/linear_model/tests/test_ridge.py +102 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/__init__.py +20 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/incremental_basic_statistics.py +30 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/tests/test_basic_statistics_spmd.py +107 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/tests/test_incremental_basic_statistics_spmd.py +307 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/cluster/tests/test_dbscan_spmd.py +97 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/cluster/tests/test_kmeans_spmd.py +172 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/__init__.py +20 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/incremental_covariance.py +37 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/tests/test_covariance_spmd.py +107 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/tests/test_incremental_covariance_spmd.py +184 -0
- {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
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/decomposition/incremental_pca.py +30 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/decomposition/tests/test_incremental_pca_spmd.py +269 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/decomposition/tests/test_pca_spmd.py +128 -0
- {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
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/ensemble/tests/test_forest_spmd.py +265 -0
- {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
- 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
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/tests/test_incremental_linear_spmd.py +329 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/tests/test_linear_regression_spmd.py +145 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/tests/test_logistic_regression_spmd.py +162 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/spmd/neighbors/tests/test_neighbors_spmd.py +288 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/svm/_common.py +339 -0
- {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/svm/nusvc.py +168 -73
- {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/svm/nusvr.py +71 -66
- {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/svm/svc.py +166 -72
- {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/svm/svr.py +64 -63
- {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
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/test_common.py +390 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/test_config.py +123 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/test_memory_usage.py +379 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/test_monkeypatch.py +276 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/test_n_jobs_support.py +108 -0
- {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
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/test_patching.py +385 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/test_run_to_run_stability.py +321 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/utils/__init__.py +44 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/utils/base.py +371 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/tests/utils/spmd.py +198 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/utils/_array_api.py +82 -0
- scikit_learn_intelex-2025.1.0.data/data/Lib/site-packages/sklearnex/utils/tests/test_finite.py +89 -0
- {scikit_learn_intelex-2024.2.0.dist-info → scikit_learn_intelex-2025.1.0.dist-info}/METADATA +231 -230
- scikit_learn_intelex-2025.1.0.dist-info/RECORD +257 -0
- {scikit_learn_intelex-2024.2.0.dist-info → scikit_learn_intelex-2025.1.0.dist-info}/WHEEL +1 -1
- scikit_learn_intelex-2024.2.0.data/data/Lib/site-packages/sklearnex/_device_offload.py +0 -223
- scikit_learn_intelex-2024.2.0.data/data/Lib/site-packages/sklearnex/cluster/k_means.py +0 -17
- scikit_learn_intelex-2024.2.0.data/data/Lib/site-packages/sklearnex/cluster/tests/test_kmeans.py +0 -30
- scikit_learn_intelex-2024.2.0.data/data/Lib/site-packages/sklearnex/covariance/incremental_covariance.py +0 -130
- scikit_learn_intelex-2024.2.0.data/data/Lib/site-packages/sklearnex/decomposition/pca.py +0 -17
- scikit_learn_intelex-2024.2.0.data/data/Lib/site-packages/sklearnex/decomposition/tests/test_pca.py +0 -27
- scikit_learn_intelex-2024.2.0.data/data/Lib/site-packages/sklearnex/linear_model/linear.py +0 -381
- scikit_learn_intelex-2024.2.0.data/data/Lib/site-packages/sklearnex/linear_model/logistic_path.py +0 -17
- scikit_learn_intelex-2024.2.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_linear.py +0 -82
- scikit_learn_intelex-2024.2.0.data/data/Lib/site-packages/sklearnex/preview/cluster/_common.py +0 -84
- scikit_learn_intelex-2024.2.0.data/data/Lib/site-packages/sklearnex/preview/cluster/k_means.py +0 -371
- scikit_learn_intelex-2024.2.0.data/data/Lib/site-packages/sklearnex/preview/decomposition/pca.py +0 -374
- scikit_learn_intelex-2024.2.0.data/data/Lib/site-packages/sklearnex/svm/_common.py +0 -188
- scikit_learn_intelex-2024.2.0.data/data/Lib/site-packages/sklearnex/tests/test_memory_usage.py +0 -222
- scikit_learn_intelex-2024.2.0.data/data/Lib/site-packages/sklearnex/tests/test_monkeypatch.py +0 -240
- scikit_learn_intelex-2024.2.0.data/data/Lib/site-packages/sklearnex/tests/test_n_jobs_support.py +0 -93
- scikit_learn_intelex-2024.2.0.data/data/Lib/site-packages/sklearnex/tests/test_run_to_run_stability_tests.py +0 -428
- scikit_learn_intelex-2024.2.0.dist-info/RECORD +0 -101
- {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/__main__.py +0 -0
- {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/covariance/__init__.py +0 -0
- {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/decomposition/__init__.py +0 -0
- {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
- {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/ensemble/__init__.py +0 -0
- {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/glob/__main__.py +0 -0
- {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/manifold/__init__.py +0 -0
- {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
- {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/metrics/__init__.py +0 -0
- {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
- {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
- {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
- {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/neighbors/__init__.py +0 -0
- {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
- {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/spmd/__init__.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/svm/__init__.py +0 -0
- {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/utils/__init__.py +0 -0
- {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/utils/parallel.py +0 -0
- {scikit_learn_intelex-2024.2.0.data → scikit_learn_intelex-2025.1.0.data}/data/Lib/site-packages/sklearnex/utils/validation.py +0 -0
- {scikit_learn_intelex-2024.2.0.dist-info → scikit_learn_intelex-2025.1.0.dist-info}/LICENSE.txt +0 -0
- {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
|
|
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
|
|
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 ..
|
|
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
|
-
|
|
33
|
-
|
|
37
|
+
|
|
38
|
+
@control_n_jobs(decorated_methods=["fit", "kneighbors", "_kneighbors"])
|
|
39
|
+
class LocalOutlierFactor(KNeighborsDispatchingBase, _sklearn_LocalOutlierFactor):
|
|
34
40
|
__doc__ = (
|
|
35
|
-
|
|
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
|
-
**
|
|
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":
|
|
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 =
|
|
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(
|
|
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
|
-
|
|
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":
|
|
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
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
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__
|