scikit-learn-intelex 2024.6.0__py311-none-win_amd64.whl → 2024.7.0__py311-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-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/_config.py +3 -15
- scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/_device_offload.py +98 -0
- scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/basic_statistics/basic_statistics.py +143 -0
- scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/basic_statistics/tests/test_basic_statistics.py +251 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/basic_statistics/tests/test_incremental_basic_statistics.py +1 -1
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/cluster/dbscan.py +0 -1
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/cluster/k_means.py +8 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/cluster/tests/test_kmeans.py +15 -3
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/covariance/incremental_covariance.py +64 -13
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/covariance/tests/test_incremental_covariance.py +35 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/decomposition/pca.py +25 -1
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/dispatcher.py +94 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/ensemble/_forest.py +8 -35
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/ensemble/tests/test_forest.py +9 -12
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/linear_model/coordinate_descent.py +13 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/linear_model/linear.py +2 -34
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/linear_model/logistic_regression.py +79 -59
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/linear_model/ridge.py +7 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/linear_model/tests/test_linear.py +28 -3
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/linear_model/tests/test_logreg.py +45 -3
- scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/manifold/t_sne.py +21 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/metrics/pairwise.py +5 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/metrics/ranking.py +3 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/model_selection/split.py +3 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/neighbors/_lof.py +9 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/neighbors/common.py +45 -1
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/neighbors/knn_classification.py +1 -20
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/neighbors/knn_regression.py +1 -20
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/neighbors/knn_unsupervised.py +31 -7
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/preview/__init__.py +1 -1
- scikit_learn_intelex-2024.6.0.data/data/Lib/site-packages/sklearnex/manifold/t_sne.py → scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/preview/linear_model/__init__.py +19 -17
- scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/preview/linear_model/ridge.py +419 -0
- scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/preview/linear_model/tests/test_ridge.py +102 -0
- scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/spmd/basic_statistics/tests/test_basic_statistics_spmd.py +107 -0
- scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/spmd/cluster/tests/test_dbscan_spmd.py +97 -0
- scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/spmd/cluster/tests/test_kmeans_spmd.py +172 -0
- scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/spmd/covariance/tests/test_covariance_spmd.py +107 -0
- scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/spmd/decomposition/tests/test_pca_spmd.py +128 -0
- scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/spmd/ensemble/tests/test_forest_spmd.py +265 -0
- scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/tests/test_linear_regression_spmd.py +145 -0
- scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/spmd/linear_model/tests/test_logistic_regression_spmd.py +163 -0
- scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/spmd/neighbors/tests/test_neighbors_spmd.py +288 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/svm/_common.py +19 -21
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/svm/tests/test_svm.py +12 -20
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/tests/_utils.py +143 -20
- scikit_learn_intelex-2024.7.0.data/data/Lib/site-packages/sklearnex/tests/_utils_spmd.py +185 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/tests/test_config.py +4 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/tests/test_monkeypatch.py +12 -4
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/tests/test_patching.py +16 -13
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/tests/test_run_to_run_stability.py +21 -9
- {scikit_learn_intelex-2024.6.0.dist-info → scikit_learn_intelex-2024.7.0.dist-info}/METADATA +2 -2
- scikit_learn_intelex-2024.7.0.dist-info/RECORD +122 -0
- scikit_learn_intelex-2024.6.0.data/data/Lib/site-packages/sklearnex/_device_offload.py +0 -257
- scikit_learn_intelex-2024.6.0.data/data/Lib/site-packages/sklearnex/basic_statistics/basic_statistics.py +0 -17
- scikit_learn_intelex-2024.6.0.dist-info/RECORD +0 -108
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/__init__.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/__main__.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/_utils.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/basic_statistics/__init__.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/basic_statistics/incremental_basic_statistics.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/cluster/__init__.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/cluster/tests/test_dbscan.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/conftest.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/covariance/__init__.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/decomposition/__init__.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/decomposition/tests/test_pca.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/doc/third-party-programs.txt +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/ensemble/__init__.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/glob/__main__.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/glob/dispatcher.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/linear_model/__init__.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/linear_model/incremental_linear.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/linear_model/logistic_path.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/linear_model/tests/test_incremental_linear.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/manifold/__init__.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/manifold/tests/test_tsne.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/metrics/__init__.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/metrics/tests/test_metrics.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/model_selection/__init__.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/model_selection/tests/test_model_selection.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/neighbors/__init__.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/neighbors/tests/test_neighbors.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/preview/cluster/__init__.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/preview/cluster/_common.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/preview/cluster/k_means.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/preview/covariance/__init__.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/preview/covariance/covariance.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/preview/covariance/tests/test_covariance.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/preview/decomposition/__init__.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/preview/decomposition/incremental_pca.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/preview/decomposition/tests/test_incremental_pca.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/spmd/__init__.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/spmd/basic_statistics/__init__.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/spmd/basic_statistics/basic_statistics.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/spmd/cluster/__init__.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/spmd/cluster/dbscan.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/spmd/cluster/kmeans.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/spmd/covariance/__init__.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/spmd/covariance/covariance.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/spmd/decomposition/__init__.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/spmd/decomposition/pca.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/spmd/ensemble/__init__.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/spmd/ensemble/forest.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/spmd/linear_model/__init__.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/spmd/linear_model/linear_model.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/spmd/linear_model/logistic_regression.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/spmd/neighbors/__init__.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/spmd/neighbors/neighbors.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/svm/__init__.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/svm/nusvc.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/svm/nusvr.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/svm/svc.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/svm/svr.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/tests/test_common.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/tests/test_memory_usage.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/tests/test_n_jobs_support.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/tests/test_parallel.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/utils/__init__.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/utils/_namespace.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/utils/parallel.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/utils/tests/test_finite.py +0 -0
- {scikit_learn_intelex-2024.6.0.data → scikit_learn_intelex-2024.7.0.data}/data/Lib/site-packages/sklearnex/utils/validation.py +0 -0
- {scikit_learn_intelex-2024.6.0.dist-info → scikit_learn_intelex-2024.7.0.dist-info}/LICENSE.txt +0 -0
- {scikit_learn_intelex-2024.6.0.dist-info → scikit_learn_intelex-2024.7.0.dist-info}/WHEEL +0 -0
- {scikit_learn_intelex-2024.6.0.dist-info → scikit_learn_intelex-2024.7.0.dist-info}/top_level.txt +0 -0
|
@@ -28,7 +28,7 @@ if daal_check_version((2024, "P", 1)):
|
|
|
28
28
|
from sklearn.linear_model import LogisticRegression as sklearn_LogisticRegression
|
|
29
29
|
from sklearn.metrics import accuracy_score
|
|
30
30
|
from sklearn.utils.multiclass import type_of_target
|
|
31
|
-
from sklearn.utils.validation import check_X_y
|
|
31
|
+
from sklearn.utils.validation import check_array, check_is_fitted, check_X_y
|
|
32
32
|
|
|
33
33
|
from daal4py.sklearn._n_jobs_support import control_n_jobs
|
|
34
34
|
from daal4py.sklearn._utils import sklearn_check_version
|
|
@@ -38,7 +38,8 @@ if daal_check_version((2024, "P", 1)):
|
|
|
38
38
|
|
|
39
39
|
from .._device_offload import dispatch, wrap_output_data
|
|
40
40
|
from .._utils import PatchingConditionsChain, get_patch_message
|
|
41
|
-
|
|
41
|
+
|
|
42
|
+
_sparsity_enabled = daal_check_version((2024, "P", 700))
|
|
42
43
|
|
|
43
44
|
class BaseLogisticRegression(ABC):
|
|
44
45
|
def _save_attributes(self):
|
|
@@ -107,8 +108,6 @@ if daal_check_version((2024, "P", 1)):
|
|
|
107
108
|
_onedal_cpu_fit = daal4py_fit
|
|
108
109
|
|
|
109
110
|
def fit(self, X, y, sample_weight=None):
|
|
110
|
-
if sklearn_check_version("1.0"):
|
|
111
|
-
self._check_feature_names(X, reset=True)
|
|
112
111
|
if sklearn_check_version("1.2"):
|
|
113
112
|
self._validate_params()
|
|
114
113
|
dispatch(
|
|
@@ -126,8 +125,6 @@ if daal_check_version((2024, "P", 1)):
|
|
|
126
125
|
|
|
127
126
|
@wrap_output_data
|
|
128
127
|
def predict(self, X):
|
|
129
|
-
if sklearn_check_version("1.0"):
|
|
130
|
-
self._check_feature_names(X, reset=False)
|
|
131
128
|
return dispatch(
|
|
132
129
|
self,
|
|
133
130
|
"predict",
|
|
@@ -140,8 +137,6 @@ if daal_check_version((2024, "P", 1)):
|
|
|
140
137
|
|
|
141
138
|
@wrap_output_data
|
|
142
139
|
def predict_proba(self, X):
|
|
143
|
-
if sklearn_check_version("1.0"):
|
|
144
|
-
self._check_feature_names(X, reset=False)
|
|
145
140
|
return dispatch(
|
|
146
141
|
self,
|
|
147
142
|
"predict_proba",
|
|
@@ -154,8 +149,6 @@ if daal_check_version((2024, "P", 1)):
|
|
|
154
149
|
|
|
155
150
|
@wrap_output_data
|
|
156
151
|
def predict_log_proba(self, X):
|
|
157
|
-
if sklearn_check_version("1.0"):
|
|
158
|
-
self._check_feature_names(X, reset=False)
|
|
159
152
|
return dispatch(
|
|
160
153
|
self,
|
|
161
154
|
"predict_log_proba",
|
|
@@ -168,8 +161,6 @@ if daal_check_version((2024, "P", 1)):
|
|
|
168
161
|
|
|
169
162
|
@wrap_output_data
|
|
170
163
|
def score(self, X, y, sample_weight=None):
|
|
171
|
-
if sklearn_check_version("1.0"):
|
|
172
|
-
self._check_feature_names(X, reset=False)
|
|
173
164
|
return dispatch(
|
|
174
165
|
self,
|
|
175
166
|
"score",
|
|
@@ -187,17 +178,6 @@ if daal_check_version((2024, "P", 1)):
|
|
|
187
178
|
y, self._onedal_predict(X, queue=queue), sample_weight=sample_weight
|
|
188
179
|
)
|
|
189
180
|
|
|
190
|
-
def _test_type_and_finiteness(self, X_in):
|
|
191
|
-
X = np.asarray(X_in)
|
|
192
|
-
|
|
193
|
-
if np.iscomplexobj(X):
|
|
194
|
-
return False
|
|
195
|
-
try:
|
|
196
|
-
_assert_all_finite(X)
|
|
197
|
-
except BaseException:
|
|
198
|
-
return False
|
|
199
|
-
return True
|
|
200
|
-
|
|
201
181
|
def _onedal_gpu_fit_supported(self, method_name, *data):
|
|
202
182
|
assert method_name == "fit"
|
|
203
183
|
assert len(data) == 3
|
|
@@ -208,7 +188,12 @@ if daal_check_version((2024, "P", 1)):
|
|
|
208
188
|
f"sklearn.linear_model.{class_name}.fit"
|
|
209
189
|
)
|
|
210
190
|
|
|
211
|
-
|
|
191
|
+
target_type = (
|
|
192
|
+
type_of_target(y, input_name="y")
|
|
193
|
+
if sklearn_check_version("1.1")
|
|
194
|
+
else type_of_target(y)
|
|
195
|
+
)
|
|
196
|
+
patching_status.and_conditions(
|
|
212
197
|
[
|
|
213
198
|
(self.penalty == "l2", "Only l2 penalty is supported."),
|
|
214
199
|
(self.dual == False, "dual=True is not supported."),
|
|
@@ -226,24 +211,12 @@ if daal_check_version((2024, "P", 1)):
|
|
|
226
211
|
(self.l1_ratio is None, "l1 ratio is not supported."),
|
|
227
212
|
(sample_weight is None, "Sample weight is not supported."),
|
|
228
213
|
(
|
|
229
|
-
|
|
214
|
+
target_type == "binary",
|
|
230
215
|
"Only binary classification is supported",
|
|
231
216
|
),
|
|
232
217
|
]
|
|
233
218
|
)
|
|
234
219
|
|
|
235
|
-
if not dal_ready:
|
|
236
|
-
return patching_status
|
|
237
|
-
|
|
238
|
-
if not patching_status.and_condition(
|
|
239
|
-
self._test_type_and_finiteness(X), "Input X is not supported."
|
|
240
|
-
):
|
|
241
|
-
return patching_status
|
|
242
|
-
|
|
243
|
-
patching_status.and_condition(
|
|
244
|
-
self._test_type_and_finiteness(y), "Input y is not supported."
|
|
245
|
-
)
|
|
246
|
-
|
|
247
220
|
return patching_status
|
|
248
221
|
|
|
249
222
|
def _onedal_gpu_predict_supported(self, method_name, *data):
|
|
@@ -267,7 +240,7 @@ if daal_check_version((2024, "P", 1)):
|
|
|
267
240
|
[
|
|
268
241
|
(n_samples > 0, "Number of samples is less than 1."),
|
|
269
242
|
(
|
|
270
|
-
not any([issparse(i) for i in data]),
|
|
243
|
+
(not any([issparse(i) for i in data])) or _sparsity_enabled,
|
|
271
244
|
"Sparse input is not supported.",
|
|
272
245
|
),
|
|
273
246
|
(not model_is_sparse, "Sparse coefficients are not supported."),
|
|
@@ -277,12 +250,6 @@ if daal_check_version((2024, "P", 1)):
|
|
|
277
250
|
),
|
|
278
251
|
]
|
|
279
252
|
)
|
|
280
|
-
if not dal_ready:
|
|
281
|
-
return patching_status
|
|
282
|
-
|
|
283
|
-
patching_status.and_condition(
|
|
284
|
-
self._test_type_and_finiteness(*data), "Input X is not supported."
|
|
285
|
-
)
|
|
286
253
|
|
|
287
254
|
return patching_status
|
|
288
255
|
|
|
@@ -313,24 +280,29 @@ if daal_check_version((2024, "P", 1)):
|
|
|
313
280
|
}
|
|
314
281
|
self._onedal_estimator = onedal_LogisticRegression(**onedal_params)
|
|
315
282
|
|
|
316
|
-
def _onedal_fit(self, X, y, sample_weight, queue=None):
|
|
283
|
+
def _onedal_fit(self, X, y, sample_weight=None, queue=None):
|
|
317
284
|
if queue is None or queue.sycl_device.is_cpu:
|
|
318
285
|
return self._onedal_cpu_fit(X, y, sample_weight)
|
|
319
286
|
|
|
320
287
|
assert sample_weight is None
|
|
321
288
|
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
if sklearn_check_version("1.2"):
|
|
331
|
-
X, y = self._validate_data(**check_params)
|
|
289
|
+
if sklearn_check_version("1.0"):
|
|
290
|
+
X, y = self._validate_data(
|
|
291
|
+
X,
|
|
292
|
+
y,
|
|
293
|
+
accept_sparse=_sparsity_enabled,
|
|
294
|
+
accept_large_sparse=_sparsity_enabled,
|
|
295
|
+
dtype=[np.float64, np.float32],
|
|
296
|
+
)
|
|
332
297
|
else:
|
|
333
|
-
X, y = check_X_y(
|
|
298
|
+
X, y = check_X_y(
|
|
299
|
+
X,
|
|
300
|
+
y,
|
|
301
|
+
accept_sparse=_sparsity_enabled,
|
|
302
|
+
accept_large_sparse=_sparsity_enabled,
|
|
303
|
+
dtype=[np.float64, np.float32],
|
|
304
|
+
)
|
|
305
|
+
|
|
334
306
|
self._initialize_onedal_estimator()
|
|
335
307
|
try:
|
|
336
308
|
self._onedal_estimator.fit(X, y, queue=queue)
|
|
@@ -348,7 +320,23 @@ if daal_check_version((2024, "P", 1)):
|
|
|
348
320
|
if queue is None or queue.sycl_device.is_cpu:
|
|
349
321
|
return daal4py_predict(self, X, "computeClassLabels")
|
|
350
322
|
|
|
351
|
-
|
|
323
|
+
check_is_fitted(self)
|
|
324
|
+
if sklearn_check_version("1.0"):
|
|
325
|
+
X = self._validate_data(
|
|
326
|
+
X,
|
|
327
|
+
reset=False,
|
|
328
|
+
accept_sparse=_sparsity_enabled,
|
|
329
|
+
accept_large_sparse=_sparsity_enabled,
|
|
330
|
+
dtype=[np.float64, np.float32],
|
|
331
|
+
)
|
|
332
|
+
else:
|
|
333
|
+
X = check_array(
|
|
334
|
+
X,
|
|
335
|
+
accept_sparse=_sparsity_enabled,
|
|
336
|
+
accept_large_sparse=_sparsity_enabled,
|
|
337
|
+
dtype=[np.float64, np.float32],
|
|
338
|
+
)
|
|
339
|
+
|
|
352
340
|
assert hasattr(self, "_onedal_estimator")
|
|
353
341
|
return self._onedal_estimator.predict(X, queue=queue)
|
|
354
342
|
|
|
@@ -356,7 +344,23 @@ if daal_check_version((2024, "P", 1)):
|
|
|
356
344
|
if queue is None or queue.sycl_device.is_cpu:
|
|
357
345
|
return daal4py_predict(self, X, "computeClassProbabilities")
|
|
358
346
|
|
|
359
|
-
|
|
347
|
+
check_is_fitted(self)
|
|
348
|
+
if sklearn_check_version("1.0"):
|
|
349
|
+
X = self._validate_data(
|
|
350
|
+
X,
|
|
351
|
+
reset=False,
|
|
352
|
+
accept_sparse=_sparsity_enabled,
|
|
353
|
+
accept_large_sparse=_sparsity_enabled,
|
|
354
|
+
dtype=[np.float64, np.float32],
|
|
355
|
+
)
|
|
356
|
+
else:
|
|
357
|
+
X = check_array(
|
|
358
|
+
X,
|
|
359
|
+
accept_sparse=_sparsity_enabled,
|
|
360
|
+
accept_large_sparse=_sparsity_enabled,
|
|
361
|
+
dtype=[np.float64, np.float32],
|
|
362
|
+
)
|
|
363
|
+
|
|
360
364
|
assert hasattr(self, "_onedal_estimator")
|
|
361
365
|
return self._onedal_estimator.predict_proba(X, queue=queue)
|
|
362
366
|
|
|
@@ -364,7 +368,23 @@ if daal_check_version((2024, "P", 1)):
|
|
|
364
368
|
if queue is None or queue.sycl_device.is_cpu:
|
|
365
369
|
return daal4py_predict(self, X, "computeClassLogProbabilities")
|
|
366
370
|
|
|
367
|
-
|
|
371
|
+
check_is_fitted(self)
|
|
372
|
+
if sklearn_check_version("1.0"):
|
|
373
|
+
X = self._validate_data(
|
|
374
|
+
X,
|
|
375
|
+
reset=False,
|
|
376
|
+
accept_sparse=_sparsity_enabled,
|
|
377
|
+
accept_large_sparse=_sparsity_enabled,
|
|
378
|
+
dtype=[np.float64, np.float32],
|
|
379
|
+
)
|
|
380
|
+
else:
|
|
381
|
+
X = check_array(
|
|
382
|
+
X,
|
|
383
|
+
accept_sparse=_sparsity_enabled,
|
|
384
|
+
accept_large_sparse=_sparsity_enabled,
|
|
385
|
+
dtype=[np.float64, np.float32],
|
|
386
|
+
)
|
|
387
|
+
|
|
368
388
|
assert hasattr(self, "_onedal_estimator")
|
|
369
389
|
return self._onedal_estimator.predict_log_proba(X, queue=queue)
|
|
370
390
|
|
|
@@ -15,3 +15,10 @@
|
|
|
15
15
|
# ===============================================================================
|
|
16
16
|
|
|
17
17
|
from daal4py.sklearn.linear_model import Ridge
|
|
18
|
+
from onedal._device_offload import support_usm_ndarray
|
|
19
|
+
|
|
20
|
+
# Note: `sklearnex.linear_model.Ridge` only has functional
|
|
21
|
+
# sycl GPU support. No GPU device will be offloaded.
|
|
22
|
+
Ridge.fit = support_usm_ndarray(queue_param=False)(Ridge.fit)
|
|
23
|
+
Ridge.predict = support_usm_ndarray(queue_param=False)(Ridge.predict)
|
|
24
|
+
Ridge.score = support_usm_ndarray(queue_param=False)(Ridge.score)
|
|
@@ -20,6 +20,10 @@ from numpy.testing import assert_allclose
|
|
|
20
20
|
from sklearn.datasets import make_regression
|
|
21
21
|
|
|
22
22
|
from daal4py.sklearn._utils import daal_check_version
|
|
23
|
+
from daal4py.sklearn.linear_model.tests.test_ridge import (
|
|
24
|
+
_test_multivariate_ridge_alpha_shape,
|
|
25
|
+
_test_multivariate_ridge_coefficients,
|
|
26
|
+
)
|
|
23
27
|
from onedal.tests.utils._dataframes_support import (
|
|
24
28
|
_as_numpy,
|
|
25
29
|
_convert_to_dataframe,
|
|
@@ -57,32 +61,41 @@ def test_sklearnex_import_linear(dataframe, queue, dtype, macro_block):
|
|
|
57
61
|
assert_allclose(_as_numpy(linreg.coef_), [1.0, 2.0], rtol=tol)
|
|
58
62
|
|
|
59
63
|
|
|
60
|
-
|
|
64
|
+
@pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
|
|
65
|
+
def test_sklearnex_import_ridge(dataframe, queue):
|
|
61
66
|
from sklearnex.linear_model import Ridge
|
|
62
67
|
|
|
63
68
|
X = np.array([[1, 1], [1, 2], [2, 2], [2, 3]])
|
|
64
69
|
y = np.dot(X, np.array([1, 2])) + 3
|
|
70
|
+
X = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
|
|
71
|
+
y = _convert_to_dataframe(y, sycl_queue=queue, target_df=dataframe)
|
|
65
72
|
ridgereg = Ridge().fit(X, y)
|
|
66
73
|
assert "daal4py" in ridgereg.__module__
|
|
67
74
|
assert_allclose(ridgereg.intercept_, 4.5)
|
|
68
75
|
assert_allclose(ridgereg.coef_, [0.8, 1.4])
|
|
69
76
|
|
|
70
77
|
|
|
71
|
-
|
|
78
|
+
@pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
|
|
79
|
+
def test_sklearnex_import_lasso(dataframe, queue):
|
|
72
80
|
from sklearnex.linear_model import Lasso
|
|
73
81
|
|
|
74
82
|
X = [[0, 0], [1, 1], [2, 2]]
|
|
75
83
|
y = [0, 1, 2]
|
|
84
|
+
X = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
|
|
85
|
+
y = _convert_to_dataframe(y, sycl_queue=queue, target_df=dataframe)
|
|
76
86
|
lasso = Lasso(alpha=0.1).fit(X, y)
|
|
77
87
|
assert "daal4py" in lasso.__module__
|
|
78
88
|
assert_allclose(lasso.intercept_, 0.15)
|
|
79
89
|
assert_allclose(lasso.coef_, [0.85, 0.0])
|
|
80
90
|
|
|
81
91
|
|
|
82
|
-
|
|
92
|
+
@pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
|
|
93
|
+
def test_sklearnex_import_elastic(dataframe, queue):
|
|
83
94
|
from sklearnex.linear_model import ElasticNet
|
|
84
95
|
|
|
85
96
|
X, y = make_regression(n_features=2, random_state=0)
|
|
97
|
+
X = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
|
|
98
|
+
y = _convert_to_dataframe(y, sycl_queue=queue, target_df=dataframe)
|
|
86
99
|
elasticnet = ElasticNet(random_state=0).fit(X, y)
|
|
87
100
|
assert "daal4py" in elasticnet.__module__
|
|
88
101
|
assert_allclose(elasticnet.intercept_, 1.451, atol=1e-3)
|
|
@@ -115,3 +128,15 @@ def test_sklearnex_reconstruct_model(dataframe, queue, dtype):
|
|
|
115
128
|
|
|
116
129
|
tol = 1e-5 if _as_numpy(y_pred).dtype == np.float32 else 1e-7
|
|
117
130
|
assert_allclose(gtr, _as_numpy(y_pred), rtol=tol)
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
def test_sklearnex_multivariate_ridge_coefs():
|
|
134
|
+
from sklearnex.linear_model import Ridge
|
|
135
|
+
|
|
136
|
+
_test_multivariate_ridge_coefficients(Ridge, random_state=0)
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
def test_sklearnex_multivariate_ridge_alpha_shape():
|
|
140
|
+
from sklearnex.linear_model import Ridge
|
|
141
|
+
|
|
142
|
+
_test_multivariate_ridge_alpha_shape(Ridge, random_state=0)
|
|
@@ -14,8 +14,11 @@
|
|
|
14
14
|
# limitations under the License.
|
|
15
15
|
# ===============================================================================
|
|
16
16
|
|
|
17
|
+
import numpy as np
|
|
17
18
|
import pytest
|
|
18
|
-
from
|
|
19
|
+
from numpy.testing import assert_allclose, assert_array_equal
|
|
20
|
+
from scipy.sparse import csr_matrix
|
|
21
|
+
from sklearn.datasets import load_breast_cancer, load_iris, make_classification
|
|
19
22
|
from sklearn.metrics import accuracy_score
|
|
20
23
|
from sklearn.model_selection import train_test_split
|
|
21
24
|
|
|
@@ -24,7 +27,9 @@ from onedal.tests.utils._dataframes_support import (
|
|
|
24
27
|
_as_numpy,
|
|
25
28
|
_convert_to_dataframe,
|
|
26
29
|
get_dataframes_and_queues,
|
|
30
|
+
get_queues,
|
|
27
31
|
)
|
|
32
|
+
from sklearnex import config_context
|
|
28
33
|
|
|
29
34
|
|
|
30
35
|
def prepare_input(X, y, dataframe, queue):
|
|
@@ -38,8 +43,7 @@ def prepare_input(X, y, dataframe, queue):
|
|
|
38
43
|
|
|
39
44
|
|
|
40
45
|
@pytest.mark.parametrize(
|
|
41
|
-
"dataframe,queue",
|
|
42
|
-
get_dataframes_and_queues(device_filter_="cpu"),
|
|
46
|
+
"dataframe,queue", get_dataframes_and_queues(device_filter_="cpu")
|
|
43
47
|
)
|
|
44
48
|
def test_sklearnex_multiclass_classification(dataframe, queue):
|
|
45
49
|
from sklearnex.linear_model import LogisticRegression
|
|
@@ -89,3 +93,41 @@ def test_sklearnex_binary_classification(dataframe, queue):
|
|
|
89
93
|
|
|
90
94
|
y_pred = _as_numpy(logreg.predict(X_test))
|
|
91
95
|
assert accuracy_score(y_test, y_pred) > 0.95
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
if daal_check_version((2024, "P", 700)):
|
|
99
|
+
|
|
100
|
+
@pytest.mark.parametrize("queue", get_queues("gpu"))
|
|
101
|
+
@pytest.mark.parametrize("dtype", [np.float32, np.float64])
|
|
102
|
+
@pytest.mark.parametrize(
|
|
103
|
+
"dims", [(3007, 17, 0.05), (50000, 100, 0.01), (512, 10, 0.5)]
|
|
104
|
+
)
|
|
105
|
+
def test_csr(queue, dtype, dims):
|
|
106
|
+
from sklearnex.linear_model import LogisticRegression
|
|
107
|
+
|
|
108
|
+
n, p, density = dims
|
|
109
|
+
|
|
110
|
+
# Create sparse dataset for classification
|
|
111
|
+
X, y = make_classification(n, p, random_state=42)
|
|
112
|
+
X = X.astype(dtype)
|
|
113
|
+
y = y.astype(dtype)
|
|
114
|
+
np.random.seed(2007 + n + p)
|
|
115
|
+
mask = np.random.binomial(1, density, (n, p))
|
|
116
|
+
X = X * mask
|
|
117
|
+
X_sp = csr_matrix(X)
|
|
118
|
+
|
|
119
|
+
model = LogisticRegression(fit_intercept=True, solver="newton-cg")
|
|
120
|
+
model_sp = LogisticRegression(fit_intercept=True, solver="newton-cg")
|
|
121
|
+
|
|
122
|
+
with config_context(target_offload="gpu:0"):
|
|
123
|
+
model.fit(X, y)
|
|
124
|
+
pred = model.predict(X)
|
|
125
|
+
prob = model.predict_proba(X)
|
|
126
|
+
model_sp.fit(X_sp, y)
|
|
127
|
+
pred_sp = model_sp.predict(X_sp)
|
|
128
|
+
prob_sp = model_sp.predict_proba(X_sp)
|
|
129
|
+
|
|
130
|
+
assert_allclose(pred, pred_sp)
|
|
131
|
+
assert_allclose(prob, prob_sp)
|
|
132
|
+
assert_allclose(model.coef_, model_sp.coef_, rtol=1e-4)
|
|
133
|
+
assert_allclose(model.intercept_, model_sp.intercept_, rtol=1e-4)
|
|
@@ -0,0 +1,21 @@
|
|
|
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
|
+
from daal4py.sklearn.manifold import TSNE
|
|
18
|
+
from onedal._device_offload import support_usm_ndarray
|
|
19
|
+
|
|
20
|
+
TSNE.fit = support_usm_ndarray(queue_param=False)(TSNE.fit)
|
|
21
|
+
TSNE.fit_transform = support_usm_ndarray(queue_param=False)(TSNE.fit_transform)
|
|
@@ -15,3 +15,8 @@
|
|
|
15
15
|
# ===============================================================================
|
|
16
16
|
|
|
17
17
|
from daal4py.sklearn.metrics import pairwise_distances
|
|
18
|
+
from onedal._device_offload import support_usm_ndarray
|
|
19
|
+
|
|
20
|
+
pairwise_distances = support_usm_ndarray(freefunc=True, queue_param=False)(
|
|
21
|
+
pairwise_distances
|
|
22
|
+
)
|
|
@@ -15,3 +15,6 @@
|
|
|
15
15
|
# ===============================================================================
|
|
16
16
|
|
|
17
17
|
from daal4py.sklearn.metrics import roc_auc_score
|
|
18
|
+
from onedal._device_offload import support_usm_ndarray
|
|
19
|
+
|
|
20
|
+
roc_auc_score = support_usm_ndarray(freefunc=True, queue_param=False)(roc_auc_score)
|
|
@@ -15,3 +15,6 @@
|
|
|
15
15
|
# ===============================================================================
|
|
16
16
|
|
|
17
17
|
from daal4py.sklearn.model_selection import train_test_split
|
|
18
|
+
from onedal._device_offload import support_usm_ndarray
|
|
19
|
+
|
|
20
|
+
train_test_split = support_usm_ndarray(freefunc=True, queue_param=False)(train_test_split)
|
|
@@ -97,6 +97,15 @@ class LocalOutlierFactor(KNeighborsDispatchingBase, sklearn_LocalOutlierFactor):
|
|
|
97
97
|
self.negative_outlier_factor_, 100.0 * self.contamination
|
|
98
98
|
)
|
|
99
99
|
|
|
100
|
+
# adoption of warning for data with duplicated samples from
|
|
101
|
+
# https://github.com/scikit-learn/scikit-learn/pull/28773
|
|
102
|
+
if sklearn_check_version("1.6"):
|
|
103
|
+
if np.min(self.negative_outlier_factor_) < -1e7 and not self.novelty:
|
|
104
|
+
warnings.warn(
|
|
105
|
+
"Duplicate values are leading to incorrect results. "
|
|
106
|
+
"Increase the number of neighbors for more accurate results."
|
|
107
|
+
)
|
|
108
|
+
|
|
100
109
|
return self
|
|
101
110
|
|
|
102
111
|
def fit(self, X, y=None):
|
|
@@ -19,14 +19,16 @@ import warnings
|
|
|
19
19
|
import numpy as np
|
|
20
20
|
from scipy import sparse as sp
|
|
21
21
|
from sklearn.neighbors._ball_tree import BallTree
|
|
22
|
-
from sklearn.neighbors._base import VALID_METRICS
|
|
22
|
+
from sklearn.neighbors._base import VALID_METRICS, KNeighborsMixin
|
|
23
23
|
from sklearn.neighbors._base import NeighborsBase as sklearn_NeighborsBase
|
|
24
24
|
from sklearn.neighbors._kd_tree import KDTree
|
|
25
|
+
from sklearn.utils.validation import check_is_fitted
|
|
25
26
|
|
|
26
27
|
from daal4py.sklearn._utils import sklearn_check_version
|
|
27
28
|
from onedal.utils import _check_array, _num_features, _num_samples
|
|
28
29
|
|
|
29
30
|
from .._utils import PatchingConditionsChain
|
|
31
|
+
from ..utils import get_namespace
|
|
30
32
|
|
|
31
33
|
|
|
32
34
|
class KNeighborsDispatchingBase:
|
|
@@ -147,6 +149,10 @@ class KNeighborsDispatchingBase:
|
|
|
147
149
|
patching_status = PatchingConditionsChain(
|
|
148
150
|
f"sklearn.neighbors.{class_name}.{method_name}"
|
|
149
151
|
)
|
|
152
|
+
if not patching_status.and_condition(
|
|
153
|
+
"radius" not in method_name, "RadiusNeighbors not implemented in sklearnex"
|
|
154
|
+
):
|
|
155
|
+
return patching_status
|
|
150
156
|
|
|
151
157
|
if not patching_status.and_condition(
|
|
152
158
|
not isinstance(data[0], (KDTree, BallTree, sklearn_NeighborsBase)),
|
|
@@ -264,3 +270,41 @@ class KNeighborsDispatchingBase:
|
|
|
264
270
|
|
|
265
271
|
def _onedal_cpu_supported(self, method_name, *data):
|
|
266
272
|
return self._onedal_supported("cpu", method_name, *data)
|
|
273
|
+
|
|
274
|
+
def kneighbors_graph(self, X=None, n_neighbors=None, mode="connectivity"):
|
|
275
|
+
check_is_fitted(self)
|
|
276
|
+
if n_neighbors is None:
|
|
277
|
+
n_neighbors = self.n_neighbors
|
|
278
|
+
|
|
279
|
+
# check the input only in self.kneighbors
|
|
280
|
+
|
|
281
|
+
# construct CSR matrix representation of the k-NN graph
|
|
282
|
+
if mode == "connectivity":
|
|
283
|
+
A_ind = self.kneighbors(X, n_neighbors, return_distance=False)
|
|
284
|
+
xp, _ = get_namespace(A_ind)
|
|
285
|
+
n_queries = A_ind.shape[0]
|
|
286
|
+
A_data = xp.ones(n_queries * n_neighbors)
|
|
287
|
+
|
|
288
|
+
elif mode == "distance":
|
|
289
|
+
A_data, A_ind = self.kneighbors(X, n_neighbors, return_distance=True)
|
|
290
|
+
xp, _ = get_namespace(A_ind)
|
|
291
|
+
A_data = xp.reshape(A_data, (-1,))
|
|
292
|
+
|
|
293
|
+
else:
|
|
294
|
+
raise ValueError(
|
|
295
|
+
'Unsupported mode, must be one of "connectivity", '
|
|
296
|
+
f'or "distance" but got "{mode}" instead'
|
|
297
|
+
)
|
|
298
|
+
|
|
299
|
+
n_queries = A_ind.shape[0]
|
|
300
|
+
n_samples_fit = self.n_samples_fit_
|
|
301
|
+
n_nonzero = n_queries * n_neighbors
|
|
302
|
+
A_indptr = xp.arange(0, n_nonzero + 1, n_neighbors)
|
|
303
|
+
|
|
304
|
+
kneighbors_graph = sp.csr_matrix(
|
|
305
|
+
(A_data, xp.reshape(A_ind, (-1,)), A_indptr), shape=(n_queries, n_samples_fit)
|
|
306
|
+
)
|
|
307
|
+
|
|
308
|
+
return kneighbors_graph
|
|
309
|
+
|
|
310
|
+
kneighbors_graph.__doc__ = KNeighborsMixin.kneighbors_graph.__doc__
|
|
@@ -32,7 +32,7 @@ from .common import KNeighborsDispatchingBase
|
|
|
32
32
|
@control_n_jobs(
|
|
33
33
|
decorated_methods=["fit", "predict", "predict_proba", "kneighbors", "score"]
|
|
34
34
|
)
|
|
35
|
-
class KNeighborsClassifier(
|
|
35
|
+
class KNeighborsClassifier(KNeighborsDispatchingBase, sklearn_KNeighborsClassifier):
|
|
36
36
|
__doc__ = sklearn_KNeighborsClassifier.__doc__
|
|
37
37
|
if sklearn_check_version("1.2"):
|
|
38
38
|
_parameter_constraints: dict = {
|
|
@@ -169,24 +169,6 @@ class KNeighborsClassifier(sklearn_KNeighborsClassifier, KNeighborsDispatchingBa
|
|
|
169
169
|
return_distance=return_distance,
|
|
170
170
|
)
|
|
171
171
|
|
|
172
|
-
@wrap_output_data
|
|
173
|
-
def radius_neighbors(
|
|
174
|
-
self, X=None, radius=None, return_distance=True, sort_results=False
|
|
175
|
-
):
|
|
176
|
-
_onedal_estimator = getattr(self, "_onedal_estimator", None)
|
|
177
|
-
|
|
178
|
-
if (
|
|
179
|
-
_onedal_estimator is not None
|
|
180
|
-
or getattr(self, "_tree", 0) is None
|
|
181
|
-
and self._fit_method == "kd_tree"
|
|
182
|
-
):
|
|
183
|
-
sklearn_NearestNeighbors.fit(self, self._fit_X, getattr(self, "_y", None))
|
|
184
|
-
result = sklearn_NearestNeighbors.radius_neighbors(
|
|
185
|
-
self, X, radius, return_distance, sort_results
|
|
186
|
-
)
|
|
187
|
-
|
|
188
|
-
return result
|
|
189
|
-
|
|
190
172
|
def _onedal_fit(self, X, y, queue=None):
|
|
191
173
|
onedal_params = {
|
|
192
174
|
"n_neighbors": self.n_neighbors,
|
|
@@ -242,4 +224,3 @@ class KNeighborsClassifier(sklearn_KNeighborsClassifier, KNeighborsDispatchingBa
|
|
|
242
224
|
predict_proba.__doc__ = sklearn_KNeighborsClassifier.predict_proba.__doc__
|
|
243
225
|
score.__doc__ = sklearn_KNeighborsClassifier.score.__doc__
|
|
244
226
|
kneighbors.__doc__ = sklearn_KNeighborsClassifier.kneighbors.__doc__
|
|
245
|
-
radius_neighbors.__doc__ = sklearn_NearestNeighbors.radius_neighbors.__doc__
|
|
@@ -30,7 +30,7 @@ from .common import KNeighborsDispatchingBase
|
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
@control_n_jobs(decorated_methods=["fit", "predict", "kneighbors"])
|
|
33
|
-
class KNeighborsRegressor(
|
|
33
|
+
class KNeighborsRegressor(KNeighborsDispatchingBase, sklearn_KNeighborsRegressor):
|
|
34
34
|
__doc__ = sklearn_KNeighborsRegressor.__doc__
|
|
35
35
|
if sklearn_check_version("1.2"):
|
|
36
36
|
_parameter_constraints: dict = {
|
|
@@ -152,24 +152,6 @@ class KNeighborsRegressor(sklearn_KNeighborsRegressor, KNeighborsDispatchingBase
|
|
|
152
152
|
return_distance=return_distance,
|
|
153
153
|
)
|
|
154
154
|
|
|
155
|
-
@wrap_output_data
|
|
156
|
-
def radius_neighbors(
|
|
157
|
-
self, X=None, radius=None, return_distance=True, sort_results=False
|
|
158
|
-
):
|
|
159
|
-
_onedal_estimator = getattr(self, "_onedal_estimator", None)
|
|
160
|
-
|
|
161
|
-
if (
|
|
162
|
-
_onedal_estimator is not None
|
|
163
|
-
or getattr(self, "_tree", 0) is None
|
|
164
|
-
and self._fit_method == "kd_tree"
|
|
165
|
-
):
|
|
166
|
-
sklearn_NearestNeighbors.fit(self, self._fit_X, getattr(self, "_y", None))
|
|
167
|
-
result = sklearn_NearestNeighbors.radius_neighbors(
|
|
168
|
-
self, X, radius, return_distance, sort_results
|
|
169
|
-
)
|
|
170
|
-
|
|
171
|
-
return result
|
|
172
|
-
|
|
173
155
|
def _onedal_fit(self, X, y, queue=None):
|
|
174
156
|
onedal_params = {
|
|
175
157
|
"n_neighbors": self.n_neighbors,
|
|
@@ -218,5 +200,4 @@ class KNeighborsRegressor(sklearn_KNeighborsRegressor, KNeighborsDispatchingBase
|
|
|
218
200
|
fit.__doc__ = sklearn_KNeighborsRegressor.__doc__
|
|
219
201
|
predict.__doc__ = sklearn_KNeighborsRegressor.predict.__doc__
|
|
220
202
|
kneighbors.__doc__ = sklearn_KNeighborsRegressor.kneighbors.__doc__
|
|
221
|
-
radius_neighbors.__doc__ = sklearn_NearestNeighbors.radius_neighbors.__doc__
|
|
222
203
|
score.__doc__ = sklearn_KNeighborsRegressor.score.__doc__
|