scikit-learn-intelex 2025.10.0__py313-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.cp313-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.cp313-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-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/decomposition/__init__.py +19 -0
- 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-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/__init__.py +29 -0
- 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-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/linear_model/coordinate_descent.py +17 -0
- 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-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/manifold/__init__.py +19 -0
- 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-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/model_selection/__init__.py +19 -0
- 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-2025.10.0.data/data/Lib/site-packages/daal4py/sklearn/utils/__init__.py +21 -0
- 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.cp313-win_amd64.pyd +0 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/_onedal_py_host.cp313-win_amd64.pyd +0 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/onedal/basic_statistics/__init__.py +20 -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-2025.10.0.data/data/Lib/site-packages/onedal/decomposition/__init__.py +20 -0
- 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-2025.10.0.data/data/Lib/site-packages/onedal/neighbors/__init__.py +19 -0
- 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-2025.10.0.data/data/Lib/site-packages/sklearnex/__init__.py +69 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/__main__.py +58 -0
- 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-2025.10.0.data/data/Lib/site-packages/sklearnex/basic_statistics/incremental_basic_statistics.py +338 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/basic_statistics/tests/test_basic_statistics.py +405 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/basic_statistics/tests/test_incremental_basic_statistics.py +455 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/cluster/__init__.py +20 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/cluster/dbscan.py +199 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/cluster/k_means.py +399 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/cluster/tests/test_dbscan.py +38 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/cluster/tests/test_kmeans.py +157 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/conftest.py +82 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/covariance/__init__.py +19 -0
- 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/__init__.py +19 -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-2025.10.0.data/data/Lib/site-packages/sklearnex/dispatcher.py +572 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/doc/third-party-programs.txt +629 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/dummy/__init__.py +19 -0
- 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-2025.10.0.data/data/Lib/site-packages/sklearnex/ensemble/__init__.py +29 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/ensemble/_forest.py +1799 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/ensemble/tests/test_forest.py +196 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/glob/__main__.py +72 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/glob/dispatcher.py +101 -0
- 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-2025.10.0.data/data/Lib/site-packages/sklearnex/manifold/__init__.py +19 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/manifold/t_sne.py +28 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/manifold/tests/test_tsne.py +256 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/metrics/__init__.py +23 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/metrics/pairwise.py +20 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/metrics/ranking.py +20 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/metrics/tests/test_metrics.py +39 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/model_selection/__init__.py +21 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/model_selection/split.py +20 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/model_selection/tests/test_model_selection.py +34 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/neighbors/__init__.py +27 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/neighbors/_lof.py +189 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/neighbors/common.py +313 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/neighbors/knn_classification.py +189 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/neighbors/knn_regression.py +167 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/neighbors/knn_unsupervised.py +170 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/neighbors/tests/test_neighbors.py +82 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/preview/__init__.py +17 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/preview/covariance/__init__.py +19 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/preview/covariance/covariance.py +261 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/preview/covariance/tests/test_covariance.py +112 -0
- 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/__init__.py +25 -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-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/cluster/__init__.py +30 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/cluster/dbscan.py +26 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/cluster/kmeans.py +21 -0
- 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-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/__init__.py +20 -0
- 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-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/decomposition/pca.py +23 -0
- 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/__init__.py +19 -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-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/__init__.py +21 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/incremental_linear_model.py +28 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/linear_model.py +24 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/logistic_regression.py +21 -0
- 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-2025.10.0.data/data/Lib/site-packages/sklearnex/spmd/neighbors/__init__.py +23 -0
- 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/__init__.py +29 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/svm/_common.py +403 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/svm/nusvc.py +278 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/svm/nusvr.py +158 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/svm/svc.py +306 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/svm/svr.py +155 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/svm/tests/test_svm.py +124 -0
- 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-2025.10.0.data/data/Lib/site-packages/sklearnex/tests/test_monkeypatch.py +269 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/tests/test_n_jobs_support.py +111 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/tests/test_parallel.py +48 -0
- scikit_learn_intelex-2025.10.0.data/data/Lib/site-packages/sklearnex/tests/test_patching.py +418 -0
- 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-2025.10.0.data/data/Lib/site-packages/sklearnex/utils/__init__.py +19 -0
- 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/LICENSE.txt +202 -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-2025.10.0.dist-info/WHEEL +5 -0
- scikit_learn_intelex-2025.10.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,582 @@
|
|
|
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 logging
|
|
18
|
+
import warnings
|
|
19
|
+
from abc import ABC
|
|
20
|
+
|
|
21
|
+
import numpy as np
|
|
22
|
+
|
|
23
|
+
from daal4py.sklearn._utils import daal_check_version
|
|
24
|
+
from onedal._device_offload import supports_queue
|
|
25
|
+
from onedal.basic_statistics import BasicStatistics
|
|
26
|
+
from onedal.common._backend import bind_default_backend
|
|
27
|
+
from onedal.utils import _sycl_queue_manager as QM
|
|
28
|
+
|
|
29
|
+
if daal_check_version((2023, "P", 200)):
|
|
30
|
+
from .kmeans_init import KMeansInit
|
|
31
|
+
|
|
32
|
+
from sklearn.cluster._kmeans import _kmeans_plusplus
|
|
33
|
+
from sklearn.exceptions import ConvergenceWarning
|
|
34
|
+
from sklearn.metrics.pairwise import euclidean_distances
|
|
35
|
+
from sklearn.utils import check_random_state
|
|
36
|
+
|
|
37
|
+
from .._config import _get_config
|
|
38
|
+
from ..common._mixin import ClusterMixin, TransformerMixin
|
|
39
|
+
from ..datatypes import from_table, to_table
|
|
40
|
+
from ..utils.validation import _check_array, _is_arraylike_not_scalar, _is_csr
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class _BaseKMeans(TransformerMixin, ClusterMixin, ABC):
|
|
44
|
+
def __init__(
|
|
45
|
+
self,
|
|
46
|
+
n_clusters,
|
|
47
|
+
*,
|
|
48
|
+
init,
|
|
49
|
+
n_init,
|
|
50
|
+
max_iter,
|
|
51
|
+
tol,
|
|
52
|
+
verbose,
|
|
53
|
+
random_state,
|
|
54
|
+
n_local_trials=None,
|
|
55
|
+
):
|
|
56
|
+
self.n_clusters = n_clusters
|
|
57
|
+
self.init = init
|
|
58
|
+
self.max_iter = max_iter
|
|
59
|
+
self.tol = tol
|
|
60
|
+
self.n_init = n_init
|
|
61
|
+
self.verbose = verbose
|
|
62
|
+
self.random_state = random_state
|
|
63
|
+
self.n_local_trials = n_local_trials
|
|
64
|
+
|
|
65
|
+
@bind_default_backend("kmeans_common", no_policy=True)
|
|
66
|
+
def _is_same_clustering(self, labels, best_labels, n_clusters): ...
|
|
67
|
+
|
|
68
|
+
@bind_default_backend("kmeans.clustering")
|
|
69
|
+
def train(self, params, X_table, centroids_table): ...
|
|
70
|
+
|
|
71
|
+
@bind_default_backend("kmeans.clustering")
|
|
72
|
+
def infer(self, params, model, centroids_table): ...
|
|
73
|
+
|
|
74
|
+
def _validate_center_shape(self, X, centers):
|
|
75
|
+
"""Check if centers is compatible with X and n_clusters."""
|
|
76
|
+
if centers.shape[0] != self.n_clusters:
|
|
77
|
+
raise ValueError(
|
|
78
|
+
f"The shape of the initial centers {centers.shape} does not "
|
|
79
|
+
f"match the number of clusters {self.n_clusters}."
|
|
80
|
+
)
|
|
81
|
+
if centers.shape[1] != X.shape[1]:
|
|
82
|
+
raise ValueError(
|
|
83
|
+
f"The shape of the initial centers {centers.shape} does not "
|
|
84
|
+
f"match the number of features of the data {X.shape[1]}."
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
def _get_kmeans_init(self, cluster_count, seed, algorithm, is_csr):
|
|
88
|
+
return KMeansInit(
|
|
89
|
+
cluster_count=cluster_count,
|
|
90
|
+
seed=seed,
|
|
91
|
+
algorithm=algorithm,
|
|
92
|
+
is_csr=is_csr,
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
# Get appropriate backend (required for SPMD)
|
|
96
|
+
def _get_basic_statistics_backend(self, result_options):
|
|
97
|
+
return BasicStatistics(result_options)
|
|
98
|
+
|
|
99
|
+
def _tolerance(self, X_table, rtol, is_csr, dtype):
|
|
100
|
+
"""Compute absolute tolerance from the relative tolerance"""
|
|
101
|
+
if rtol == 0.0:
|
|
102
|
+
return rtol
|
|
103
|
+
dummy = to_table(None)
|
|
104
|
+
|
|
105
|
+
bs = self._get_basic_statistics_backend("variance")
|
|
106
|
+
|
|
107
|
+
res = bs._compute_raw(X_table, dummy, dtype, is_csr)
|
|
108
|
+
mean_var = from_table(res.variance).mean()
|
|
109
|
+
|
|
110
|
+
return mean_var * rtol
|
|
111
|
+
|
|
112
|
+
def _check_params_vs_input(
|
|
113
|
+
self, X_table, is_csr, default_n_init=10, dtype=np.float32
|
|
114
|
+
):
|
|
115
|
+
# n_clusters
|
|
116
|
+
if X_table.shape[0] < self.n_clusters:
|
|
117
|
+
raise ValueError(
|
|
118
|
+
f"n_samples={X_table.shape[0]} should be >= n_clusters={self.n_clusters}."
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
# tol
|
|
122
|
+
self._tol = self._tolerance(X_table, self.tol, is_csr, dtype)
|
|
123
|
+
|
|
124
|
+
# n-init
|
|
125
|
+
# TODO(1.4): Remove
|
|
126
|
+
self._n_init = self.n_init
|
|
127
|
+
if self._n_init == "warn":
|
|
128
|
+
warnings.warn(
|
|
129
|
+
(
|
|
130
|
+
"The default value of `n_init` will change from "
|
|
131
|
+
f"{default_n_init} to 'auto' in 1.4. Set the value of `n_init`"
|
|
132
|
+
" explicitly to suppress the warning"
|
|
133
|
+
),
|
|
134
|
+
FutureWarning,
|
|
135
|
+
stacklevel=2,
|
|
136
|
+
)
|
|
137
|
+
self._n_init = default_n_init
|
|
138
|
+
if self._n_init == "auto":
|
|
139
|
+
if isinstance(self.init, str) and self.init == "k-means++":
|
|
140
|
+
self._n_init = 1
|
|
141
|
+
elif isinstance(self.init, str) and self.init == "random":
|
|
142
|
+
self._n_init = default_n_init
|
|
143
|
+
elif callable(self.init):
|
|
144
|
+
self._n_init = default_n_init
|
|
145
|
+
else: # array-like
|
|
146
|
+
self._n_init = 1
|
|
147
|
+
|
|
148
|
+
if _is_arraylike_not_scalar(self.init) and self._n_init != 1:
|
|
149
|
+
warnings.warn(
|
|
150
|
+
(
|
|
151
|
+
"Explicit initial center position passed: performing only"
|
|
152
|
+
f" one init in {self.__class__.__name__} instead of "
|
|
153
|
+
f"n_init={self._n_init}."
|
|
154
|
+
),
|
|
155
|
+
RuntimeWarning,
|
|
156
|
+
stacklevel=2,
|
|
157
|
+
)
|
|
158
|
+
self._n_init = 1
|
|
159
|
+
assert self.algorithm == "lloyd"
|
|
160
|
+
|
|
161
|
+
def _get_onedal_params(self, is_csr=False, dtype=np.float32, result_options=None):
|
|
162
|
+
thr = self._tol if hasattr(self, "_tol") else self.tol
|
|
163
|
+
return {
|
|
164
|
+
"fptype": dtype,
|
|
165
|
+
"method": "lloyd_csr" if is_csr else "by_default",
|
|
166
|
+
"seed": -1,
|
|
167
|
+
"max_iteration_count": self.max_iter,
|
|
168
|
+
"cluster_count": self.n_clusters,
|
|
169
|
+
"accuracy_threshold": thr,
|
|
170
|
+
"result_options": "" if result_options is None else result_options,
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
def _init_centroids_onedal(
|
|
174
|
+
self,
|
|
175
|
+
X_table,
|
|
176
|
+
init,
|
|
177
|
+
random_seed,
|
|
178
|
+
is_csr,
|
|
179
|
+
dtype=np.float32,
|
|
180
|
+
n_centroids=None,
|
|
181
|
+
):
|
|
182
|
+
n_clusters = self.n_clusters if n_centroids is None else n_centroids
|
|
183
|
+
|
|
184
|
+
if isinstance(init, str) and init == "k-means++":
|
|
185
|
+
algorithm = "plus_plus_dense" if not is_csr else "plus_plus_csr"
|
|
186
|
+
alg = self._get_kmeans_init(
|
|
187
|
+
cluster_count=n_clusters,
|
|
188
|
+
seed=random_seed,
|
|
189
|
+
algorithm=algorithm,
|
|
190
|
+
is_csr=is_csr,
|
|
191
|
+
)
|
|
192
|
+
# We pass down the queue that was set through the KMeans.fit()
|
|
193
|
+
queue = QM.get_global_queue()
|
|
194
|
+
centers_table = alg.compute_raw(X_table, dtype, queue=queue)
|
|
195
|
+
elif isinstance(init, str) and init == "random":
|
|
196
|
+
algorithm = "random_dense" if not is_csr else "random_csr"
|
|
197
|
+
alg = self._get_kmeans_init(
|
|
198
|
+
cluster_count=n_clusters,
|
|
199
|
+
seed=random_seed,
|
|
200
|
+
algorithm=algorithm,
|
|
201
|
+
is_csr=is_csr,
|
|
202
|
+
)
|
|
203
|
+
# We pass down the queue that was set through the KMeans.fit()
|
|
204
|
+
queue = QM.get_global_queue()
|
|
205
|
+
centers_table = alg.compute_raw(X_table, dtype, queue=queue)
|
|
206
|
+
elif _is_arraylike_not_scalar(init):
|
|
207
|
+
if _is_csr(init):
|
|
208
|
+
# oneDAL KMeans only supports Dense Centroids
|
|
209
|
+
centers = init.toarray()
|
|
210
|
+
else:
|
|
211
|
+
centers = np.asarray(init)
|
|
212
|
+
assert centers.shape[0] == n_clusters
|
|
213
|
+
assert centers.shape[1] == X_table.column_count
|
|
214
|
+
# KMeans is implemented on both CPU and GPU for Dense and CSR data
|
|
215
|
+
# The original policy can be used here
|
|
216
|
+
centers_table = to_table(centers, queue=QM.get_global_queue())
|
|
217
|
+
else:
|
|
218
|
+
raise TypeError("Unsupported type of the `init` value")
|
|
219
|
+
|
|
220
|
+
return centers_table
|
|
221
|
+
|
|
222
|
+
def _init_centroids_sklearn(self, X, init, random_state, dtype=np.float32):
|
|
223
|
+
# For oneDAL versions < 2023.2 or callable init,
|
|
224
|
+
# using the scikit-learn implementation
|
|
225
|
+
logging.getLogger("sklearnex").info("Computing KMeansInit with Stock sklearn")
|
|
226
|
+
n_samples = X.shape[0]
|
|
227
|
+
|
|
228
|
+
if isinstance(init, str) and init == "k-means++":
|
|
229
|
+
centers, _ = _kmeans_plusplus(
|
|
230
|
+
X,
|
|
231
|
+
self.n_clusters,
|
|
232
|
+
random_state=random_state,
|
|
233
|
+
)
|
|
234
|
+
elif isinstance(init, str) and init == "random":
|
|
235
|
+
seeds = random_state.choice(n_samples, size=self.n_clusters, replace=False)
|
|
236
|
+
centers = X[seeds]
|
|
237
|
+
elif callable(init):
|
|
238
|
+
cc_arr = init(X, self.n_clusters, random_state)
|
|
239
|
+
cc_arr = np.ascontiguousarray(cc_arr, dtype=dtype)
|
|
240
|
+
self._validate_center_shape(X, cc_arr)
|
|
241
|
+
centers = cc_arr
|
|
242
|
+
elif _is_arraylike_not_scalar(init):
|
|
243
|
+
centers = init
|
|
244
|
+
else:
|
|
245
|
+
raise ValueError(
|
|
246
|
+
f"init should be either 'k-means++', 'random', a ndarray or a "
|
|
247
|
+
f"callable, got '{ init }' instead."
|
|
248
|
+
)
|
|
249
|
+
|
|
250
|
+
return to_table(centers, queue=getattr(QM.get_global_queue(), "_queue", None))
|
|
251
|
+
|
|
252
|
+
def _fit_backend(self, X_table, centroids_table, dtype=np.float32, is_csr=False):
|
|
253
|
+
params = self._get_onedal_params(is_csr, dtype)
|
|
254
|
+
|
|
255
|
+
assert X_table.dtype == dtype
|
|
256
|
+
|
|
257
|
+
result = self.train(params, X_table, centroids_table)
|
|
258
|
+
|
|
259
|
+
return (
|
|
260
|
+
result.responses,
|
|
261
|
+
result.objective_function_value,
|
|
262
|
+
result.model,
|
|
263
|
+
result.iteration_count,
|
|
264
|
+
)
|
|
265
|
+
|
|
266
|
+
def _fit(self, X):
|
|
267
|
+
is_csr = _is_csr(X)
|
|
268
|
+
|
|
269
|
+
if _get_config()["use_raw_input"] is False:
|
|
270
|
+
X = _check_array(
|
|
271
|
+
X,
|
|
272
|
+
dtype=[np.float64, np.float32],
|
|
273
|
+
accept_sparse="csr",
|
|
274
|
+
force_all_finite=False,
|
|
275
|
+
)
|
|
276
|
+
X_table = to_table(X, queue=QM.get_global_queue())
|
|
277
|
+
dtype = X_table.dtype
|
|
278
|
+
|
|
279
|
+
self._check_params_vs_input(X_table, is_csr, dtype=dtype)
|
|
280
|
+
|
|
281
|
+
self.n_features_in_ = X_table.column_count
|
|
282
|
+
|
|
283
|
+
best_model, best_n_iter = None, None
|
|
284
|
+
best_inertia, best_labels = None, None
|
|
285
|
+
|
|
286
|
+
def is_better_iteration(inertia, labels):
|
|
287
|
+
if best_inertia is None:
|
|
288
|
+
return True
|
|
289
|
+
else:
|
|
290
|
+
better_inertia = inertia < best_inertia
|
|
291
|
+
return better_inertia and not self._is_same_clustering(
|
|
292
|
+
labels, best_labels, self.n_clusters
|
|
293
|
+
)
|
|
294
|
+
|
|
295
|
+
random_state = check_random_state(self.random_state)
|
|
296
|
+
|
|
297
|
+
init = self.init
|
|
298
|
+
init_is_array_like = _is_arraylike_not_scalar(init)
|
|
299
|
+
if init_is_array_like:
|
|
300
|
+
init = _check_array(
|
|
301
|
+
init, dtype=dtype, accept_sparse="csr", copy=True, order="C"
|
|
302
|
+
)
|
|
303
|
+
self._validate_center_shape(X, init)
|
|
304
|
+
|
|
305
|
+
use_onedal_init = daal_check_version((2023, "P", 200)) and not callable(self.init)
|
|
306
|
+
|
|
307
|
+
for _ in range(self._n_init):
|
|
308
|
+
if use_onedal_init:
|
|
309
|
+
random_seed = random_state.randint(np.iinfo("i").max)
|
|
310
|
+
centroids_table = self._init_centroids_onedal(
|
|
311
|
+
X_table, init, random_seed, is_csr, dtype=dtype
|
|
312
|
+
)
|
|
313
|
+
else:
|
|
314
|
+
centroids_table = self._init_centroids_sklearn(
|
|
315
|
+
X, init, random_state, dtype=dtype
|
|
316
|
+
)
|
|
317
|
+
|
|
318
|
+
if self.verbose:
|
|
319
|
+
print("Initialization complete")
|
|
320
|
+
|
|
321
|
+
labels, inertia, model, n_iter = self._fit_backend(
|
|
322
|
+
X_table, centroids_table, dtype, is_csr
|
|
323
|
+
)
|
|
324
|
+
|
|
325
|
+
if self.verbose:
|
|
326
|
+
print("Iteration {}, inertia {}.".format(n_iter, inertia))
|
|
327
|
+
|
|
328
|
+
if is_better_iteration(inertia, labels):
|
|
329
|
+
best_model, best_n_iter = model, n_iter
|
|
330
|
+
best_inertia, best_labels = inertia, labels
|
|
331
|
+
|
|
332
|
+
# Types without conversion
|
|
333
|
+
self.model_ = best_model
|
|
334
|
+
|
|
335
|
+
# Simple types
|
|
336
|
+
self.n_iter_ = best_n_iter
|
|
337
|
+
self.inertia_ = best_inertia
|
|
338
|
+
|
|
339
|
+
# Complex type conversion
|
|
340
|
+
self.labels_ = from_table(best_labels).ravel()
|
|
341
|
+
|
|
342
|
+
distinct_clusters = len(np.unique(self.labels_))
|
|
343
|
+
if distinct_clusters < self.n_clusters:
|
|
344
|
+
warnings.warn(
|
|
345
|
+
"Number of distinct clusters ({}) found smaller than "
|
|
346
|
+
"n_clusters ({}). Possibly due to duplicate points "
|
|
347
|
+
"in X.".format(distinct_clusters, self.n_clusters),
|
|
348
|
+
ConvergenceWarning,
|
|
349
|
+
stacklevel=2,
|
|
350
|
+
)
|
|
351
|
+
|
|
352
|
+
return self
|
|
353
|
+
|
|
354
|
+
@property
|
|
355
|
+
def cluster_centers_(self):
|
|
356
|
+
if not hasattr(self, "_cluster_centers_"):
|
|
357
|
+
if hasattr(self, "model_"):
|
|
358
|
+
centroids = self.model_.centroids
|
|
359
|
+
self._cluster_centers_ = from_table(centroids)
|
|
360
|
+
else:
|
|
361
|
+
raise NameError("This model has not been trained")
|
|
362
|
+
return self._cluster_centers_
|
|
363
|
+
|
|
364
|
+
@cluster_centers_.setter
|
|
365
|
+
def cluster_centers_(self, cluster_centers):
|
|
366
|
+
self._cluster_centers_ = np.asarray(cluster_centers)
|
|
367
|
+
|
|
368
|
+
self.n_iter_ = 0
|
|
369
|
+
self.inertia_ = 0
|
|
370
|
+
|
|
371
|
+
self.model_.centroids = to_table(self._cluster_centers_)
|
|
372
|
+
self.n_features_in_ = self.model_.centroids.column_count
|
|
373
|
+
self.labels_ = np.arange(self.model_.centroids.row_count)
|
|
374
|
+
|
|
375
|
+
return self
|
|
376
|
+
|
|
377
|
+
@cluster_centers_.deleter
|
|
378
|
+
def cluster_centers_(self):
|
|
379
|
+
del self._cluster_centers_
|
|
380
|
+
|
|
381
|
+
def _predict(self, X, result_options=None):
|
|
382
|
+
is_csr = _is_csr(X)
|
|
383
|
+
|
|
384
|
+
X_table = to_table(X, queue=QM.get_global_queue())
|
|
385
|
+
params = self._get_onedal_params(is_csr, X_table.dtype, result_options)
|
|
386
|
+
|
|
387
|
+
result = self.infer(params, self.model_, X_table)
|
|
388
|
+
|
|
389
|
+
if result_options == "compute_exact_objective_function":
|
|
390
|
+
# This is only set for score function
|
|
391
|
+
return -1 * result.objective_function_value
|
|
392
|
+
else:
|
|
393
|
+
return from_table(result.responses).ravel()
|
|
394
|
+
|
|
395
|
+
def _score(self, X):
|
|
396
|
+
result_options = "compute_exact_objective_function"
|
|
397
|
+
|
|
398
|
+
return self._predict(
|
|
399
|
+
X,
|
|
400
|
+
result_options,
|
|
401
|
+
)
|
|
402
|
+
|
|
403
|
+
def _transform(self, X):
|
|
404
|
+
return euclidean_distances(X, self.cluster_centers_)
|
|
405
|
+
|
|
406
|
+
|
|
407
|
+
class KMeans(_BaseKMeans):
|
|
408
|
+
def __init__(
|
|
409
|
+
self,
|
|
410
|
+
n_clusters=8,
|
|
411
|
+
*,
|
|
412
|
+
init="k-means++",
|
|
413
|
+
n_init="auto",
|
|
414
|
+
max_iter=300,
|
|
415
|
+
tol=1e-4,
|
|
416
|
+
verbose=0,
|
|
417
|
+
random_state=None,
|
|
418
|
+
copy_x=True,
|
|
419
|
+
algorithm="lloyd",
|
|
420
|
+
):
|
|
421
|
+
super().__init__(
|
|
422
|
+
n_clusters=n_clusters,
|
|
423
|
+
init=init,
|
|
424
|
+
n_init=n_init,
|
|
425
|
+
max_iter=max_iter,
|
|
426
|
+
tol=tol,
|
|
427
|
+
verbose=verbose,
|
|
428
|
+
random_state=random_state,
|
|
429
|
+
)
|
|
430
|
+
|
|
431
|
+
self.copy_x = copy_x
|
|
432
|
+
self.algorithm = algorithm
|
|
433
|
+
assert self.algorithm == "lloyd"
|
|
434
|
+
|
|
435
|
+
@supports_queue
|
|
436
|
+
def fit(self, X, y=None, queue=None):
|
|
437
|
+
return self._fit(X)
|
|
438
|
+
|
|
439
|
+
@supports_queue
|
|
440
|
+
def predict(self, X, queue=None):
|
|
441
|
+
"""Predict the closest cluster each sample in X belongs to.
|
|
442
|
+
|
|
443
|
+
In the vector quantization literature, `cluster_centers_` is called
|
|
444
|
+
the code book and each value returned by `predict` is the index of
|
|
445
|
+
the closest code in the code book.
|
|
446
|
+
|
|
447
|
+
Parameters
|
|
448
|
+
----------
|
|
449
|
+
X : array-like of shape (n_samples, n_features)
|
|
450
|
+
New data to predict.
|
|
451
|
+
|
|
452
|
+
queue : SyclQueue or None, default=None
|
|
453
|
+
SYCL Queue object for device code execution. Default
|
|
454
|
+
value None causes computation on host.
|
|
455
|
+
|
|
456
|
+
Returns
|
|
457
|
+
-------
|
|
458
|
+
labels : ndarray of shape (n_samples,)
|
|
459
|
+
Index of the cluster each sample belongs to.
|
|
460
|
+
"""
|
|
461
|
+
return self._predict(X)
|
|
462
|
+
|
|
463
|
+
def fit_predict(self, X, y=None, queue=None):
|
|
464
|
+
"""Compute cluster centers and predict cluster index for each sample.
|
|
465
|
+
|
|
466
|
+
Convenience method; equivalent to calling fit(X) followed by
|
|
467
|
+
predict(X).
|
|
468
|
+
|
|
469
|
+
Parameters
|
|
470
|
+
----------
|
|
471
|
+
X : array-like of shape (n_samples, n_features)
|
|
472
|
+
New data to transform.
|
|
473
|
+
|
|
474
|
+
y : Ignored
|
|
475
|
+
Not used, present here for API consistency by convention.
|
|
476
|
+
|
|
477
|
+
queue : SyclQueue or None, default=None
|
|
478
|
+
SYCL Queue object for device code execution. Default
|
|
479
|
+
value None causes computation on host.
|
|
480
|
+
|
|
481
|
+
Returns
|
|
482
|
+
-------
|
|
483
|
+
labels : ndarray of shape (n_samples,)
|
|
484
|
+
Index of the cluster each sample belongs to.
|
|
485
|
+
"""
|
|
486
|
+
return self.fit(X, queue=queue).labels_
|
|
487
|
+
|
|
488
|
+
def fit_transform(self, X, y=None, queue=None):
|
|
489
|
+
"""Compute clustering and transform X to cluster-distance space.
|
|
490
|
+
|
|
491
|
+
Equivalent to fit(X).transform(X), but more efficiently implemented.
|
|
492
|
+
|
|
493
|
+
Parameters
|
|
494
|
+
----------
|
|
495
|
+
X : array-like of shape (n_samples, n_features)
|
|
496
|
+
New data to transform.
|
|
497
|
+
|
|
498
|
+
y : Ignored
|
|
499
|
+
Not used, present here for API consistency by convention.
|
|
500
|
+
|
|
501
|
+
queue : SyclQueue or None, default=None
|
|
502
|
+
SYCL Queue object for device code execution. Default
|
|
503
|
+
value None causes computation on host.
|
|
504
|
+
|
|
505
|
+
Returns
|
|
506
|
+
-------
|
|
507
|
+
X_new : ndarray of shape (n_samples, n_clusters)
|
|
508
|
+
X transformed in the new space.
|
|
509
|
+
"""
|
|
510
|
+
return self.fit(X, queue=queue)._transform(X)
|
|
511
|
+
|
|
512
|
+
def transform(self, X):
|
|
513
|
+
"""Transform X to a cluster-distance space.
|
|
514
|
+
|
|
515
|
+
In the new space, each dimension is the distance to the cluster
|
|
516
|
+
centers. Note that even if X is sparse, the array returned by
|
|
517
|
+
`transform` will typically be dense.
|
|
518
|
+
|
|
519
|
+
Parameters
|
|
520
|
+
----------
|
|
521
|
+
X : array-like of shape (n_samples, n_features)
|
|
522
|
+
New data to transform.
|
|
523
|
+
|
|
524
|
+
Returns
|
|
525
|
+
-------
|
|
526
|
+
X_new : ndarray of shape (n_samples, n_clusters)
|
|
527
|
+
X transformed in the new space.
|
|
528
|
+
"""
|
|
529
|
+
|
|
530
|
+
return self._transform(X)
|
|
531
|
+
|
|
532
|
+
@supports_queue
|
|
533
|
+
def score(self, X, queue=None):
|
|
534
|
+
"""Opposite of the value of X on the K-means objective.
|
|
535
|
+
|
|
536
|
+
Parameters
|
|
537
|
+
----------
|
|
538
|
+
X : {array-like, sparse matrix} of shape (n_samples, n_features)
|
|
539
|
+
New data.
|
|
540
|
+
|
|
541
|
+
queue : SyclQueue or None, default=None
|
|
542
|
+
SYCL Queue object for device code execution. Default
|
|
543
|
+
value None causes computation on host.
|
|
544
|
+
|
|
545
|
+
Returns
|
|
546
|
+
-------
|
|
547
|
+
score: float
|
|
548
|
+
Opposite of the value of X on the K-means objective.
|
|
549
|
+
"""
|
|
550
|
+
return self._score(X)
|
|
551
|
+
|
|
552
|
+
|
|
553
|
+
def k_means(
|
|
554
|
+
X,
|
|
555
|
+
n_clusters,
|
|
556
|
+
*,
|
|
557
|
+
init="k-means++",
|
|
558
|
+
n_init="auto",
|
|
559
|
+
max_iter=300,
|
|
560
|
+
verbose=False,
|
|
561
|
+
tol=1e-4,
|
|
562
|
+
random_state=None,
|
|
563
|
+
copy_x=True,
|
|
564
|
+
algorithm="lloyd",
|
|
565
|
+
return_n_iter=False,
|
|
566
|
+
queue=None,
|
|
567
|
+
):
|
|
568
|
+
est = KMeans(
|
|
569
|
+
n_clusters=n_clusters,
|
|
570
|
+
init=init,
|
|
571
|
+
n_init=n_init,
|
|
572
|
+
max_iter=max_iter,
|
|
573
|
+
verbose=verbose,
|
|
574
|
+
tol=tol,
|
|
575
|
+
random_state=random_state,
|
|
576
|
+
copy_x=copy_x,
|
|
577
|
+
algorithm=algorithm,
|
|
578
|
+
).fit(X, queue=queue)
|
|
579
|
+
if return_n_iter:
|
|
580
|
+
return est.cluster_centers_, est.labels_, est.inertia_, est.n_iter_
|
|
581
|
+
else:
|
|
582
|
+
return est.cluster_centers_, est.labels_, est.inertia_
|