scikit-learn-intelex 2024.7.0__py312-none-win_amd64.whl → 2025.0.1__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.
Potentially problematic release.
This version of scikit-learn-intelex might be problematic. Click here for more details.
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/__init__.py +73 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/__main__.py +58 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/_daal4py.cp312-win_amd64.pyd +0 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/doc/third-party-programs.txt +424 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/mb/__init__.py +19 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/mb/model_builders.py +377 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/mpi_transceiver.cp312-win_amd64.pyd +0 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/__init__.py +40 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/_n_jobs_support.py +242 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/_utils.py +241 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/cluster/__init__.py +20 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/cluster/dbscan.py +165 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/cluster/k_means.py +597 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/cluster/tests/test_dbscan.py +109 -0
- {scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/spmd → scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn}/decomposition/__init__.py +2 -2
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/decomposition/_pca.py +524 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/ensemble/AdaBoostClassifier.py +192 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/ensemble/GBTDAAL.py +318 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/ensemble/__init__.py +27 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/ensemble/_forest.py +1397 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/ensemble/tests/test_decision_forest.py +206 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/linear_model/__init__.py +29 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/linear_model/_coordinate_descent.py +848 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/linear_model/_linear.py +272 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/linear_model/_ridge.py +325 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/linear_model/coordinate_descent.py +17 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/linear_model/linear.py +17 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/linear_model/logistic_loss.py +195 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/linear_model/logistic_path.py +1026 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/linear_model/ridge.py +17 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/linear_model/tests/test_linear.py +196 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/linear_model/tests/test_ridge.py +69 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/manifold/__init__.py +19 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/manifold/_t_sne.py +405 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/metrics/__init__.py +20 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/metrics/_pairwise.py +155 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/metrics/_ranking.py +210 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/model_selection/__init__.py +19 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/model_selection/_split.py +309 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/model_selection/tests/test_split.py +56 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/__init__.py +0 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/dispatcher.py +232 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/tests/_models_info.py +161 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/tests/test_monkeypatch.py +71 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/tests/test_patching.py +87 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/monkeypatch/tests/utils/_launch_algorithms.py +118 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/neighbors/__init__.py +21 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/neighbors/_base.py +503 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/neighbors/_classification.py +139 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/neighbors/_regression.py +74 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/neighbors/_unsupervised.py +55 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/neighbors/tests/test_kneighbors.py +113 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/svm/__init__.py +19 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/svm/svm.py +734 -0
- {scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/spmd/covariance → scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/utils}/__init__.py +5 -3
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/utils/base.py +75 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/utils/tests/test_utils.py +51 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/daal4py/sklearn/utils/validation.py +693 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/__init__.py +83 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/_config.py +53 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/_device_offload.py +229 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/_onedal_py_dpc.cp312-win_amd64.pyd +0 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/_onedal_py_host.cp312-win_amd64.pyd +0 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/basic_statistics/basic_statistics.py +107 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/basic_statistics/incremental_basic_statistics.py +160 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/basic_statistics/tests/test_basic_statistics.py +298 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/basic_statistics/tests/test_incremental_basic_statistics.py +196 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/cluster/__init__.py +27 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/cluster/dbscan.py +110 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/cluster/kmeans.py +560 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/cluster/kmeans_init.py +115 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/cluster/tests/test_dbscan.py +125 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/cluster/tests/test_kmeans.py +88 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/cluster/tests/test_kmeans_init.py +93 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/common/_base.py +38 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/common/_estimator_checks.py +47 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/common/_mixin.py +62 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/common/_policy.py +59 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/common/_spmd_policy.py +30 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/common/hyperparameters.py +116 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/common/tests/test_policy.py +75 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/covariance/__init__.py +20 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/covariance/covariance.py +125 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/covariance/incremental_covariance.py +146 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/covariance/tests/test_covariance.py +50 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/covariance/tests/test_incremental_covariance.py +122 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/datatypes/__init__.py +19 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/datatypes/_data_conversion.py +95 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/datatypes/tests/test_data.py +235 -0
- {scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics → scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/decomposition}/__init__.py +3 -2
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/decomposition/incremental_pca.py +204 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/decomposition/pca.py +186 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/decomposition/tests/test_incremental_pca.py +198 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/ensemble/__init__.py +29 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/ensemble/forest.py +720 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/ensemble/tests/test_random_forest.py +97 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/linear_model/__init__.py +27 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/linear_model/incremental_linear_model.py +258 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/linear_model/linear_model.py +329 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/linear_model/logistic_regression.py +249 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/linear_model/tests/test_incremental_linear_regression.py +168 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/linear_model/tests/test_incremental_ridge_regression.py +107 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/linear_model/tests/test_linear_regression.py +149 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/linear_model/tests/test_logistic_regression.py +95 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/linear_model/tests/test_ridge.py +95 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/neighbors/__init__.py +19 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/neighbors/neighbors.py +778 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/neighbors/tests/test_knn_classification.py +49 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/primitives/__init__.py +27 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/primitives/get_tree.py +25 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/primitives/kernel_functions.py +153 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/primitives/tests/test_kernel_functions.py +159 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/svm/__init__.py +19 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/svm/svm.py +556 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/svm/tests/test_csr_svm.py +351 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/svm/tests/test_nusvc.py +204 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/svm/tests/test_nusvr.py +210 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/svm/tests/test_svc.py +168 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/svm/tests/test_svr.py +243 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/tests/test_common.py +41 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/tests/utils/_dataframes_support.py +168 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/tests/utils/_device_selection.py +107 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/utils/__init__.py +49 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/utils/_array_api.py +91 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/utils/validation.py +432 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/_device_offload.py +36 -13
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/sklearnex/basic_statistics/__init__.py +20 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/basic_statistics/basic_statistics.py +30 -8
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/basic_statistics/incremental_basic_statistics.py +49 -16
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/cluster/__init__.py +1 -1
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/sklearnex/cluster/k_means.py +383 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/sklearnex/cluster/tests/test_kmeans.py +153 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/covariance/incremental_covariance.py +28 -10
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/covariance/tests/test_incremental_covariance.py +11 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/decomposition/pca.py +1 -1
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/dispatcher.py +19 -9
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/ensemble/_forest.py +1 -1
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/linear_model/__init__.py +2 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/linear_model/coordinate_descent.py +7 -7
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/linear_model/incremental_linear.py +45 -26
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/sklearnex/linear_model/incremental_ridge.py +418 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/linear_model/ridge.py +4 -4
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/linear_model/tests/test_incremental_linear.py +13 -10
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/sklearnex/linear_model/tests/test_incremental_ridge.py +153 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/linear_model/tests/test_logreg.py +5 -4
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/manifold/t_sne.py +3 -3
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/metrics/pairwise.py +2 -2
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/metrics/ranking.py +2 -2
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/model_selection/split.py +4 -2
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/neighbors/_lof.py +2 -1
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/neighbors/common.py +1 -1
- {scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/preview/cluster → scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/sklearnex/preview}/__init__.py +1 -3
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/preview/decomposition/incremental_pca.py +8 -8
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/preview/decomposition/tests/test_incremental_pca.py +2 -2
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/preview/linear_model/ridge.py +4 -4
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/__init__.py +20 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/incremental_basic_statistics.py +30 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/tests/test_incremental_basic_statistics_spmd.py +307 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/sklearnex/spmd/covariance/__init__.py +20 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/sklearnex/spmd/covariance/incremental_covariance.py +37 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/sklearnex/spmd/covariance/tests/test_incremental_covariance_spmd.py +184 -0
- {scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/preview → scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/sklearnex/spmd/decomposition}/__init__.py +4 -1
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/sklearnex/spmd/decomposition/incremental_pca.py +30 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/sklearnex/spmd/decomposition/tests/test_incremental_pca_spmd.py +269 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/spmd/linear_model/__init__.py +2 -1
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/sklearnex/spmd/linear_model/incremental_linear_model.py +35 -0
- scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/sklearnex/spmd/linear_model/tests/test_incremental_linear_spmd.py +329 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/spmd/linear_model/tests/test_logistic_regression_spmd.py +4 -1
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/svm/nusvc.py +1 -1
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/svm/svc.py +1 -1
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/tests/_utils_spmd.py +18 -5
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/tests/test_memory_usage.py +2 -1
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/tests/test_patching.py +0 -1
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/tests/test_run_to_run_stability.py +12 -11
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/utils/__init__.py +1 -2
- scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/utils/_namespace.py → scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/sklearnex/utils/_array_api.py +5 -20
- {scikit_learn_intelex-2024.7.0.dist-info → scikit_learn_intelex-2025.0.1.dist-info}/METADATA +3 -2
- scikit_learn_intelex-2025.0.1.dist-info/RECORD +255 -0
- scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/cluster/k_means.py +0 -25
- scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/cluster/tests/test_kmeans.py +0 -42
- scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/preview/cluster/_common.py +0 -84
- scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/preview/cluster/k_means.py +0 -303
- scikit_learn_intelex-2024.7.0.dist-info/RECORD +0 -122
- {scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex → scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal}/basic_statistics/__init__.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/__init__.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/__main__.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/_config.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/_utils.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/basic_statistics/tests/test_basic_statistics.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/basic_statistics/tests/test_incremental_basic_statistics.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/cluster/dbscan.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/cluster/tests/test_dbscan.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/conftest.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/covariance/__init__.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/decomposition/__init__.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/decomposition/tests/test_pca.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/doc/third-party-programs.txt +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/ensemble/__init__.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/ensemble/tests/test_forest.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/glob/__main__.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/glob/dispatcher.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/linear_model/linear.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/linear_model/logistic_path.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/linear_model/logistic_regression.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/linear_model/tests/test_linear.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/manifold/__init__.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/manifold/tests/test_tsne.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/metrics/__init__.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/metrics/tests/test_metrics.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/model_selection/__init__.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/model_selection/tests/test_model_selection.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/neighbors/__init__.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/neighbors/knn_classification.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/neighbors/knn_regression.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/neighbors/knn_unsupervised.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/neighbors/tests/test_neighbors.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/preview/covariance/__init__.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/preview/covariance/covariance.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/preview/covariance/tests/test_covariance.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/preview/decomposition/__init__.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/preview/linear_model/__init__.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/preview/linear_model/tests/test_ridge.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/spmd/__init__.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/spmd/basic_statistics/basic_statistics.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/spmd/basic_statistics/tests/test_basic_statistics_spmd.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/spmd/cluster/__init__.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/spmd/cluster/dbscan.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/spmd/cluster/kmeans.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/spmd/cluster/tests/test_dbscan_spmd.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/spmd/cluster/tests/test_kmeans_spmd.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/spmd/covariance/covariance.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/spmd/covariance/tests/test_covariance_spmd.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/spmd/decomposition/pca.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/spmd/decomposition/tests/test_pca_spmd.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/spmd/ensemble/__init__.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/spmd/ensemble/forest.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/spmd/ensemble/tests/test_forest_spmd.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/spmd/linear_model/linear_model.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/spmd/linear_model/logistic_regression.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/spmd/linear_model/tests/test_linear_regression_spmd.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/spmd/neighbors/__init__.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/spmd/neighbors/neighbors.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/spmd/neighbors/tests/test_neighbors_spmd.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/svm/__init__.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/svm/_common.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/svm/nusvr.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/svm/svr.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/svm/tests/test_svm.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/tests/_utils.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/tests/test_common.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/tests/test_config.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/tests/test_monkeypatch.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/tests/test_n_jobs_support.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/tests/test_parallel.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/utils/parallel.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/utils/tests/test_finite.py +0 -0
- {scikit_learn_intelex-2024.7.0.data → scikit_learn_intelex-2025.0.1.data}/data/Lib/site-packages/sklearnex/utils/validation.py +0 -0
- {scikit_learn_intelex-2024.7.0.dist-info → scikit_learn_intelex-2025.0.1.dist-info}/LICENSE.txt +0 -0
- {scikit_learn_intelex-2024.7.0.dist-info → scikit_learn_intelex-2025.0.1.dist-info}/WHEEL +0 -0
- {scikit_learn_intelex-2024.7.0.dist-info → scikit_learn_intelex-2025.0.1.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,235 @@
|
|
|
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
|
+
|
|
21
|
+
from onedal import _backend
|
|
22
|
+
from onedal.datatypes import from_table, to_table
|
|
23
|
+
from onedal.primitives import linear_kernel
|
|
24
|
+
from onedal.tests.utils._device_selection import get_queues
|
|
25
|
+
|
|
26
|
+
try:
|
|
27
|
+
import dpctl
|
|
28
|
+
import dpctl.tensor as dpt
|
|
29
|
+
|
|
30
|
+
dpctl_available = dpctl.__version__ >= "0.14"
|
|
31
|
+
except ImportError:
|
|
32
|
+
dpctl_available = False
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def _test_input_format_c_contiguous_numpy(queue, dtype):
|
|
36
|
+
rng = np.random.RandomState(0)
|
|
37
|
+
x_default = np.array(5 * rng.random_sample((10, 4)), dtype=dtype)
|
|
38
|
+
|
|
39
|
+
x_numpy = np.asanyarray(x_default, dtype=dtype, order="C")
|
|
40
|
+
assert x_numpy.flags.c_contiguous
|
|
41
|
+
assert not x_numpy.flags.f_contiguous
|
|
42
|
+
assert not x_numpy.flags.fnc
|
|
43
|
+
|
|
44
|
+
expected = linear_kernel(x_default, queue=queue)
|
|
45
|
+
result = linear_kernel(x_numpy, queue=queue)
|
|
46
|
+
assert_allclose(expected, result)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
@pytest.mark.parametrize("queue", get_queues())
|
|
50
|
+
@pytest.mark.parametrize("dtype", [np.float32, np.float64])
|
|
51
|
+
def test_input_format_c_contiguous_numpy(queue, dtype):
|
|
52
|
+
if queue and queue.sycl_device.is_gpu:
|
|
53
|
+
pytest.skip("Sporadic failures on GPU sycl_queue.")
|
|
54
|
+
_test_input_format_c_contiguous_numpy(queue, dtype)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def _test_input_format_f_contiguous_numpy(queue, dtype):
|
|
58
|
+
rng = np.random.RandomState(0)
|
|
59
|
+
x_default = np.array(5 * rng.random_sample((10, 4)), dtype=dtype)
|
|
60
|
+
|
|
61
|
+
x_numpy = np.asanyarray(x_default, dtype=dtype, order="F")
|
|
62
|
+
assert not x_numpy.flags.c_contiguous
|
|
63
|
+
assert x_numpy.flags.f_contiguous
|
|
64
|
+
assert x_numpy.flags.fnc
|
|
65
|
+
|
|
66
|
+
expected = linear_kernel(x_default, queue=queue)
|
|
67
|
+
result = linear_kernel(x_numpy, queue=queue)
|
|
68
|
+
assert_allclose(expected, result)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
@pytest.mark.parametrize("queue", get_queues())
|
|
72
|
+
@pytest.mark.parametrize("dtype", [np.float32, np.float64])
|
|
73
|
+
def test_input_format_f_contiguous_numpy(queue, dtype):
|
|
74
|
+
if queue and queue.sycl_device.is_gpu:
|
|
75
|
+
pytest.skip("Sporadic failures on GPU sycl_queue.")
|
|
76
|
+
_test_input_format_f_contiguous_numpy(queue, dtype)
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def _test_input_format_c_not_contiguous_numpy(queue, dtype):
|
|
80
|
+
rng = np.random.RandomState(0)
|
|
81
|
+
x_default = np.array(5 * rng.random_sample((10, 4)), dtype=dtype)
|
|
82
|
+
|
|
83
|
+
dummy_data = np.insert(x_default, range(1, x_default.shape[1]), 8, axis=1)
|
|
84
|
+
x_numpy = dummy_data[:, ::2]
|
|
85
|
+
|
|
86
|
+
assert_allclose(x_numpy, x_default)
|
|
87
|
+
|
|
88
|
+
assert not x_numpy.flags.c_contiguous
|
|
89
|
+
assert not x_numpy.flags.f_contiguous
|
|
90
|
+
assert not x_numpy.flags.fnc
|
|
91
|
+
|
|
92
|
+
expected = linear_kernel(x_default, queue=queue)
|
|
93
|
+
result = linear_kernel(x_numpy, queue=queue)
|
|
94
|
+
assert_allclose(expected, result)
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
@pytest.mark.parametrize("queue", get_queues())
|
|
98
|
+
@pytest.mark.parametrize("dtype", [np.float32, np.float64])
|
|
99
|
+
def test_input_format_c_not_contiguous_numpy(queue, dtype):
|
|
100
|
+
if queue and queue.sycl_device.is_gpu:
|
|
101
|
+
pytest.skip("Sporadic failures on GPU sycl_queue.")
|
|
102
|
+
_test_input_format_c_not_contiguous_numpy(queue, dtype)
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
def _test_input_format_c_contiguous_pandas(queue, dtype):
|
|
106
|
+
pd = pytest.importorskip("pandas")
|
|
107
|
+
rng = np.random.RandomState(0)
|
|
108
|
+
x_default = np.array(5 * rng.random_sample((10, 4)), dtype=dtype)
|
|
109
|
+
|
|
110
|
+
x_numpy = np.asanyarray(x_default, dtype=dtype, order="C")
|
|
111
|
+
assert x_numpy.flags.c_contiguous
|
|
112
|
+
assert not x_numpy.flags.f_contiguous
|
|
113
|
+
assert not x_numpy.flags.fnc
|
|
114
|
+
x_df = pd.DataFrame(x_numpy)
|
|
115
|
+
|
|
116
|
+
expected = linear_kernel(x_df, queue=queue)
|
|
117
|
+
result = linear_kernel(x_numpy, queue=queue)
|
|
118
|
+
assert_allclose(expected, result)
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
@pytest.mark.parametrize("queue", get_queues())
|
|
122
|
+
@pytest.mark.parametrize("dtype", [np.float32, np.float64])
|
|
123
|
+
def test_input_format_c_contiguous_pandas(queue, dtype):
|
|
124
|
+
if queue and queue.sycl_device.is_gpu:
|
|
125
|
+
pytest.skip("Sporadic failures on GPU sycl_queue.")
|
|
126
|
+
_test_input_format_c_contiguous_pandas(queue, dtype)
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
def _test_input_format_f_contiguous_pandas(queue, dtype):
|
|
130
|
+
pd = pytest.importorskip("pandas")
|
|
131
|
+
rng = np.random.RandomState(0)
|
|
132
|
+
x_default = np.array(5 * rng.random_sample((10, 4)), dtype=dtype)
|
|
133
|
+
|
|
134
|
+
x_numpy = np.asanyarray(x_default, dtype=dtype, order="F")
|
|
135
|
+
assert not x_numpy.flags.c_contiguous
|
|
136
|
+
assert x_numpy.flags.f_contiguous
|
|
137
|
+
assert x_numpy.flags.fnc
|
|
138
|
+
x_df = pd.DataFrame(x_numpy)
|
|
139
|
+
|
|
140
|
+
expected = linear_kernel(x_df, queue=queue)
|
|
141
|
+
result = linear_kernel(x_numpy, queue=queue)
|
|
142
|
+
assert_allclose(expected, result)
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
@pytest.mark.parametrize("queue", get_queues())
|
|
146
|
+
@pytest.mark.parametrize("dtype", [np.float32, np.float64])
|
|
147
|
+
def test_input_format_f_contiguous_pandas(queue, dtype):
|
|
148
|
+
if queue and queue.sycl_device.is_gpu:
|
|
149
|
+
pytest.skip("Sporadic failures on GPU sycl_queue.")
|
|
150
|
+
_test_input_format_f_contiguous_pandas(queue, dtype)
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
def _test_conversion_to_table(dtype):
|
|
154
|
+
np.random.seed()
|
|
155
|
+
if dtype in [np.int32, np.int64]:
|
|
156
|
+
x = np.random.randint(0, 10, (15, 3), dtype=dtype)
|
|
157
|
+
else:
|
|
158
|
+
x = np.random.uniform(-2, 2, (18, 6)).astype(dtype)
|
|
159
|
+
x_table = to_table(x)
|
|
160
|
+
x2 = from_table(x_table)
|
|
161
|
+
assert x.dtype == x2.dtype
|
|
162
|
+
assert np.array_equal(x, x2)
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
@pytest.mark.parametrize("dtype", [np.int32, np.int64, np.float32, np.float64])
|
|
166
|
+
def test_conversion_to_table(dtype):
|
|
167
|
+
_test_conversion_to_table(dtype)
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
# TODO:
|
|
171
|
+
# Currently `dpctl_to_table` is not used in onedal estimators.
|
|
172
|
+
# The test will be enabled after future data management update, that brings
|
|
173
|
+
# re-impl of conversions between onedal tables and usm ndarrays.
|
|
174
|
+
@pytest.mark.skip(
|
|
175
|
+
reason="Currently removed. Will be enabled after data management update"
|
|
176
|
+
)
|
|
177
|
+
@pytest.mark.skipif(not dpctl_available, reason="requires dpctl>=0.14")
|
|
178
|
+
@pytest.mark.parametrize("queue", get_queues("cpu,gpu"))
|
|
179
|
+
@pytest.mark.parametrize("dtype", [np.float32, np.float64, np.int32, np.int64])
|
|
180
|
+
def test_input_format_c_contiguous_dpctl(queue, dtype):
|
|
181
|
+
rng = np.random.RandomState(0)
|
|
182
|
+
x_default = np.array(5 * rng.random_sample((10, 59)), dtype=dtype)
|
|
183
|
+
|
|
184
|
+
x_numpy = np.asanyarray(x_default, dtype=dtype, order="C")
|
|
185
|
+
x_dpt = dpt.asarray(x_numpy, usm_type="device", sycl_queue=queue)
|
|
186
|
+
# assert not x_dpt.flags.fnc
|
|
187
|
+
assert isinstance(x_dpt, dpt.usm_ndarray)
|
|
188
|
+
|
|
189
|
+
x_table = _backend.dpctl_to_table(x_dpt)
|
|
190
|
+
assert hasattr(x_table, "__sycl_usm_array_interface__")
|
|
191
|
+
x_dpt_from_table = dpt.asarray(x_table)
|
|
192
|
+
|
|
193
|
+
assert (
|
|
194
|
+
x_dpt.__sycl_usm_array_interface__["data"][0]
|
|
195
|
+
== x_dpt_from_table.__sycl_usm_array_interface__["data"][0]
|
|
196
|
+
)
|
|
197
|
+
assert x_dpt.shape == x_dpt_from_table.shape
|
|
198
|
+
assert x_dpt.strides == x_dpt_from_table.strides
|
|
199
|
+
assert x_dpt.dtype == x_dpt_from_table.dtype
|
|
200
|
+
assert x_dpt.flags.c_contiguous
|
|
201
|
+
assert x_dpt_from_table.flags.c_contiguous
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
# TODO:
|
|
205
|
+
# Currently `dpctl_to_table` is not used in onedal estimators.
|
|
206
|
+
# The test will be enabled after future data management update, that brings
|
|
207
|
+
# re-impl of conversions between onedal tables and usm ndarrays.
|
|
208
|
+
@pytest.mark.skip(
|
|
209
|
+
reason="Currently removed. Will be enabled after data management update"
|
|
210
|
+
)
|
|
211
|
+
@pytest.mark.skipif(not dpctl_available, reason="requires dpctl>=0.14")
|
|
212
|
+
@pytest.mark.parametrize("queue", get_queues("cpu,gpu"))
|
|
213
|
+
@pytest.mark.parametrize("dtype", [np.float32, np.float64, np.int32, np.int64])
|
|
214
|
+
def test_input_format_f_contiguous_dpctl(queue, dtype):
|
|
215
|
+
rng = np.random.RandomState(0)
|
|
216
|
+
x_default = np.array(5 * rng.random_sample((10, 59)), dtype=dtype)
|
|
217
|
+
|
|
218
|
+
x_numpy = np.asanyarray(x_default, dtype=dtype, order="F")
|
|
219
|
+
x_dpt = dpt.asarray(x_numpy, usm_type="device", sycl_queue=queue)
|
|
220
|
+
# assert not x_dpt.flags.fnc
|
|
221
|
+
assert isinstance(x_dpt, dpt.usm_ndarray)
|
|
222
|
+
|
|
223
|
+
x_table = _backend.dpctl_to_table(x_dpt)
|
|
224
|
+
assert hasattr(x_table, "__sycl_usm_array_interface__")
|
|
225
|
+
x_dpt_from_table = dpt.asarray(x_table)
|
|
226
|
+
|
|
227
|
+
assert (
|
|
228
|
+
x_dpt.__sycl_usm_array_interface__["data"][0]
|
|
229
|
+
== x_dpt_from_table.__sycl_usm_array_interface__["data"][0]
|
|
230
|
+
)
|
|
231
|
+
assert x_dpt.shape == x_dpt_from_table.shape
|
|
232
|
+
assert x_dpt.strides == x_dpt_from_table.strides
|
|
233
|
+
assert x_dpt.dtype == x_dpt_from_table.dtype
|
|
234
|
+
assert x_dpt.flags.f_contiguous
|
|
235
|
+
assert x_dpt_from_table.flags.f_contiguous
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
# limitations under the License.
|
|
15
15
|
# ==============================================================================
|
|
16
16
|
|
|
17
|
-
from .
|
|
17
|
+
from .incremental_pca import IncrementalPCA
|
|
18
|
+
from .pca import PCA
|
|
18
19
|
|
|
19
|
-
__all__ = ["
|
|
20
|
+
__all__ = ["IncrementalPCA", "PCA"]
|
scikit_learn_intelex-2025.0.1.data/data/Lib/site-packages/onedal/decomposition/incremental_pca.py
ADDED
|
@@ -0,0 +1,204 @@
|
|
|
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 daal4py.sklearn._utils import get_dtype
|
|
20
|
+
|
|
21
|
+
from ..datatypes import _convert_to_supported, from_table, to_table
|
|
22
|
+
from ..utils import _check_array
|
|
23
|
+
from .pca import BasePCA
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class IncrementalPCA(BasePCA):
|
|
27
|
+
"""
|
|
28
|
+
Incremental estimator for PCA based on oneDAL implementation.
|
|
29
|
+
Allows to compute PCA if data are splitted into batches.
|
|
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 : string, default='cov'
|
|
42
|
+
Method used on oneDAL side to compute result.
|
|
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
|
+
|
|
88
|
+
def __init__(
|
|
89
|
+
self,
|
|
90
|
+
n_components=None,
|
|
91
|
+
is_deterministic=True,
|
|
92
|
+
method="cov",
|
|
93
|
+
whiten=False,
|
|
94
|
+
):
|
|
95
|
+
self.n_components = n_components
|
|
96
|
+
self.method = method
|
|
97
|
+
self.is_deterministic = is_deterministic
|
|
98
|
+
self.whiten = whiten
|
|
99
|
+
self._reset()
|
|
100
|
+
|
|
101
|
+
def _reset(self):
|
|
102
|
+
self._partial_result = self._get_backend(
|
|
103
|
+
"decomposition", "dim_reduction", "partial_train_result"
|
|
104
|
+
)
|
|
105
|
+
if hasattr(self, "components_"):
|
|
106
|
+
del self.components_
|
|
107
|
+
|
|
108
|
+
def partial_fit(self, X, queue):
|
|
109
|
+
"""Incremental fit with X. All of X is processed as a single batch.
|
|
110
|
+
|
|
111
|
+
Parameters
|
|
112
|
+
----------
|
|
113
|
+
X : array-like of shape (n_samples, n_features)
|
|
114
|
+
Training data, where `n_samples` is the number of samples and
|
|
115
|
+
`n_features` is the number of features.
|
|
116
|
+
|
|
117
|
+
y : Ignored
|
|
118
|
+
Not used, present for API consistency by convention.
|
|
119
|
+
|
|
120
|
+
Returns
|
|
121
|
+
-------
|
|
122
|
+
self : object
|
|
123
|
+
Returns the instance itself.
|
|
124
|
+
"""
|
|
125
|
+
X = _check_array(X)
|
|
126
|
+
n_samples, n_features = X.shape
|
|
127
|
+
|
|
128
|
+
first_pass = not hasattr(self, "components_")
|
|
129
|
+
if first_pass:
|
|
130
|
+
self.components_ = None
|
|
131
|
+
self.n_samples_seen_ = n_samples
|
|
132
|
+
self.n_features_in_ = n_features
|
|
133
|
+
else:
|
|
134
|
+
self.n_samples_seen_ += n_samples
|
|
135
|
+
|
|
136
|
+
if self.n_components is None:
|
|
137
|
+
if self.components_ is None:
|
|
138
|
+
self.n_components_ = min(n_samples, n_features)
|
|
139
|
+
else:
|
|
140
|
+
self.n_components_ = self.components_.shape[0]
|
|
141
|
+
else:
|
|
142
|
+
self.n_components_ = self.n_components
|
|
143
|
+
|
|
144
|
+
self._queue = queue
|
|
145
|
+
|
|
146
|
+
policy = self._get_policy(queue, X)
|
|
147
|
+
X = _convert_to_supported(policy, X)
|
|
148
|
+
|
|
149
|
+
if not hasattr(self, "_dtype"):
|
|
150
|
+
self._dtype = get_dtype(X)
|
|
151
|
+
self._params = self._get_onedal_params(X)
|
|
152
|
+
|
|
153
|
+
X_table = to_table(X)
|
|
154
|
+
self._partial_result = self._get_backend(
|
|
155
|
+
"decomposition",
|
|
156
|
+
"dim_reduction",
|
|
157
|
+
"partial_train",
|
|
158
|
+
policy,
|
|
159
|
+
self._params,
|
|
160
|
+
self._partial_result,
|
|
161
|
+
X_table,
|
|
162
|
+
)
|
|
163
|
+
return self
|
|
164
|
+
|
|
165
|
+
def finalize_fit(self, queue=None):
|
|
166
|
+
"""
|
|
167
|
+
Finalizes principal components computation and obtains resulting
|
|
168
|
+
attributes from the current `_partial_result`.
|
|
169
|
+
|
|
170
|
+
Parameters
|
|
171
|
+
----------
|
|
172
|
+
queue : dpctl.SyclQueue
|
|
173
|
+
Not used here, added for API conformance
|
|
174
|
+
|
|
175
|
+
Returns
|
|
176
|
+
-------
|
|
177
|
+
self : object
|
|
178
|
+
Returns the instance itself.
|
|
179
|
+
"""
|
|
180
|
+
if queue is not None:
|
|
181
|
+
policy = self._get_policy(queue)
|
|
182
|
+
else:
|
|
183
|
+
policy = self._get_policy(self._queue)
|
|
184
|
+
result = self._get_backend(
|
|
185
|
+
"decomposition",
|
|
186
|
+
"dim_reduction",
|
|
187
|
+
"finalize_train",
|
|
188
|
+
policy,
|
|
189
|
+
self._params,
|
|
190
|
+
self._partial_result,
|
|
191
|
+
)
|
|
192
|
+
self.mean_ = from_table(result.means).ravel()
|
|
193
|
+
self.var_ = from_table(result.variances).ravel()
|
|
194
|
+
self.components_ = from_table(result.eigenvectors)
|
|
195
|
+
self.singular_values_ = np.nan_to_num(from_table(result.singular_values).ravel())
|
|
196
|
+
self.explained_variance_ = np.maximum(from_table(result.eigenvalues).ravel(), 0)
|
|
197
|
+
self.explained_variance_ratio_ = from_table(
|
|
198
|
+
result.explained_variances_ratio
|
|
199
|
+
).ravel()
|
|
200
|
+
self.noise_variance_ = self._compute_noise_variance(
|
|
201
|
+
self.n_components_, min(self.n_samples_seen_, self.n_features_in_)
|
|
202
|
+
)
|
|
203
|
+
|
|
204
|
+
return self
|
|
@@ -0,0 +1,186 @@
|
|
|
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
|
+
from sklearn.decomposition._pca import _infer_dimension
|
|
22
|
+
from sklearn.utils.extmath import stable_cumsum
|
|
23
|
+
|
|
24
|
+
from ..common._base import BaseEstimator
|
|
25
|
+
from ..datatypes import _convert_to_supported, from_table, to_table
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class BasePCA(BaseEstimator, metaclass=ABCMeta):
|
|
29
|
+
"""
|
|
30
|
+
Base class for PCA oneDAL implementation.
|
|
31
|
+
"""
|
|
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
|
+
|
|
45
|
+
def _get_onedal_params(self, data, stage=None):
|
|
46
|
+
if stage is None:
|
|
47
|
+
n_components = self._resolve_n_components_for_training(data.shape)
|
|
48
|
+
elif stage == "predict":
|
|
49
|
+
n_components = self.n_components_
|
|
50
|
+
return {
|
|
51
|
+
"fptype": "float" if data.dtype == np.float32 else "double",
|
|
52
|
+
"method": self.method,
|
|
53
|
+
"n_components": n_components,
|
|
54
|
+
"is_deterministic": self.is_deterministic,
|
|
55
|
+
"whiten": self.whiten,
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
def _validate_n_components(self, n_components, n_samples, n_features):
|
|
59
|
+
if n_components is None:
|
|
60
|
+
n_components = min(n_samples, n_features)
|
|
61
|
+
if n_components == "mle":
|
|
62
|
+
if n_samples < n_features:
|
|
63
|
+
raise ValueError(
|
|
64
|
+
"n_components='mle' is only supported if n_samples >= n_features"
|
|
65
|
+
)
|
|
66
|
+
elif not 0 <= n_components <= min(n_samples, n_features):
|
|
67
|
+
raise ValueError(
|
|
68
|
+
"n_components=%r must be between 0 and "
|
|
69
|
+
"min(n_samples, n_features)=%r with "
|
|
70
|
+
"svd_solver='full'" % (n_components, min(n_samples, n_features))
|
|
71
|
+
)
|
|
72
|
+
elif n_components >= 1:
|
|
73
|
+
if not isinstance(n_components, numbers.Integral):
|
|
74
|
+
raise ValueError(
|
|
75
|
+
"n_components=%r must be of type int "
|
|
76
|
+
"when greater than or equal to 1, "
|
|
77
|
+
"was of type=%r" % (n_components, type(n_components))
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
def _resolve_n_components_for_training(self, shape_tuple):
|
|
81
|
+
if self.n_components is None or self.n_components == "mle":
|
|
82
|
+
return min(shape_tuple)
|
|
83
|
+
elif (
|
|
84
|
+
isinstance(self.n_components, float)
|
|
85
|
+
and self.n_components > 0.0
|
|
86
|
+
and self.n_components <= 1.0
|
|
87
|
+
):
|
|
88
|
+
return min(shape_tuple)
|
|
89
|
+
else:
|
|
90
|
+
return self.n_components
|
|
91
|
+
|
|
92
|
+
def _resolve_n_components_for_result(self, shape_tuple):
|
|
93
|
+
if self.n_components is None:
|
|
94
|
+
return min(shape_tuple)
|
|
95
|
+
elif self.n_components == "mle":
|
|
96
|
+
return _infer_dimension(self.explained_variance_, shape_tuple[0])
|
|
97
|
+
elif 0.0 < self.n_components < 1.0:
|
|
98
|
+
ratio_cumsum = stable_cumsum(self.explained_variance_ratio_)
|
|
99
|
+
return np.searchsorted(ratio_cumsum, self.n_components, side="right") + 1
|
|
100
|
+
elif isinstance(self.n_components, float) and self.n_components == 1.0:
|
|
101
|
+
return min(shape_tuple)
|
|
102
|
+
else:
|
|
103
|
+
return self.n_components
|
|
104
|
+
|
|
105
|
+
def _compute_noise_variance(self, n_components, n_sf_min):
|
|
106
|
+
if n_components < n_sf_min:
|
|
107
|
+
if len(self.explained_variance_) == n_sf_min:
|
|
108
|
+
return self.explained_variance_[n_components:].mean()
|
|
109
|
+
elif len(self.explained_variance_) < n_sf_min:
|
|
110
|
+
# TODO Rename variances_ to var_ to align with sklearn/sklearnex IncrementalPCA
|
|
111
|
+
if hasattr(self, "variances_"):
|
|
112
|
+
resid_var = self.variances_.sum()
|
|
113
|
+
elif hasattr(self, "var_"):
|
|
114
|
+
resid_var = self.var_.sum()
|
|
115
|
+
|
|
116
|
+
resid_var -= self.explained_variance_.sum()
|
|
117
|
+
return resid_var / (n_sf_min - n_components)
|
|
118
|
+
else:
|
|
119
|
+
return 0.0
|
|
120
|
+
|
|
121
|
+
def _create_model(self):
|
|
122
|
+
m = self._get_backend("decomposition", "dim_reduction", "model")
|
|
123
|
+
m.eigenvectors = to_table(self.components_)
|
|
124
|
+
m.means = to_table(self.mean_)
|
|
125
|
+
if self.whiten:
|
|
126
|
+
m.eigenvalues = to_table(self.explained_variance_)
|
|
127
|
+
self._onedal_model = m
|
|
128
|
+
return m
|
|
129
|
+
|
|
130
|
+
def predict(self, X, queue=None):
|
|
131
|
+
policy = self._get_policy(queue, X)
|
|
132
|
+
model = self._create_model()
|
|
133
|
+
X = _convert_to_supported(policy, X)
|
|
134
|
+
params = self._get_onedal_params(X, stage="predict")
|
|
135
|
+
|
|
136
|
+
result = self._get_backend(
|
|
137
|
+
"decomposition", "dim_reduction", "infer", policy, params, model, to_table(X)
|
|
138
|
+
)
|
|
139
|
+
return from_table(result.transformed_data)
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
class PCA(BasePCA):
|
|
143
|
+
|
|
144
|
+
def fit(self, X, y=None, queue=None):
|
|
145
|
+
n_samples, n_features = X.shape
|
|
146
|
+
n_sf_min = min(n_samples, n_features)
|
|
147
|
+
self._validate_n_components(self.n_components, n_samples, n_features)
|
|
148
|
+
|
|
149
|
+
policy = self._get_policy(queue, X)
|
|
150
|
+
# TODO: investigate why np.ndarray with OWNDATA=FALSE flag
|
|
151
|
+
# fails to be converted to oneDAL table
|
|
152
|
+
if isinstance(X, np.ndarray) and not X.flags["OWNDATA"]:
|
|
153
|
+
X = X.copy()
|
|
154
|
+
X = _convert_to_supported(policy, X)
|
|
155
|
+
|
|
156
|
+
params = self._get_onedal_params(X)
|
|
157
|
+
result = self._get_backend(
|
|
158
|
+
"decomposition", "dim_reduction", "train", policy, params, to_table(X)
|
|
159
|
+
)
|
|
160
|
+
|
|
161
|
+
self.mean_ = from_table(result.means).ravel()
|
|
162
|
+
self.variances_ = from_table(result.variances)
|
|
163
|
+
self.components_ = from_table(result.eigenvectors)
|
|
164
|
+
self.singular_values_ = from_table(result.singular_values).ravel()
|
|
165
|
+
self.explained_variance_ = np.maximum(from_table(result.eigenvalues).ravel(), 0)
|
|
166
|
+
self.explained_variance_ratio_ = from_table(
|
|
167
|
+
result.explained_variances_ratio
|
|
168
|
+
).ravel()
|
|
169
|
+
self.n_samples_ = n_samples
|
|
170
|
+
self.n_features_ = n_features
|
|
171
|
+
|
|
172
|
+
U = None
|
|
173
|
+
S = self.singular_values_
|
|
174
|
+
Vt = self.components_
|
|
175
|
+
|
|
176
|
+
n_components = self._resolve_n_components_for_result(X.shape)
|
|
177
|
+
self.n_components_ = n_components
|
|
178
|
+
self.noise_variance_ = self._compute_noise_variance(n_components, n_sf_min)
|
|
179
|
+
|
|
180
|
+
if n_components < params["n_components"]:
|
|
181
|
+
self.explained_variance_ = self.explained_variance_[:n_components]
|
|
182
|
+
self.components_ = self.components_[:n_components]
|
|
183
|
+
self.singular_values_ = self.singular_values_[:n_components]
|
|
184
|
+
self.explained_variance_ratio_ = self.explained_variance_ratio_[:n_components]
|
|
185
|
+
|
|
186
|
+
return self
|