scikit-learn-intelex 2024.4.0__py312-none-win_amd64.whl → 2025.10.0__py312-none-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/__init__.py +73 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/__main__.py +58 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/_daal4py.cp312-win_amd64.pyd +0 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/mb/__init__.py +94 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/mb/gbt_convertors.py +1199 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/mb/logistic_regression_builders.py +211 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/mb/tree_based_builders.py +425 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/mpi_transceiver.cp312-win_amd64.pyd +0 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/__init__.py +40 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/_n_jobs_support.py +252 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/_utils.py +245 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/cluster/__init__.py +20 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/cluster/dbscan.py +165 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/cluster/k_means.py +565 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/cluster/tests/test_dbscan.py +109 -0
- {scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/spmd → scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn}/decomposition/__init__.py +2 -2
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/decomposition/_pca.py +528 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/ensemble/AdaBoostClassifier.py +192 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/ensemble/GBTDAAL.py +333 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/ensemble/__init__.py +27 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/ensemble/_forest.py +1285 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/ensemble/tests/test_decision_forest.py +206 -0
- {scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex → scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn}/linear_model/__init__.py +29 -28
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/_coordinate_descent.py +826 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/_linear.py +269 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/_ridge.py +290 -0
- scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/basic_statistics/basic_statistics.py → scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/coordinate_descent.py +2 -2
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/linear.py +17 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/logistic_loss.py +195 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/logistic_path.py +561 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/ridge.py +17 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/tests/test_enet.py +157 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/tests/test_linear.py +198 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/tests/test_ridge.py +69 -0
- {scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/preview/cluster → scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/manifold}/__init__.py +3 -3
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/manifold/_t_sne.py +432 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/metrics/__init__.py +20 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/metrics/_pairwise.py +259 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/metrics/_ranking.py +210 -0
- scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/linear_model/ridge.py → scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/model_selection/__init__.py +4 -2
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/model_selection/_split.py +309 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/model_selection/tests/test_split.py +56 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/__init__.py +0 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/dispatcher.py +232 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/tests/_models_info.py +164 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/tests/test_monkeypatch.py +71 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/tests/test_patching.py +90 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/tests/utils/_launch_algorithms.py +117 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/__init__.py +21 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/_base.py +493 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/_classification.py +136 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/_regression.py +72 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/_unsupervised.py +55 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/neighbors/tests/test_kneighbors.py +113 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/svm/__init__.py +19 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/svm/svm.py +736 -0
- {scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/spmd/covariance → scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/utils}/__init__.py +5 -3
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/utils/base.py +80 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/utils/tests/test_utils.py +51 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/utils/validation.py +772 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/__init__.py +151 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/_config.py +80 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/_device_offload.py +199 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/_onedal_py_dpc.cp312-win_amd64.pyd +0 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/_onedal_py_host.cp312-win_amd64.pyd +0 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/basic_statistics/basic_statistics.py +151 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/basic_statistics/incremental_basic_statistics.py +165 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/basic_statistics/tests/test_basic_statistics.py +241 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/basic_statistics/tests/test_incremental_basic_statistics.py +279 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/basic_statistics/tests/utils.py +50 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/cluster/__init__.py +27 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/cluster/dbscan.py +80 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/cluster/kmeans.py +582 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/cluster/kmeans_init.py +145 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/cluster/tests/test_dbscan.py +125 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/cluster/tests/test_kmeans.py +88 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/cluster/tests/test_kmeans_init.py +93 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/common/_backend.py +258 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/common/_estimator_checks.py +47 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/common/_mixin.py +62 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/common/hyperparameters.py +148 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/common/tests/test_sycl.py +148 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/covariance/__init__.py +20 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/covariance/covariance.py +121 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/covariance/incremental_covariance.py +151 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/covariance/tests/test_covariance.py +50 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/covariance/tests/test_incremental_covariance.py +190 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/datatypes/__init__.py +29 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/datatypes/_data_conversion.py +158 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/datatypes/_dlpack.py +64 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/datatypes/_sycl_usm.py +63 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/datatypes/tests/common.py +131 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/datatypes/tests/test_data.py +686 -0
- {scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics → scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/decomposition}/__init__.py +3 -2
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/decomposition/incremental_pca.py +218 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/decomposition/pca.py +124 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/decomposition/tests/test_incremental_pca.py +291 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/dummy/__init__.py +19 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/dummy/dummy.py +137 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/ensemble/__init__.py +29 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/ensemble/forest.py +781 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/ensemble/tests/test_random_forest.py +97 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/linear_model/__init__.py +27 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/linear_model/incremental_linear_model.py +201 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/linear_model/linear_model.py +230 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/linear_model/logistic_regression.py +293 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/linear_model/tests/test_incremental_linear_regression.py +213 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/linear_model/tests/test_incremental_ridge_regression.py +171 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/linear_model/tests/test_linear_regression.py +252 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/linear_model/tests/test_logistic_regression.py +95 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/linear_model/tests/test_ridge.py +95 -0
- {scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/spmd → scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal}/neighbors/__init__.py +19 -19
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/neighbors/neighbors.py +690 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/neighbors/tests/test_knn_classification.py +49 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/primitives/__init__.py +27 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/primitives/get_tree.py +27 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/primitives/kernel_functions.py +202 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/primitives/tests/test_kernel_functions.py +159 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/svm/__init__.py +19 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/svm/svm.py +592 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/svm/tests/test_csr_svm.py +352 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/svm/tests/test_nusvc.py +204 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/svm/tests/test_nusvr.py +210 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/svm/tests/test_svc.py +168 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/svm/tests/test_svr.py +243 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/tests/test_common.py +71 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/tests/utils/_dataframes_support.py +179 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/tests/utils/_device_selection.py +94 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/utils/_array_api.py +98 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/utils/_sycl_queue_manager.py +213 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/utils/_third_party.py +220 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/utils/tests/test_validation.py +142 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/utils/validation.py +503 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/__init__.py +7 -3
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/__main__.py +2 -2
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/_config.py +163 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/_device_offload.py +205 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/_utils.py +219 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/base.py +109 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/basic_statistics/__init__.py +20 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/basic_statistics/basic_statistics.py +241 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/basic_statistics/incremental_basic_statistics.py +128 -78
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/basic_statistics/tests/test_basic_statistics.py +405 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/basic_statistics/tests/test_incremental_basic_statistics.py +101 -32
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/cluster/__init__.py +1 -1
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/cluster/dbscan.py +38 -29
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/cluster/k_means.py +399 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/cluster/tests/test_dbscan.py +8 -6
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/cluster/tests/test_kmeans.py +157 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/conftest.py +20 -1
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/covariance/incremental_covariance.py +440 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/covariance/tests/test_incremental_covariance.py +307 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/decomposition/pca.py +558 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/decomposition/tests/test_pca.py +164 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/dispatcher.py +199 -21
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/doc/third-party-programs.txt +207 -2
- scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/linear_model/coordinate_descent.py → scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/dummy/__init__.py +19 -17
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/dummy/_dummy.py +615 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/dummy/tests/test_dummy.py +62 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/ensemble/_forest.py +288 -440
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/ensemble/tests/test_forest.py +196 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/glob/__main__.py +1 -1
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/glob/dispatcher.py +17 -3
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/linear_model/__init__.py +32 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/linear_model/coordinate_descent.py +44 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/linear_model/incremental_linear.py +427 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/linear_model/incremental_ridge.py +407 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/linear_model/linear.py +363 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/linear_model/logistic_regression.py +466 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/linear_model/ridge.py +407 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_incremental_linear.py +267 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_incremental_ridge.py +214 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_linear.py +167 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_logreg.py +565 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_ridge.py +256 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/manifold/t_sne.py +11 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/manifold/tests/test_tsne.py +256 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/metrics/pairwise.py +3 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/metrics/ranking.py +3 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/model_selection/split.py +3 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/neighbors/_lof.py +30 -62
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/neighbors/common.py +56 -9
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/neighbors/knn_classification.py +45 -101
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/neighbors/knn_regression.py +63 -94
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/neighbors/knn_unsupervised.py +49 -25
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/neighbors/tests/test_neighbors.py +6 -4
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/preview/__init__.py +1 -1
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/preview/covariance/covariance.py +261 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/preview/covariance/tests/test_covariance.py +54 -8
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/preview/decomposition/__init__.py +19 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/preview/decomposition/incremental_pca.py +406 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/preview/decomposition/tests/test_incremental_pca.py +390 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/__init__.py +20 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/basic_statistics.py +24 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/incremental_basic_statistics.py +30 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/tests/test_basic_statistics_spmd.py +117 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/tests/test_incremental_basic_statistics_spmd.py +314 -0
- scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/basic_statistics.py → scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/cluster/dbscan.py +9 -4
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/cluster/tests/test_dbscan_spmd.py +108 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/cluster/tests/test_kmeans_spmd.py +180 -0
- scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/covariance.py → scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/__init__.py +3 -4
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/covariance.py +24 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/incremental_covariance.py +29 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/tests/test_covariance_spmd.py +120 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/tests/test_incremental_covariance_spmd.py +200 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/decomposition/__init__.py +20 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/decomposition/incremental_pca.py +23 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/spmd/decomposition/pca.py +6 -4
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/decomposition/tests/test_incremental_pca_spmd.py +276 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/decomposition/tests/test_pca_spmd.py +146 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/ensemble/forest.py +299 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/ensemble/tests/test_forest_spmd.py +299 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/spmd/linear_model/__init__.py +2 -1
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/incremental_linear_model.py +28 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/spmd/linear_model/linear_model.py +7 -4
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/tests/test_incremental_linear_spmd.py +345 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/tests/test_linear_regression_spmd.py +162 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/tests/test_logistic_regression_spmd.py +169 -0
- scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/spmd/neighbors/neighbors.py → scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/neighbors/__init__.py +1 -3
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/neighbors/tests/test_neighbors_spmd.py +433 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/svm/_common.py +403 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/svm/nusvc.py +99 -117
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/svm/nusvr.py +55 -16
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/svm/svc.py +95 -113
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/svm/svr.py +51 -16
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/svm/tests/test_svm.py +43 -20
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/tests/test_common.py +607 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/tests/test_config.py +256 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/tests/test_hyperparameters.py +111 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/tests/test_memory_usage.py +335 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/tests/test_monkeypatch.py +5 -4
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/tests/test_n_jobs_support.py +111 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/tests/test_patching.py +122 -75
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/tests/test_run_to_run_stability.py +335 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/tests/utils/__init__.py +48 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/tests/utils/base.py +420 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/tests/utils/spmd.py +198 -0
- scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/utils/validation.py → scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/utils/__init__.py +3 -1
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/utils/_array_api.py +217 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/utils/class_weight.py +100 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/utils/parallel.py +97 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/utils/tests/test_class_weight.py +69 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/utils/tests/test_validation.py +238 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/utils/validation.py +212 -0
- scikit_learn_intelex-2025.10.0.dist-info/METADATA +182 -0
- scikit_learn_intelex-2025.10.0.dist-info/RECORD +267 -0
- {scikit_learn_intelex-2024.4.0.dist-info → scikit_learn_intelex-2025.10.0.dist-info}/WHEEL +1 -1
- scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/_config.py +0 -110
- scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/_device_offload.py +0 -250
- scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/_utils.py +0 -109
- scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/cluster/k_means.py +0 -17
- scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/cluster/tests/test_kmeans.py +0 -30
- scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/covariance/incremental_covariance.py +0 -130
- scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/covariance/tests/test_incremental_covariance.py +0 -143
- scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/decomposition/pca.py +0 -335
- scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/decomposition/tests/test_pca.py +0 -56
- scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/ensemble/tests/test_forest.py +0 -113
- scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/linear_model/linear.py +0 -316
- scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/linear_model/logistic_path.py +0 -17
- scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/linear_model/logistic_regression.py +0 -385
- scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_linear.py +0 -117
- scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_logreg.py +0 -91
- scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/manifold/tests/test_tsne.py +0 -26
- scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/preview/cluster/_common.py +0 -84
- scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/preview/cluster/k_means.py +0 -303
- scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/preview/covariance/covariance.py +0 -133
- scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/spmd/cluster/dbscan.py +0 -50
- scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/spmd/ensemble/forest.py +0 -71
- scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/svm/_common.py +0 -185
- scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/tests/_utils.py +0 -164
- scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/tests/test_config.py +0 -39
- scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/tests/test_memory_usage.py +0 -227
- scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/tests/test_n_jobs_support.py +0 -99
- scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/tests/test_run_to_run_stability_tests.py +0 -428
- scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/utils/__init__.py +0 -20
- scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/utils/_namespace.py +0 -97
- scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex/utils/parallel.py +0 -59
- scikit_learn_intelex-2024.4.0.dist-info/METADATA +0 -230
- scikit_learn_intelex-2024.4.0.dist-info/RECORD +0 -101
- {scikit_learn_intelex-2024.4.0.data/data/Lib/site-packages/sklearnex → scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal}/basic_statistics/__init__.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/covariance/__init__.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/decomposition/__init__.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/ensemble/__init__.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/manifold/__init__.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/metrics/__init__.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/metrics/tests/test_metrics.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/model_selection/__init__.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/model_selection/tests/test_model_selection.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/neighbors/__init__.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/preview/covariance/__init__.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/spmd/__init__.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/spmd/cluster/__init__.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/spmd/cluster/kmeans.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/spmd/ensemble/__init__.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/spmd/linear_model/logistic_regression.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/svm/__init__.py +0 -0
- {scikit_learn_intelex-2024.4.0.data → scikit_learn_intelex-2025.10.0.data}/data/Lib/site-packages/sklearnex/tests/test_parallel.py +0 -0
- {scikit_learn_intelex-2024.4.0.dist-info → scikit_learn_intelex-2025.10.0.dist-info}/LICENSE.txt +0 -0
- {scikit_learn_intelex-2024.4.0.dist-info → scikit_learn_intelex-2025.10.0.dist-info}/top_level.txt +0 -0
scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/decomposition/incremental_pca.py
ADDED
|
@@ -0,0 +1,218 @@
|
|
|
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
|
+
import numpy as np
|
|
18
|
+
|
|
19
|
+
from onedal._device_offload import supports_queue
|
|
20
|
+
from onedal.common._backend import bind_default_backend
|
|
21
|
+
from onedal.utils import _sycl_queue_manager as QM
|
|
22
|
+
|
|
23
|
+
from .._config import _get_config
|
|
24
|
+
from ..datatypes import from_table, return_type_constructor, to_table
|
|
25
|
+
from .pca import PCA
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class IncrementalPCA(PCA):
|
|
29
|
+
"""Incremental oneDAL PCA estimator.
|
|
30
|
+
|
|
31
|
+
Parameters
|
|
32
|
+
----------
|
|
33
|
+
n_components : int, default=None
|
|
34
|
+
Number of components to keep. If ``n_components`` is ``None``,
|
|
35
|
+
then ``n_components`` is set to ``min(n_samples, n_features)``.
|
|
36
|
+
|
|
37
|
+
is_deterministic : bool, default=True
|
|
38
|
+
When True the ``components_`` vectors are chosen in deterministic
|
|
39
|
+
way, otherwise some of them can be oppositely directed.
|
|
40
|
+
|
|
41
|
+
method : str, default='cov'
|
|
42
|
+
Method used in oneDAL computation.
|
|
43
|
+
|
|
44
|
+
whiten : bool, default=False
|
|
45
|
+
When True the ``components_`` vectors are divided
|
|
46
|
+
by ``n_samples`` times ``components_`` to ensure uncorrelated outputs
|
|
47
|
+
with unit component-wise variances.
|
|
48
|
+
|
|
49
|
+
Whitening will remove some information from the transformed signal
|
|
50
|
+
(the relative variance scales of the components) but can sometimes
|
|
51
|
+
improve the predictive accuracy of the downstream estimators by
|
|
52
|
+
making data respect some hard-wired assumptions.
|
|
53
|
+
|
|
54
|
+
Attributes
|
|
55
|
+
----------
|
|
56
|
+
components_ : ndarray of shape (n_components, n_features)
|
|
57
|
+
Principal axes in feature space, representing the directions of
|
|
58
|
+
maximum variance in the data. Equivalently, the right singular
|
|
59
|
+
vectors of the centered input data, parallel to its eigenvectors.
|
|
60
|
+
The components are sorted by decreasing ``explained_variance_``.
|
|
61
|
+
|
|
62
|
+
explained_variance_ : ndarray of shape (n_components,)
|
|
63
|
+
Variance explained by each of the selected components.
|
|
64
|
+
|
|
65
|
+
explained_variance_ratio_ : ndarray of shape (n_components,)
|
|
66
|
+
Percentage of variance explained by each of the selected components.
|
|
67
|
+
If all components are stored, the sum of explained variances is equal
|
|
68
|
+
to 1.0.
|
|
69
|
+
|
|
70
|
+
singular_values_ : ndarray of shape (n_components,)
|
|
71
|
+
The singular values corresponding to each of the selected components.
|
|
72
|
+
The singular values are equal to the 2-norms of the ``n_components``
|
|
73
|
+
variables in the lower-dimensional space.
|
|
74
|
+
|
|
75
|
+
mean_ : ndarray of shape (n_features,)
|
|
76
|
+
Per-feature empirical mean, aggregate over calls to ``partial_fit``.
|
|
77
|
+
|
|
78
|
+
var_ : ndarray of shape (n_features,)
|
|
79
|
+
Per-feature empirical variance, aggregate over calls to
|
|
80
|
+
``partial_fit``.
|
|
81
|
+
|
|
82
|
+
noise_variance_ : float
|
|
83
|
+
Equal to the average of (min(n_features, n_samples) - n_components)
|
|
84
|
+
smallest eigenvalues of the covariance matrix of X.
|
|
85
|
+
"""
|
|
86
|
+
|
|
87
|
+
def __init__(
|
|
88
|
+
self,
|
|
89
|
+
n_components=None,
|
|
90
|
+
is_deterministic=True,
|
|
91
|
+
method="cov",
|
|
92
|
+
whiten=False,
|
|
93
|
+
):
|
|
94
|
+
self.n_components = n_components
|
|
95
|
+
self.method = method
|
|
96
|
+
self.is_deterministic = is_deterministic
|
|
97
|
+
self.whiten = whiten
|
|
98
|
+
self._queue = None
|
|
99
|
+
self._reset()
|
|
100
|
+
|
|
101
|
+
@bind_default_backend("decomposition.dim_reduction")
|
|
102
|
+
def finalize_train(self, params, partial_result): ...
|
|
103
|
+
|
|
104
|
+
@bind_default_backend("decomposition.dim_reduction")
|
|
105
|
+
def partial_train(self, params, partial_result, X_table): ...
|
|
106
|
+
|
|
107
|
+
@bind_default_backend("decomposition.dim_reduction")
|
|
108
|
+
def partial_train_result(self): ...
|
|
109
|
+
|
|
110
|
+
def _reset(self):
|
|
111
|
+
self._onedal_model = None
|
|
112
|
+
self._need_to_finalize = False
|
|
113
|
+
self._queue = None
|
|
114
|
+
self._outtype = None
|
|
115
|
+
self._partial_result = self.partial_train_result()
|
|
116
|
+
|
|
117
|
+
def __getstate__(self):
|
|
118
|
+
# Since finalize_fit can't be dispatched without directly provided queue
|
|
119
|
+
# and the dispatching policy can't be serialized, the computation is finalized
|
|
120
|
+
# here and the policy is not saved in serialized data.
|
|
121
|
+
|
|
122
|
+
self.finalize_fit()
|
|
123
|
+
data = self.__dict__.copy()
|
|
124
|
+
data.pop("_queue", None)
|
|
125
|
+
return data
|
|
126
|
+
|
|
127
|
+
@supports_queue
|
|
128
|
+
def partial_fit(self, X, queue=None):
|
|
129
|
+
"""Generate partial PCA from batch data in `_partial_result`.
|
|
130
|
+
|
|
131
|
+
Computes partial data for PCA on from data batch X.
|
|
132
|
+
|
|
133
|
+
Parameters
|
|
134
|
+
----------
|
|
135
|
+
X : array-like of shape (n_samples, n_features)
|
|
136
|
+
Training data, where `n_samples` is the number of samples and
|
|
137
|
+
`n_features` is the number of features.
|
|
138
|
+
|
|
139
|
+
queue : SyclQueue or None, default=None
|
|
140
|
+
SYCL Queue object for device code execution. Default
|
|
141
|
+
value None causes computation on host.
|
|
142
|
+
|
|
143
|
+
Returns
|
|
144
|
+
-------
|
|
145
|
+
self : object
|
|
146
|
+
Returns the instance itself.
|
|
147
|
+
"""
|
|
148
|
+
|
|
149
|
+
n_samples, n_features = X.shape
|
|
150
|
+
first_pass = not self._need_to_finalize
|
|
151
|
+
if first_pass:
|
|
152
|
+
self.components_ = None
|
|
153
|
+
self.n_samples_seen_ = n_samples
|
|
154
|
+
self.n_features_in_ = n_features
|
|
155
|
+
self.n_components_ = self.n_components if self.n_components else X.shape[0]
|
|
156
|
+
else:
|
|
157
|
+
self.n_samples_seen_ += n_samples
|
|
158
|
+
|
|
159
|
+
if not self._outtype:
|
|
160
|
+
self._outtype = return_type_constructor(X)
|
|
161
|
+
self._queue = queue
|
|
162
|
+
|
|
163
|
+
X_table = to_table(X, queue=queue)
|
|
164
|
+
|
|
165
|
+
if not hasattr(self, "_dtype"):
|
|
166
|
+
self._dtype = X_table.dtype
|
|
167
|
+
self._params = self._get_onedal_params(X_table)
|
|
168
|
+
|
|
169
|
+
self._partial_result = self.partial_train(
|
|
170
|
+
self._params, self._partial_result, X_table
|
|
171
|
+
)
|
|
172
|
+
if self._onedal_model is not None:
|
|
173
|
+
self._onedal_model = None
|
|
174
|
+
self._need_to_finalize = True
|
|
175
|
+
return self
|
|
176
|
+
|
|
177
|
+
def finalize_fit(self):
|
|
178
|
+
"""Finalize statistics from the current `_partial_result`.
|
|
179
|
+
|
|
180
|
+
Returns
|
|
181
|
+
-------
|
|
182
|
+
self : object
|
|
183
|
+
Returns the instance itself.
|
|
184
|
+
"""
|
|
185
|
+
if self._need_to_finalize:
|
|
186
|
+
with QM.manage_global_queue(self._queue):
|
|
187
|
+
result = self.finalize_train(self._params, self._partial_result)
|
|
188
|
+
|
|
189
|
+
(
|
|
190
|
+
mean_,
|
|
191
|
+
var_,
|
|
192
|
+
self.components_,
|
|
193
|
+
sing_vals_,
|
|
194
|
+
eigenvalues_,
|
|
195
|
+
var_ratio,
|
|
196
|
+
) = from_table(
|
|
197
|
+
result.means,
|
|
198
|
+
result.variances,
|
|
199
|
+
result.eigenvectors,
|
|
200
|
+
result.singular_values,
|
|
201
|
+
result.eigenvalues,
|
|
202
|
+
result.explained_variances_ratio,
|
|
203
|
+
like=self._outtype,
|
|
204
|
+
)
|
|
205
|
+
|
|
206
|
+
# tables are 2d, but outputs are inherently 1d, reduce dimensions
|
|
207
|
+
self.mean_ = mean_[0, ...]
|
|
208
|
+
self.var_ = var_[0, ...]
|
|
209
|
+
self.singular_values_ = sing_vals_[0, ...]
|
|
210
|
+
self.explained_variance_ = eigenvalues_[0, ...]
|
|
211
|
+
self.explained_variance_ratio_ = var_ratio[0, ...]
|
|
212
|
+
|
|
213
|
+
# set partial result attributes to defaults
|
|
214
|
+
self._need_to_finalize = False
|
|
215
|
+
self._outtype = None
|
|
216
|
+
self._queue = None
|
|
217
|
+
|
|
218
|
+
return self
|
|
@@ -0,0 +1,124 @@
|
|
|
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 numbers
|
|
18
|
+
from abc import ABCMeta
|
|
19
|
+
|
|
20
|
+
import numpy as np
|
|
21
|
+
|
|
22
|
+
from onedal._device_offload import supports_queue
|
|
23
|
+
from onedal.common._backend import bind_default_backend
|
|
24
|
+
|
|
25
|
+
from .._config import _get_config
|
|
26
|
+
from ..common.hyperparameters import get_hyperparameters
|
|
27
|
+
from ..datatypes import from_table, to_table
|
|
28
|
+
from ..utils._array_api import _get_sycl_namespace
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class PCA(metaclass=ABCMeta):
|
|
32
|
+
|
|
33
|
+
def __init__(
|
|
34
|
+
self,
|
|
35
|
+
n_components=None,
|
|
36
|
+
is_deterministic=True,
|
|
37
|
+
method="cov",
|
|
38
|
+
whiten=False,
|
|
39
|
+
):
|
|
40
|
+
self.n_components = n_components
|
|
41
|
+
self.method = method
|
|
42
|
+
self.is_deterministic = is_deterministic
|
|
43
|
+
self.whiten = whiten
|
|
44
|
+
self._onedal_model = None
|
|
45
|
+
|
|
46
|
+
# provides direct access to the backend model constructor
|
|
47
|
+
@bind_default_backend("decomposition.dim_reduction")
|
|
48
|
+
def model(self): ...
|
|
49
|
+
|
|
50
|
+
@bind_default_backend("decomposition.dim_reduction")
|
|
51
|
+
def train(self, params, X): ...
|
|
52
|
+
|
|
53
|
+
@bind_default_backend("decomposition.dim_reduction")
|
|
54
|
+
def infer(self, params, X, model): ...
|
|
55
|
+
|
|
56
|
+
def _get_onedal_params(self, data):
|
|
57
|
+
return {
|
|
58
|
+
"fptype": data.dtype,
|
|
59
|
+
"method": self.method,
|
|
60
|
+
"n_components": self.n_components_,
|
|
61
|
+
"is_deterministic": self.is_deterministic,
|
|
62
|
+
"whiten": self.whiten,
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
def _create_model(self, queue=None):
|
|
66
|
+
m = self.model()
|
|
67
|
+
m.eigenvectors = to_table(self.components_, queue=queue)
|
|
68
|
+
m.means = to_table(self.mean_, queue=queue)
|
|
69
|
+
if self.whiten:
|
|
70
|
+
m.eigenvalues = to_table(self.explained_variance_, queue=queue)
|
|
71
|
+
return m
|
|
72
|
+
|
|
73
|
+
@supports_queue
|
|
74
|
+
def predict(self, X, queue=None):
|
|
75
|
+
X_table = to_table(X, queue=queue)
|
|
76
|
+
params = self._get_onedal_params(X_table)
|
|
77
|
+
if self._onedal_model is None:
|
|
78
|
+
self._onedal_model = self._create_model(queue)
|
|
79
|
+
result = self.infer(params, self._onedal_model, X_table)
|
|
80
|
+
return from_table(result.transformed_data, like=X)
|
|
81
|
+
|
|
82
|
+
@supports_queue
|
|
83
|
+
def fit(self, X, y=None, queue=None):
|
|
84
|
+
|
|
85
|
+
X_table = to_table(X, queue=queue)
|
|
86
|
+
# define n_components_ to allow for external modification of
|
|
87
|
+
# transforms
|
|
88
|
+
self.n_components_ = self.n_components
|
|
89
|
+
|
|
90
|
+
params = self._get_onedal_params(X_table)
|
|
91
|
+
hparams = get_hyperparameters("pca", "train")
|
|
92
|
+
if hparams is not None and not hparams.is_default:
|
|
93
|
+
result = self.train(params, hparams.backend, X_table)
|
|
94
|
+
else:
|
|
95
|
+
result = self.train(params, X_table)
|
|
96
|
+
|
|
97
|
+
(
|
|
98
|
+
mean_,
|
|
99
|
+
var_,
|
|
100
|
+
self.components_,
|
|
101
|
+
sing_vals_,
|
|
102
|
+
eigenvalues_,
|
|
103
|
+
var_ratio,
|
|
104
|
+
) = from_table(
|
|
105
|
+
result.means,
|
|
106
|
+
result.variances,
|
|
107
|
+
result.eigenvectors,
|
|
108
|
+
result.singular_values,
|
|
109
|
+
result.eigenvalues,
|
|
110
|
+
result.explained_variances_ratio,
|
|
111
|
+
like=X,
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
# tables are 2d, but outputs are inherently 1d, reduce dimensions
|
|
115
|
+
self.mean_ = mean_[0, ...]
|
|
116
|
+
self.var_ = var_[0, ...]
|
|
117
|
+
self.singular_values_ = sing_vals_[0, ...]
|
|
118
|
+
self.explained_variance_ = eigenvalues_[0, ...]
|
|
119
|
+
self.explained_variance_ratio_ = var_ratio[0, ...]
|
|
120
|
+
|
|
121
|
+
if self._onedal_model is not None:
|
|
122
|
+
self._onedal_model = None
|
|
123
|
+
|
|
124
|
+
return self
|
|
@@ -0,0 +1,291 @@
|
|
|
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
|
+
import numpy as np
|
|
18
|
+
import pytest
|
|
19
|
+
from numpy.testing import assert_allclose
|
|
20
|
+
|
|
21
|
+
from daal4py.sklearn._utils import daal_check_version
|
|
22
|
+
from onedal.datatypes import from_table
|
|
23
|
+
from onedal.decomposition import IncrementalPCA
|
|
24
|
+
from onedal.tests.utils._device_selection import get_queues
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
@pytest.mark.parametrize("queue", get_queues())
|
|
28
|
+
@pytest.mark.parametrize("is_deterministic", [True, False])
|
|
29
|
+
@pytest.mark.parametrize("whiten", [True, False])
|
|
30
|
+
@pytest.mark.parametrize("num_blocks", [1, 2, 3])
|
|
31
|
+
@pytest.mark.parametrize("dtype", [np.float32, np.float64])
|
|
32
|
+
def test_on_gold_data(queue, is_deterministic, whiten, num_blocks, dtype):
|
|
33
|
+
X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
|
|
34
|
+
X = X.astype(dtype=dtype)
|
|
35
|
+
X_split = np.array_split(X, num_blocks)
|
|
36
|
+
incpca = IncrementalPCA(
|
|
37
|
+
is_deterministic=is_deterministic, whiten=whiten, n_components=2
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
for i in range(num_blocks):
|
|
41
|
+
incpca.partial_fit(X_split[i], queue=queue)
|
|
42
|
+
|
|
43
|
+
result = incpca.finalize_fit()
|
|
44
|
+
|
|
45
|
+
transformed_data = incpca.predict(X, queue=queue)
|
|
46
|
+
|
|
47
|
+
expected_n_components_ = 2
|
|
48
|
+
expected_components_ = np.array([[0.83849224, 0.54491354], [-0.54491354, 0.83849224]])
|
|
49
|
+
expected_singular_values_ = np.array([6.30061232, 0.54980396])
|
|
50
|
+
expected_mean_ = np.array([0, 0])
|
|
51
|
+
expected_var_ = np.array([5.6, 2.4])
|
|
52
|
+
expected_explained_variance_ = np.array([7.93954312, 0.06045688])
|
|
53
|
+
expected_explained_variance_ratio_ = np.array([0.99244289, 0.00755711])
|
|
54
|
+
expected_transformed_data = (
|
|
55
|
+
np.array(
|
|
56
|
+
[
|
|
57
|
+
[-0.49096647, -1.19399271],
|
|
58
|
+
[-0.78854479, 1.02218579],
|
|
59
|
+
[-1.27951125, -0.17180692],
|
|
60
|
+
[0.49096647, 1.19399271],
|
|
61
|
+
[0.78854479, -1.02218579],
|
|
62
|
+
[1.27951125, 0.17180692],
|
|
63
|
+
]
|
|
64
|
+
)
|
|
65
|
+
if whiten
|
|
66
|
+
else np.array(
|
|
67
|
+
[
|
|
68
|
+
[-1.38340578, -0.2935787],
|
|
69
|
+
[-2.22189802, 0.25133484],
|
|
70
|
+
[-3.6053038, -0.04224385],
|
|
71
|
+
[1.38340578, 0.2935787],
|
|
72
|
+
[2.22189802, -0.25133484],
|
|
73
|
+
[3.6053038, 0.04224385],
|
|
74
|
+
]
|
|
75
|
+
)
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
tol = 1e-7
|
|
79
|
+
if transformed_data.dtype == np.float32:
|
|
80
|
+
tol = 7e-6 if whiten else 1e-6
|
|
81
|
+
|
|
82
|
+
assert result.n_components_ == expected_n_components_
|
|
83
|
+
|
|
84
|
+
assert_allclose(result.singular_values_, expected_singular_values_, atol=tol)
|
|
85
|
+
assert_allclose(result.mean_, expected_mean_, atol=tol)
|
|
86
|
+
assert_allclose(result.var_, expected_var_, atol=tol)
|
|
87
|
+
assert_allclose(result.explained_variance_, expected_explained_variance_, atol=tol)
|
|
88
|
+
assert_allclose(
|
|
89
|
+
result.explained_variance_ratio_, expected_explained_variance_ratio_, atol=tol
|
|
90
|
+
)
|
|
91
|
+
if is_deterministic and daal_check_version((2024, "P", 500)):
|
|
92
|
+
assert_allclose(result.components_, expected_components_, atol=tol)
|
|
93
|
+
assert_allclose(transformed_data, expected_transformed_data, atol=tol)
|
|
94
|
+
else:
|
|
95
|
+
for i in range(result.n_components_):
|
|
96
|
+
abs_dot_product = np.abs(
|
|
97
|
+
np.dot(result.components_[i], expected_components_[i])
|
|
98
|
+
)
|
|
99
|
+
assert np.abs(abs_dot_product - 1.0) < tol
|
|
100
|
+
|
|
101
|
+
if np.dot(result.components_[i], expected_components_[i]) < 0:
|
|
102
|
+
assert_allclose(
|
|
103
|
+
-transformed_data[i], expected_transformed_data[i], atol=tol
|
|
104
|
+
)
|
|
105
|
+
else:
|
|
106
|
+
assert_allclose(
|
|
107
|
+
transformed_data[i], expected_transformed_data[i], atol=tol
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
@pytest.mark.parametrize("queue", get_queues())
|
|
112
|
+
@pytest.mark.parametrize("n_components", [None, 1, 5])
|
|
113
|
+
@pytest.mark.parametrize("whiten", [True, False])
|
|
114
|
+
@pytest.mark.parametrize("num_blocks", [1, 10])
|
|
115
|
+
@pytest.mark.parametrize("row_count", [100, 1000])
|
|
116
|
+
@pytest.mark.parametrize("column_count", [10, 100])
|
|
117
|
+
@pytest.mark.parametrize("dtype", [np.float32, np.float64])
|
|
118
|
+
def test_on_random_data(
|
|
119
|
+
queue, n_components, whiten, num_blocks, row_count, column_count, dtype
|
|
120
|
+
):
|
|
121
|
+
seed = 78
|
|
122
|
+
gen = np.random.default_rng(seed)
|
|
123
|
+
X = gen.uniform(low=-0.3, high=0.7, size=(row_count, column_count))
|
|
124
|
+
X = X.astype(dtype=dtype)
|
|
125
|
+
X_split = np.array_split(X, num_blocks)
|
|
126
|
+
# it is necessary to limit n_components by the nature of using
|
|
127
|
+
# np.linalg.eig to verify PCA computation
|
|
128
|
+
if n_components is None and X_split[0].shape[0] > column_count:
|
|
129
|
+
n_components = column_count
|
|
130
|
+
incpca = IncrementalPCA(n_components=n_components, whiten=whiten)
|
|
131
|
+
|
|
132
|
+
for i in range(num_blocks):
|
|
133
|
+
incpca.partial_fit(X_split[i], queue=queue)
|
|
134
|
+
|
|
135
|
+
incpca.finalize_fit()
|
|
136
|
+
|
|
137
|
+
transformed_data = incpca.predict(X, queue=queue)
|
|
138
|
+
tol = 3e-3 if transformed_data.dtype == np.float32 else 2e-6
|
|
139
|
+
|
|
140
|
+
n_components = incpca.n_components_
|
|
141
|
+
expected_n_samples_seen = X.shape[0]
|
|
142
|
+
expected_n_features_in = X.shape[1]
|
|
143
|
+
n_samples_seen = incpca.n_samples_seen_
|
|
144
|
+
n_features_in = incpca.n_features_in_
|
|
145
|
+
assert n_samples_seen == expected_n_samples_seen
|
|
146
|
+
assert n_features_in == expected_n_features_in
|
|
147
|
+
|
|
148
|
+
components = incpca.components_
|
|
149
|
+
singular_values = incpca.singular_values_
|
|
150
|
+
centered_data = X - np.mean(X, axis=0)
|
|
151
|
+
cov_eigenvalues, cov_eigenvectors = np.linalg.eig(
|
|
152
|
+
centered_data.T @ centered_data / (n_samples_seen - 1)
|
|
153
|
+
)
|
|
154
|
+
cov_eigenvalues = np.nan_to_num(cov_eigenvalues)
|
|
155
|
+
cov_eigenvalues[cov_eigenvalues < 0] = 0
|
|
156
|
+
eigenvalues_order = np.argsort(cov_eigenvalues)[::-1]
|
|
157
|
+
sorted_eigenvalues = cov_eigenvalues[eigenvalues_order]
|
|
158
|
+
sorted_eigenvectors = cov_eigenvectors[:, eigenvalues_order]
|
|
159
|
+
expected_singular_values = np.sqrt(sorted_eigenvalues * (n_samples_seen - 1))[
|
|
160
|
+
:n_components
|
|
161
|
+
]
|
|
162
|
+
expected_components = sorted_eigenvectors.T[:n_components]
|
|
163
|
+
|
|
164
|
+
assert_allclose(singular_values, expected_singular_values, atol=tol)
|
|
165
|
+
for i in range(n_components):
|
|
166
|
+
component_length = np.dot(components[i], components[i])
|
|
167
|
+
assert np.abs(component_length - 1.0) < tol
|
|
168
|
+
abs_dot_product = np.abs(np.dot(components[i], expected_components[i]))
|
|
169
|
+
assert np.abs(abs_dot_product - 1.0) < tol
|
|
170
|
+
|
|
171
|
+
expected_mean = np.mean(X, axis=0)
|
|
172
|
+
assert_allclose(incpca.mean_, expected_mean, atol=tol)
|
|
173
|
+
|
|
174
|
+
expected_var_ = np.var(X, ddof=1, axis=0)
|
|
175
|
+
assert_allclose(incpca.var_, expected_var_, atol=tol)
|
|
176
|
+
|
|
177
|
+
expected_explained_variance = sorted_eigenvalues[:n_components]
|
|
178
|
+
assert_allclose(incpca.explained_variance_, expected_explained_variance, atol=tol)
|
|
179
|
+
|
|
180
|
+
expected_explained_variance_ratio = expected_explained_variance / np.sum(
|
|
181
|
+
sorted_eigenvalues
|
|
182
|
+
)
|
|
183
|
+
assert_allclose(
|
|
184
|
+
incpca.explained_variance_ratio_, expected_explained_variance_ratio, atol=tol
|
|
185
|
+
)
|
|
186
|
+
|
|
187
|
+
expected_noise_variance = (
|
|
188
|
+
np.mean(sorted_eigenvalues[n_components:])
|
|
189
|
+
if len(sorted_eigenvalues) > n_components
|
|
190
|
+
else 0.0
|
|
191
|
+
)
|
|
192
|
+
# TODO Fix noise variance computation (It is necessary to update C++ side)
|
|
193
|
+
# assert np.abs(incpca.noise_variance_ - expected_noise_variance) < tol
|
|
194
|
+
|
|
195
|
+
expected_transformed_data = centered_data @ components.T
|
|
196
|
+
if whiten:
|
|
197
|
+
scale = np.sqrt(incpca.explained_variance_)
|
|
198
|
+
min_scale = np.finfo(scale.dtype).eps
|
|
199
|
+
scale[scale < min_scale] = np.inf
|
|
200
|
+
expected_transformed_data /= scale
|
|
201
|
+
|
|
202
|
+
if daal_check_version((2024, "P", 500)) or not (
|
|
203
|
+
whiten and queue is not None and queue.sycl_device.device_type.name == "gpu"
|
|
204
|
+
):
|
|
205
|
+
assert_allclose(transformed_data, expected_transformed_data, atol=tol)
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
@pytest.mark.parametrize("queue", get_queues())
|
|
209
|
+
@pytest.mark.parametrize("dtype", [np.float32, np.float64])
|
|
210
|
+
def test_incremental_estimator_pickle(queue, dtype):
|
|
211
|
+
import pickle
|
|
212
|
+
|
|
213
|
+
from onedal.decomposition import IncrementalPCA
|
|
214
|
+
|
|
215
|
+
incpca = IncrementalPCA()
|
|
216
|
+
|
|
217
|
+
# Check that estimator can be serialized without any data.
|
|
218
|
+
dump = pickle.dumps(incpca)
|
|
219
|
+
incpca_loaded = pickle.loads(dump)
|
|
220
|
+
seed = 77
|
|
221
|
+
gen = np.random.default_rng(seed)
|
|
222
|
+
X = gen.uniform(low=-0.3, high=0.7, size=(10, 10))
|
|
223
|
+
X = X.astype(dtype)
|
|
224
|
+
X_split = np.array_split(X, 2)
|
|
225
|
+
incpca.partial_fit(X_split[0], queue=queue)
|
|
226
|
+
incpca_loaded.partial_fit(X_split[0], queue=queue)
|
|
227
|
+
assert incpca._need_to_finalize == True
|
|
228
|
+
assert incpca_loaded._need_to_finalize == True
|
|
229
|
+
|
|
230
|
+
# Check that estimator can be serialized after partial_fit call.
|
|
231
|
+
dump = pickle.dumps(incpca)
|
|
232
|
+
incpca_loaded = pickle.loads(dump)
|
|
233
|
+
assert incpca._need_to_finalize == False
|
|
234
|
+
# Finalize is called during serialization to make sure partial results are finalized correctly.
|
|
235
|
+
assert incpca_loaded._need_to_finalize == False
|
|
236
|
+
|
|
237
|
+
partial_n_rows = from_table(incpca._partial_result.partial_n_rows)
|
|
238
|
+
partial_n_rows_loaded = from_table(incpca_loaded._partial_result.partial_n_rows)
|
|
239
|
+
assert_allclose(partial_n_rows, partial_n_rows_loaded)
|
|
240
|
+
|
|
241
|
+
partial_crossproduct = from_table(incpca._partial_result.partial_crossproduct)
|
|
242
|
+
partial_crossproduct_loaded = from_table(
|
|
243
|
+
incpca_loaded._partial_result.partial_crossproduct
|
|
244
|
+
)
|
|
245
|
+
assert_allclose(partial_crossproduct, partial_crossproduct_loaded)
|
|
246
|
+
|
|
247
|
+
partial_sum = from_table(incpca._partial_result.partial_sum)
|
|
248
|
+
partial_sum_loaded = from_table(incpca_loaded._partial_result.partial_sum)
|
|
249
|
+
assert_allclose(partial_sum, partial_sum_loaded)
|
|
250
|
+
|
|
251
|
+
auxiliary_table_count = incpca._partial_result.auxiliary_table_count
|
|
252
|
+
auxiliary_table_count_loaded = incpca_loaded._partial_result.auxiliary_table_count
|
|
253
|
+
assert_allclose(auxiliary_table_count, auxiliary_table_count_loaded)
|
|
254
|
+
|
|
255
|
+
for i in range(auxiliary_table_count):
|
|
256
|
+
aux_table = incpca._partial_result.get_auxiliary_table(i)
|
|
257
|
+
aux_table_loaded = incpca_loaded._partial_result.get_auxiliary_table(i)
|
|
258
|
+
assert_allclose(from_table(aux_table), from_table(aux_table_loaded))
|
|
259
|
+
|
|
260
|
+
incpca.partial_fit(X_split[1], queue=queue)
|
|
261
|
+
incpca_loaded.partial_fit(X_split[1], queue=queue)
|
|
262
|
+
assert incpca._need_to_finalize == True
|
|
263
|
+
assert incpca_loaded._need_to_finalize == True
|
|
264
|
+
|
|
265
|
+
dump = pickle.dumps(incpca_loaded)
|
|
266
|
+
incpca_loaded = pickle.loads(dump)
|
|
267
|
+
|
|
268
|
+
assert incpca._need_to_finalize == True
|
|
269
|
+
assert incpca_loaded._need_to_finalize == False
|
|
270
|
+
|
|
271
|
+
incpca.finalize_fit()
|
|
272
|
+
incpca_loaded.finalize_fit()
|
|
273
|
+
|
|
274
|
+
# Check that finalized estimator can be serialized.
|
|
275
|
+
dump = pickle.dumps(incpca_loaded)
|
|
276
|
+
incpca_loaded = pickle.loads(dump)
|
|
277
|
+
|
|
278
|
+
assert_allclose(incpca.singular_values_, incpca_loaded.singular_values_, atol=1e-6)
|
|
279
|
+
assert_allclose(incpca.n_samples_seen_, incpca_loaded.n_samples_seen_, atol=1e-6)
|
|
280
|
+
assert_allclose(incpca.n_features_in_, incpca_loaded.n_features_in_, atol=1e-6)
|
|
281
|
+
assert_allclose(incpca.mean_, incpca_loaded.mean_, atol=1e-6)
|
|
282
|
+
assert_allclose(incpca.var_, incpca_loaded.var_, atol=1e-6)
|
|
283
|
+
assert_allclose(
|
|
284
|
+
incpca.explained_variance_, incpca_loaded.explained_variance_, atol=1e-6
|
|
285
|
+
)
|
|
286
|
+
assert_allclose(incpca.components_, incpca_loaded.components_, atol=1e-6)
|
|
287
|
+
assert_allclose(
|
|
288
|
+
incpca.explained_variance_ratio_,
|
|
289
|
+
incpca_loaded.explained_variance_ratio_,
|
|
290
|
+
atol=1e-6,
|
|
291
|
+
)
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# ==============================================================================
|
|
2
|
+
# Copyright Contributors to the oneDAL Project
|
|
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 .dummy import DummyEstimator
|
|
18
|
+
|
|
19
|
+
__all__ = ["DummyEstimator"]
|