scikit-learn-intelex 2025.4.0__py313-none-manylinux_2_28_x86_64.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.
- daal4py/__init__.py +73 -0
- daal4py/__main__.py +58 -0
- daal4py/_daal4py.cpython-313-x86_64-linux-gnu.so +0 -0
- daal4py/doc/third-party-programs.txt +424 -0
- daal4py/mb/__init__.py +19 -0
- daal4py/mb/model_builders.py +377 -0
- daal4py/mpi_transceiver.cpython-313-x86_64-linux-gnu.so +0 -0
- daal4py/sklearn/__init__.py +40 -0
- daal4py/sklearn/_n_jobs_support.py +248 -0
- daal4py/sklearn/_utils.py +245 -0
- daal4py/sklearn/cluster/__init__.py +20 -0
- daal4py/sklearn/cluster/dbscan.py +165 -0
- daal4py/sklearn/cluster/k_means.py +597 -0
- daal4py/sklearn/cluster/tests/test_dbscan.py +109 -0
- daal4py/sklearn/decomposition/__init__.py +19 -0
- daal4py/sklearn/decomposition/_pca.py +524 -0
- daal4py/sklearn/ensemble/AdaBoostClassifier.py +196 -0
- daal4py/sklearn/ensemble/GBTDAAL.py +337 -0
- daal4py/sklearn/ensemble/__init__.py +27 -0
- daal4py/sklearn/ensemble/_forest.py +1397 -0
- daal4py/sklearn/ensemble/tests/test_decision_forest.py +206 -0
- daal4py/sklearn/linear_model/__init__.py +29 -0
- daal4py/sklearn/linear_model/_coordinate_descent.py +848 -0
- daal4py/sklearn/linear_model/_linear.py +272 -0
- daal4py/sklearn/linear_model/_ridge.py +325 -0
- daal4py/sklearn/linear_model/coordinate_descent.py +17 -0
- daal4py/sklearn/linear_model/linear.py +17 -0
- daal4py/sklearn/linear_model/logistic_loss.py +195 -0
- daal4py/sklearn/linear_model/logistic_path.py +1026 -0
- daal4py/sklearn/linear_model/ridge.py +17 -0
- daal4py/sklearn/linear_model/tests/test_linear.py +208 -0
- daal4py/sklearn/linear_model/tests/test_ridge.py +69 -0
- daal4py/sklearn/manifold/__init__.py +19 -0
- daal4py/sklearn/manifold/_t_sne.py +405 -0
- daal4py/sklearn/metrics/__init__.py +20 -0
- daal4py/sklearn/metrics/_pairwise.py +236 -0
- daal4py/sklearn/metrics/_ranking.py +210 -0
- daal4py/sklearn/model_selection/__init__.py +19 -0
- daal4py/sklearn/model_selection/_split.py +309 -0
- daal4py/sklearn/model_selection/tests/test_split.py +56 -0
- daal4py/sklearn/monkeypatch/__init__.py +0 -0
- daal4py/sklearn/monkeypatch/dispatcher.py +232 -0
- daal4py/sklearn/monkeypatch/tests/_models_info.py +161 -0
- daal4py/sklearn/monkeypatch/tests/test_monkeypatch.py +71 -0
- daal4py/sklearn/monkeypatch/tests/test_patching.py +90 -0
- daal4py/sklearn/monkeypatch/tests/utils/_launch_algorithms.py +117 -0
- daal4py/sklearn/neighbors/__init__.py +21 -0
- daal4py/sklearn/neighbors/_base.py +503 -0
- daal4py/sklearn/neighbors/_classification.py +139 -0
- daal4py/sklearn/neighbors/_regression.py +74 -0
- daal4py/sklearn/neighbors/_unsupervised.py +55 -0
- daal4py/sklearn/neighbors/tests/test_kneighbors.py +113 -0
- daal4py/sklearn/svm/__init__.py +19 -0
- daal4py/sklearn/svm/svm.py +734 -0
- daal4py/sklearn/utils/__init__.py +21 -0
- daal4py/sklearn/utils/base.py +75 -0
- daal4py/sklearn/utils/tests/test_utils.py +51 -0
- daal4py/sklearn/utils/validation.py +696 -0
- onedal/__init__.py +83 -0
- onedal/_config.py +54 -0
- onedal/_device_offload.py +204 -0
- onedal/_onedal_py_dpc.cpython-313-x86_64-linux-gnu.so +0 -0
- onedal/_onedal_py_host.cpython-313-x86_64-linux-gnu.so +0 -0
- onedal/_onedal_py_spmd_dpc.cpython-313-x86_64-linux-gnu.so +0 -0
- onedal/basic_statistics/__init__.py +20 -0
- onedal/basic_statistics/basic_statistics.py +107 -0
- onedal/basic_statistics/incremental_basic_statistics.py +175 -0
- onedal/basic_statistics/tests/test_basic_statistics.py +242 -0
- onedal/basic_statistics/tests/test_incremental_basic_statistics.py +279 -0
- onedal/basic_statistics/tests/utils.py +50 -0
- onedal/cluster/__init__.py +27 -0
- onedal/cluster/dbscan.py +105 -0
- onedal/cluster/kmeans.py +557 -0
- onedal/cluster/kmeans_init.py +112 -0
- onedal/cluster/tests/test_dbscan.py +125 -0
- onedal/cluster/tests/test_kmeans.py +88 -0
- onedal/cluster/tests/test_kmeans_init.py +93 -0
- onedal/common/_base.py +38 -0
- onedal/common/_estimator_checks.py +47 -0
- onedal/common/_mixin.py +62 -0
- onedal/common/_policy.py +55 -0
- onedal/common/_spmd_policy.py +30 -0
- onedal/common/hyperparameters.py +125 -0
- onedal/common/tests/test_policy.py +76 -0
- onedal/common/tests/test_sycl.py +128 -0
- onedal/covariance/__init__.py +20 -0
- onedal/covariance/covariance.py +122 -0
- onedal/covariance/incremental_covariance.py +161 -0
- onedal/covariance/tests/test_covariance.py +50 -0
- onedal/covariance/tests/test_incremental_covariance.py +190 -0
- onedal/datatypes/__init__.py +19 -0
- onedal/datatypes/_data_conversion.py +121 -0
- onedal/datatypes/tests/common.py +126 -0
- onedal/datatypes/tests/test_data.py +475 -0
- onedal/decomposition/__init__.py +20 -0
- onedal/decomposition/incremental_pca.py +214 -0
- onedal/decomposition/pca.py +186 -0
- onedal/decomposition/tests/test_incremental_pca.py +285 -0
- onedal/ensemble/__init__.py +29 -0
- onedal/ensemble/forest.py +736 -0
- onedal/ensemble/tests/test_random_forest.py +97 -0
- onedal/linear_model/__init__.py +27 -0
- onedal/linear_model/incremental_linear_model.py +292 -0
- onedal/linear_model/linear_model.py +325 -0
- onedal/linear_model/logistic_regression.py +247 -0
- onedal/linear_model/tests/test_incremental_linear_regression.py +213 -0
- onedal/linear_model/tests/test_incremental_ridge_regression.py +171 -0
- onedal/linear_model/tests/test_linear_regression.py +259 -0
- onedal/linear_model/tests/test_logistic_regression.py +95 -0
- onedal/linear_model/tests/test_ridge.py +95 -0
- onedal/neighbors/__init__.py +19 -0
- onedal/neighbors/neighbors.py +763 -0
- onedal/neighbors/tests/test_knn_classification.py +49 -0
- onedal/primitives/__init__.py +27 -0
- onedal/primitives/get_tree.py +25 -0
- onedal/primitives/kernel_functions.py +152 -0
- onedal/primitives/tests/test_kernel_functions.py +159 -0
- onedal/spmd/__init__.py +25 -0
- onedal/spmd/_base.py +30 -0
- onedal/spmd/basic_statistics/__init__.py +20 -0
- onedal/spmd/basic_statistics/basic_statistics.py +30 -0
- onedal/spmd/basic_statistics/incremental_basic_statistics.py +71 -0
- onedal/spmd/cluster/__init__.py +28 -0
- onedal/spmd/cluster/dbscan.py +23 -0
- onedal/spmd/cluster/kmeans.py +56 -0
- onedal/spmd/covariance/__init__.py +20 -0
- onedal/spmd/covariance/covariance.py +26 -0
- onedal/spmd/covariance/incremental_covariance.py +83 -0
- onedal/spmd/decomposition/__init__.py +20 -0
- onedal/spmd/decomposition/incremental_pca.py +124 -0
- onedal/spmd/decomposition/pca.py +26 -0
- onedal/spmd/ensemble/__init__.py +19 -0
- onedal/spmd/ensemble/forest.py +28 -0
- onedal/spmd/linear_model/__init__.py +21 -0
- onedal/spmd/linear_model/incremental_linear_model.py +101 -0
- onedal/spmd/linear_model/linear_model.py +30 -0
- onedal/spmd/linear_model/logistic_regression.py +38 -0
- onedal/spmd/neighbors/__init__.py +19 -0
- onedal/spmd/neighbors/neighbors.py +75 -0
- onedal/svm/__init__.py +19 -0
- onedal/svm/svm.py +556 -0
- onedal/svm/tests/test_csr_svm.py +351 -0
- onedal/svm/tests/test_nusvc.py +204 -0
- onedal/svm/tests/test_nusvr.py +210 -0
- onedal/svm/tests/test_svc.py +176 -0
- onedal/svm/tests/test_svr.py +243 -0
- onedal/tests/test_common.py +57 -0
- onedal/tests/utils/_dataframes_support.py +162 -0
- onedal/tests/utils/_device_selection.py +102 -0
- onedal/utils/__init__.py +49 -0
- onedal/utils/_array_api.py +81 -0
- onedal/utils/_dpep_helpers.py +56 -0
- onedal/utils/tests/test_validation.py +142 -0
- onedal/utils/validation.py +464 -0
- scikit_learn_intelex-2025.4.0.dist-info/LICENSE.txt +202 -0
- scikit_learn_intelex-2025.4.0.dist-info/METADATA +190 -0
- scikit_learn_intelex-2025.4.0.dist-info/RECORD +282 -0
- scikit_learn_intelex-2025.4.0.dist-info/WHEEL +5 -0
- scikit_learn_intelex-2025.4.0.dist-info/top_level.txt +3 -0
- sklearnex/__init__.py +66 -0
- sklearnex/__main__.py +58 -0
- sklearnex/_config.py +116 -0
- sklearnex/_device_offload.py +126 -0
- sklearnex/_utils.py +177 -0
- sklearnex/basic_statistics/__init__.py +20 -0
- sklearnex/basic_statistics/basic_statistics.py +261 -0
- sklearnex/basic_statistics/incremental_basic_statistics.py +352 -0
- sklearnex/basic_statistics/tests/test_basic_statistics.py +405 -0
- sklearnex/basic_statistics/tests/test_incremental_basic_statistics.py +455 -0
- sklearnex/cluster/__init__.py +20 -0
- sklearnex/cluster/dbscan.py +197 -0
- sklearnex/cluster/k_means.py +397 -0
- sklearnex/cluster/tests/test_dbscan.py +38 -0
- sklearnex/cluster/tests/test_kmeans.py +157 -0
- sklearnex/conftest.py +82 -0
- sklearnex/covariance/__init__.py +19 -0
- sklearnex/covariance/incremental_covariance.py +405 -0
- sklearnex/covariance/tests/test_incremental_covariance.py +287 -0
- sklearnex/decomposition/__init__.py +19 -0
- sklearnex/decomposition/pca.py +427 -0
- sklearnex/decomposition/tests/test_pca.py +58 -0
- sklearnex/dispatcher.py +534 -0
- sklearnex/doc/third-party-programs.txt +424 -0
- sklearnex/ensemble/__init__.py +29 -0
- sklearnex/ensemble/_forest.py +2029 -0
- sklearnex/ensemble/tests/test_forest.py +140 -0
- sklearnex/glob/__main__.py +72 -0
- sklearnex/glob/dispatcher.py +101 -0
- sklearnex/linear_model/__init__.py +32 -0
- sklearnex/linear_model/coordinate_descent.py +30 -0
- sklearnex/linear_model/incremental_linear.py +495 -0
- sklearnex/linear_model/incremental_ridge.py +432 -0
- sklearnex/linear_model/linear.py +346 -0
- sklearnex/linear_model/logistic_regression.py +415 -0
- sklearnex/linear_model/ridge.py +390 -0
- sklearnex/linear_model/tests/test_incremental_linear.py +267 -0
- sklearnex/linear_model/tests/test_incremental_ridge.py +214 -0
- sklearnex/linear_model/tests/test_linear.py +142 -0
- sklearnex/linear_model/tests/test_logreg.py +134 -0
- sklearnex/linear_model/tests/test_ridge.py +256 -0
- sklearnex/manifold/__init__.py +19 -0
- sklearnex/manifold/t_sne.py +26 -0
- sklearnex/manifold/tests/test_tsne.py +250 -0
- sklearnex/metrics/__init__.py +23 -0
- sklearnex/metrics/pairwise.py +22 -0
- sklearnex/metrics/ranking.py +20 -0
- sklearnex/metrics/tests/test_metrics.py +39 -0
- sklearnex/model_selection/__init__.py +21 -0
- sklearnex/model_selection/split.py +22 -0
- sklearnex/model_selection/tests/test_model_selection.py +34 -0
- sklearnex/neighbors/__init__.py +27 -0
- sklearnex/neighbors/_lof.py +236 -0
- sklearnex/neighbors/common.py +310 -0
- sklearnex/neighbors/knn_classification.py +231 -0
- sklearnex/neighbors/knn_regression.py +207 -0
- sklearnex/neighbors/knn_unsupervised.py +178 -0
- sklearnex/neighbors/tests/test_neighbors.py +82 -0
- sklearnex/preview/__init__.py +17 -0
- sklearnex/preview/covariance/__init__.py +19 -0
- sklearnex/preview/covariance/covariance.py +142 -0
- sklearnex/preview/covariance/tests/test_covariance.py +66 -0
- sklearnex/preview/decomposition/__init__.py +19 -0
- sklearnex/preview/decomposition/incremental_pca.py +244 -0
- sklearnex/preview/decomposition/tests/test_incremental_pca.py +336 -0
- sklearnex/spmd/__init__.py +25 -0
- sklearnex/spmd/basic_statistics/__init__.py +20 -0
- sklearnex/spmd/basic_statistics/basic_statistics.py +21 -0
- sklearnex/spmd/basic_statistics/incremental_basic_statistics.py +30 -0
- sklearnex/spmd/basic_statistics/tests/test_basic_statistics_spmd.py +107 -0
- sklearnex/spmd/basic_statistics/tests/test_incremental_basic_statistics_spmd.py +306 -0
- sklearnex/spmd/cluster/__init__.py +30 -0
- sklearnex/spmd/cluster/dbscan.py +50 -0
- sklearnex/spmd/cluster/kmeans.py +21 -0
- sklearnex/spmd/cluster/tests/test_dbscan_spmd.py +97 -0
- sklearnex/spmd/cluster/tests/test_kmeans_spmd.py +173 -0
- sklearnex/spmd/covariance/__init__.py +20 -0
- sklearnex/spmd/covariance/covariance.py +21 -0
- sklearnex/spmd/covariance/incremental_covariance.py +37 -0
- sklearnex/spmd/covariance/tests/test_covariance_spmd.py +107 -0
- sklearnex/spmd/covariance/tests/test_incremental_covariance_spmd.py +184 -0
- sklearnex/spmd/decomposition/__init__.py +20 -0
- sklearnex/spmd/decomposition/incremental_pca.py +30 -0
- sklearnex/spmd/decomposition/pca.py +21 -0
- sklearnex/spmd/decomposition/tests/test_incremental_pca_spmd.py +269 -0
- sklearnex/spmd/decomposition/tests/test_pca_spmd.py +128 -0
- sklearnex/spmd/ensemble/__init__.py +19 -0
- sklearnex/spmd/ensemble/forest.py +71 -0
- sklearnex/spmd/ensemble/tests/test_forest_spmd.py +265 -0
- sklearnex/spmd/linear_model/__init__.py +21 -0
- sklearnex/spmd/linear_model/incremental_linear_model.py +35 -0
- sklearnex/spmd/linear_model/linear_model.py +21 -0
- sklearnex/spmd/linear_model/logistic_regression.py +21 -0
- sklearnex/spmd/linear_model/tests/test_incremental_linear_spmd.py +331 -0
- sklearnex/spmd/linear_model/tests/test_linear_regression_spmd.py +145 -0
- sklearnex/spmd/linear_model/tests/test_logistic_regression_spmd.py +162 -0
- sklearnex/spmd/neighbors/__init__.py +19 -0
- sklearnex/spmd/neighbors/neighbors.py +25 -0
- sklearnex/spmd/neighbors/tests/test_neighbors_spmd.py +288 -0
- sklearnex/svm/__init__.py +29 -0
- sklearnex/svm/_common.py +339 -0
- sklearnex/svm/nusvc.py +371 -0
- sklearnex/svm/nusvr.py +170 -0
- sklearnex/svm/svc.py +399 -0
- sklearnex/svm/svr.py +167 -0
- sklearnex/svm/tests/test_svm.py +93 -0
- sklearnex/tests/test_common.py +491 -0
- sklearnex/tests/test_config.py +123 -0
- sklearnex/tests/test_hyperparameters.py +43 -0
- sklearnex/tests/test_memory_usage.py +347 -0
- sklearnex/tests/test_monkeypatch.py +269 -0
- sklearnex/tests/test_n_jobs_support.py +108 -0
- sklearnex/tests/test_parallel.py +48 -0
- sklearnex/tests/test_patching.py +377 -0
- sklearnex/tests/test_run_to_run_stability.py +326 -0
- sklearnex/tests/utils/__init__.py +48 -0
- sklearnex/tests/utils/base.py +436 -0
- sklearnex/tests/utils/spmd.py +198 -0
- sklearnex/utils/__init__.py +19 -0
- sklearnex/utils/_array_api.py +82 -0
- sklearnex/utils/parallel.py +59 -0
- sklearnex/utils/tests/test_validation.py +238 -0
- sklearnex/utils/validation.py +208 -0
sklearnex/svm/svc.py
ADDED
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
# ==============================================================================
|
|
2
|
+
# Copyright 2021 Intel Corporation
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
# ==============================================================================
|
|
16
|
+
|
|
17
|
+
import numpy as np
|
|
18
|
+
from scipy import sparse as sp
|
|
19
|
+
from sklearn.exceptions import NotFittedError
|
|
20
|
+
from sklearn.metrics import accuracy_score
|
|
21
|
+
from sklearn.svm import SVC as _sklearn_SVC
|
|
22
|
+
from sklearn.utils.validation import (
|
|
23
|
+
_deprecate_positional_args,
|
|
24
|
+
check_array,
|
|
25
|
+
check_is_fitted,
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
from daal4py.sklearn._n_jobs_support import control_n_jobs
|
|
29
|
+
from daal4py.sklearn._utils import sklearn_check_version
|
|
30
|
+
|
|
31
|
+
from .._device_offload import dispatch, wrap_output_data
|
|
32
|
+
from .._utils import PatchingConditionsChain
|
|
33
|
+
from ..utils._array_api import get_namespace
|
|
34
|
+
from ._common import BaseSVC
|
|
35
|
+
|
|
36
|
+
if sklearn_check_version("1.0"):
|
|
37
|
+
from sklearn.utils.metaestimators import available_if
|
|
38
|
+
|
|
39
|
+
from onedal.svm import SVC as onedal_SVC
|
|
40
|
+
|
|
41
|
+
if sklearn_check_version("1.6"):
|
|
42
|
+
from sklearn.utils.validation import validate_data
|
|
43
|
+
else:
|
|
44
|
+
validate_data = BaseSVC._validate_data
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
@control_n_jobs(
|
|
48
|
+
decorated_methods=["fit", "predict", "_predict_proba", "decision_function", "score"]
|
|
49
|
+
)
|
|
50
|
+
class SVC(_sklearn_SVC, BaseSVC):
|
|
51
|
+
__doc__ = _sklearn_SVC.__doc__
|
|
52
|
+
|
|
53
|
+
if sklearn_check_version("1.2"):
|
|
54
|
+
_parameter_constraints: dict = {**_sklearn_SVC._parameter_constraints}
|
|
55
|
+
|
|
56
|
+
@_deprecate_positional_args
|
|
57
|
+
def __init__(
|
|
58
|
+
self,
|
|
59
|
+
*,
|
|
60
|
+
C=1.0,
|
|
61
|
+
kernel="rbf",
|
|
62
|
+
degree=3,
|
|
63
|
+
gamma="scale",
|
|
64
|
+
coef0=0.0,
|
|
65
|
+
shrinking=True,
|
|
66
|
+
probability=False,
|
|
67
|
+
tol=1e-3,
|
|
68
|
+
cache_size=200,
|
|
69
|
+
class_weight=None,
|
|
70
|
+
verbose=False,
|
|
71
|
+
max_iter=-1,
|
|
72
|
+
decision_function_shape="ovr",
|
|
73
|
+
break_ties=False,
|
|
74
|
+
random_state=None,
|
|
75
|
+
):
|
|
76
|
+
super().__init__(
|
|
77
|
+
C=C,
|
|
78
|
+
kernel=kernel,
|
|
79
|
+
degree=degree,
|
|
80
|
+
gamma=gamma,
|
|
81
|
+
coef0=coef0,
|
|
82
|
+
shrinking=shrinking,
|
|
83
|
+
probability=probability,
|
|
84
|
+
tol=tol,
|
|
85
|
+
cache_size=cache_size,
|
|
86
|
+
class_weight=class_weight,
|
|
87
|
+
verbose=verbose,
|
|
88
|
+
max_iter=max_iter,
|
|
89
|
+
decision_function_shape=decision_function_shape,
|
|
90
|
+
break_ties=break_ties,
|
|
91
|
+
random_state=random_state,
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
def fit(self, X, y, sample_weight=None):
|
|
95
|
+
if sklearn_check_version("1.2"):
|
|
96
|
+
self._validate_params()
|
|
97
|
+
elif self.C <= 0:
|
|
98
|
+
# else if added to correct issues with
|
|
99
|
+
# sklearn tests:
|
|
100
|
+
# svm/tests/test_sparse.py::test_error
|
|
101
|
+
# svm/tests/test_svm.py::test_bad_input
|
|
102
|
+
# for sklearn versions < 1.2 (i.e. without
|
|
103
|
+
# validate_params parameter checking)
|
|
104
|
+
# Without this, a segmentation fault with
|
|
105
|
+
# Windows fatal exception: access violation
|
|
106
|
+
# occurs
|
|
107
|
+
raise ValueError("C <= 0")
|
|
108
|
+
dispatch(
|
|
109
|
+
self,
|
|
110
|
+
"fit",
|
|
111
|
+
{
|
|
112
|
+
"onedal": self.__class__._onedal_fit,
|
|
113
|
+
"sklearn": _sklearn_SVC.fit,
|
|
114
|
+
},
|
|
115
|
+
X,
|
|
116
|
+
y,
|
|
117
|
+
sample_weight=sample_weight,
|
|
118
|
+
)
|
|
119
|
+
|
|
120
|
+
return self
|
|
121
|
+
|
|
122
|
+
@wrap_output_data
|
|
123
|
+
def predict(self, X):
|
|
124
|
+
check_is_fitted(self)
|
|
125
|
+
return dispatch(
|
|
126
|
+
self,
|
|
127
|
+
"predict",
|
|
128
|
+
{
|
|
129
|
+
"onedal": self.__class__._onedal_predict,
|
|
130
|
+
"sklearn": _sklearn_SVC.predict,
|
|
131
|
+
},
|
|
132
|
+
X,
|
|
133
|
+
)
|
|
134
|
+
|
|
135
|
+
@wrap_output_data
|
|
136
|
+
def score(self, X, y, sample_weight=None):
|
|
137
|
+
check_is_fitted(self)
|
|
138
|
+
return dispatch(
|
|
139
|
+
self,
|
|
140
|
+
"score",
|
|
141
|
+
{
|
|
142
|
+
"onedal": self.__class__._onedal_score,
|
|
143
|
+
"sklearn": _sklearn_SVC.score,
|
|
144
|
+
},
|
|
145
|
+
X,
|
|
146
|
+
y,
|
|
147
|
+
sample_weight=sample_weight,
|
|
148
|
+
)
|
|
149
|
+
|
|
150
|
+
if sklearn_check_version("1.0"):
|
|
151
|
+
|
|
152
|
+
@available_if(_sklearn_SVC._check_proba)
|
|
153
|
+
def predict_proba(self, X):
|
|
154
|
+
"""
|
|
155
|
+
Compute probabilities of possible outcomes for samples in X.
|
|
156
|
+
|
|
157
|
+
The model need to have probability information computed at training
|
|
158
|
+
time: fit with attribute `probability` set to True.
|
|
159
|
+
|
|
160
|
+
Parameters
|
|
161
|
+
----------
|
|
162
|
+
X : array-like of shape (n_samples, n_features)
|
|
163
|
+
For kernel="precomputed", the expected shape of X is
|
|
164
|
+
(n_samples_test, n_samples_train).
|
|
165
|
+
|
|
166
|
+
Returns
|
|
167
|
+
-------
|
|
168
|
+
T : ndarray of shape (n_samples, n_classes)
|
|
169
|
+
Returns the probability of the sample for each class in
|
|
170
|
+
the model. The columns correspond to the classes in sorted
|
|
171
|
+
order, as they appear in the attribute :term:`classes_`.
|
|
172
|
+
|
|
173
|
+
Notes
|
|
174
|
+
-----
|
|
175
|
+
The probability model is created using cross validation, so
|
|
176
|
+
the results can be slightly different than those obtained by
|
|
177
|
+
predict. Also, it will produce meaningless results on very small
|
|
178
|
+
datasets.
|
|
179
|
+
"""
|
|
180
|
+
check_is_fitted(self)
|
|
181
|
+
return self._predict_proba(X)
|
|
182
|
+
|
|
183
|
+
@available_if(_sklearn_SVC._check_proba)
|
|
184
|
+
def predict_log_proba(self, X):
|
|
185
|
+
"""Compute log probabilities of possible outcomes for samples in X.
|
|
186
|
+
|
|
187
|
+
The model need to have probability information computed at training
|
|
188
|
+
time: fit with attribute `probability` set to True.
|
|
189
|
+
|
|
190
|
+
Parameters
|
|
191
|
+
----------
|
|
192
|
+
X : array-like of shape (n_samples, n_features) or \
|
|
193
|
+
(n_samples_test, n_samples_train)
|
|
194
|
+
For kernel="precomputed", the expected shape of X is
|
|
195
|
+
(n_samples_test, n_samples_train).
|
|
196
|
+
|
|
197
|
+
Returns
|
|
198
|
+
-------
|
|
199
|
+
T : ndarray of shape (n_samples, n_classes)
|
|
200
|
+
Returns the log-probabilities of the sample for each class in
|
|
201
|
+
the model. The columns correspond to the classes in sorted
|
|
202
|
+
order, as they appear in the attribute :term:`classes_`.
|
|
203
|
+
|
|
204
|
+
Notes
|
|
205
|
+
-----
|
|
206
|
+
The probability model is created using cross validation, so
|
|
207
|
+
the results can be slightly different than those obtained by
|
|
208
|
+
predict. Also, it will produce meaningless results on very small
|
|
209
|
+
datasets.
|
|
210
|
+
"""
|
|
211
|
+
xp, _ = get_namespace(X)
|
|
212
|
+
|
|
213
|
+
return xp.log(self.predict_proba(X))
|
|
214
|
+
|
|
215
|
+
else:
|
|
216
|
+
|
|
217
|
+
@property
|
|
218
|
+
def predict_proba(self):
|
|
219
|
+
self._check_proba()
|
|
220
|
+
check_is_fitted(self)
|
|
221
|
+
return self._predict_proba
|
|
222
|
+
|
|
223
|
+
def _predict_log_proba(self, X):
|
|
224
|
+
xp, _ = get_namespace(X)
|
|
225
|
+
return xp.log(self.predict_proba(X))
|
|
226
|
+
|
|
227
|
+
predict_proba.__doc__ = _sklearn_SVC.predict_proba.__doc__
|
|
228
|
+
|
|
229
|
+
@wrap_output_data
|
|
230
|
+
def _predict_proba(self, X):
|
|
231
|
+
sklearn_pred_proba = (
|
|
232
|
+
_sklearn_SVC.predict_proba
|
|
233
|
+
if sklearn_check_version("1.0")
|
|
234
|
+
else _sklearn_SVC._predict_proba
|
|
235
|
+
)
|
|
236
|
+
|
|
237
|
+
return dispatch(
|
|
238
|
+
self,
|
|
239
|
+
"predict_proba",
|
|
240
|
+
{
|
|
241
|
+
"onedal": self.__class__._onedal_predict_proba,
|
|
242
|
+
"sklearn": sklearn_pred_proba,
|
|
243
|
+
},
|
|
244
|
+
X,
|
|
245
|
+
)
|
|
246
|
+
|
|
247
|
+
@wrap_output_data
|
|
248
|
+
def decision_function(self, X):
|
|
249
|
+
check_is_fitted(self)
|
|
250
|
+
return dispatch(
|
|
251
|
+
self,
|
|
252
|
+
"decision_function",
|
|
253
|
+
{
|
|
254
|
+
"onedal": self.__class__._onedal_decision_function,
|
|
255
|
+
"sklearn": _sklearn_SVC.decision_function,
|
|
256
|
+
},
|
|
257
|
+
X,
|
|
258
|
+
)
|
|
259
|
+
|
|
260
|
+
decision_function.__doc__ = _sklearn_SVC.decision_function.__doc__
|
|
261
|
+
|
|
262
|
+
def _onedal_gpu_supported(self, method_name, *data):
|
|
263
|
+
class_name = self.__class__.__name__
|
|
264
|
+
patching_status = PatchingConditionsChain(
|
|
265
|
+
f"sklearn.svm.{class_name}.{method_name}"
|
|
266
|
+
)
|
|
267
|
+
if len(data) > 1:
|
|
268
|
+
self._class_count = len(np.unique(data[1]))
|
|
269
|
+
self._is_sparse = sp.issparse(data[0])
|
|
270
|
+
conditions = [
|
|
271
|
+
(
|
|
272
|
+
self.kernel in ["linear", "rbf"],
|
|
273
|
+
f'Kernel is "{self.kernel}" while '
|
|
274
|
+
'"linear" and "rbf" are only supported on GPU.',
|
|
275
|
+
),
|
|
276
|
+
(self.class_weight is None, "Class weight is not supported on GPU."),
|
|
277
|
+
(not self._is_sparse, "Sparse input is not supported on GPU."),
|
|
278
|
+
(self._class_count == 2, "Multiclassification is not supported on GPU."),
|
|
279
|
+
]
|
|
280
|
+
if method_name == "fit":
|
|
281
|
+
patching_status.and_conditions(conditions)
|
|
282
|
+
return patching_status
|
|
283
|
+
if method_name in ["predict", "predict_proba", "decision_function", "score"]:
|
|
284
|
+
conditions.append(
|
|
285
|
+
(hasattr(self, "_onedal_estimator"), "oneDAL model was not trained")
|
|
286
|
+
)
|
|
287
|
+
patching_status.and_conditions(conditions)
|
|
288
|
+
return patching_status
|
|
289
|
+
raise RuntimeError(f"Unknown method {method_name} in {class_name}")
|
|
290
|
+
|
|
291
|
+
def _get_sample_weight(self, X, y, sample_weight=None):
|
|
292
|
+
sample_weight = super()._get_sample_weight(X, y, sample_weight)
|
|
293
|
+
if sample_weight is None:
|
|
294
|
+
return sample_weight
|
|
295
|
+
|
|
296
|
+
if np.any(sample_weight <= 0) and len(np.unique(y[sample_weight > 0])) != len(
|
|
297
|
+
self.classes_
|
|
298
|
+
):
|
|
299
|
+
raise ValueError(
|
|
300
|
+
"Invalid input - all samples with positive weights "
|
|
301
|
+
"belong to the same class"
|
|
302
|
+
if sklearn_check_version("1.2")
|
|
303
|
+
else "Invalid input - all samples with positive weights "
|
|
304
|
+
"have the same label."
|
|
305
|
+
)
|
|
306
|
+
return sample_weight
|
|
307
|
+
|
|
308
|
+
def _onedal_fit(self, X, y, sample_weight=None, queue=None):
|
|
309
|
+
X, _, weights = self._onedal_fit_checks(X, y, sample_weight)
|
|
310
|
+
onedal_params = {
|
|
311
|
+
"C": self.C,
|
|
312
|
+
"kernel": self.kernel,
|
|
313
|
+
"degree": self.degree,
|
|
314
|
+
"gamma": self._compute_gamma_sigma(X),
|
|
315
|
+
"coef0": self.coef0,
|
|
316
|
+
"tol": self.tol,
|
|
317
|
+
"shrinking": self.shrinking,
|
|
318
|
+
"cache_size": self.cache_size,
|
|
319
|
+
"max_iter": self.max_iter,
|
|
320
|
+
"class_weight": self.class_weight,
|
|
321
|
+
"break_ties": self.break_ties,
|
|
322
|
+
"decision_function_shape": self.decision_function_shape,
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
self._onedal_estimator = onedal_SVC(**onedal_params)
|
|
326
|
+
self._onedal_estimator.fit(X, y, weights, queue=queue)
|
|
327
|
+
|
|
328
|
+
if self.probability:
|
|
329
|
+
self._fit_proba(
|
|
330
|
+
X,
|
|
331
|
+
y,
|
|
332
|
+
sample_weight=sample_weight,
|
|
333
|
+
queue=queue,
|
|
334
|
+
)
|
|
335
|
+
|
|
336
|
+
self._save_attributes()
|
|
337
|
+
|
|
338
|
+
def _onedal_predict(self, X, queue=None):
|
|
339
|
+
if sklearn_check_version("1.0"):
|
|
340
|
+
X = validate_data(
|
|
341
|
+
self,
|
|
342
|
+
X,
|
|
343
|
+
dtype=[np.float64, np.float32],
|
|
344
|
+
force_all_finite=False,
|
|
345
|
+
ensure_2d=False,
|
|
346
|
+
accept_sparse="csr",
|
|
347
|
+
reset=False,
|
|
348
|
+
)
|
|
349
|
+
else:
|
|
350
|
+
X = check_array(
|
|
351
|
+
X,
|
|
352
|
+
dtype=[np.float64, np.float32],
|
|
353
|
+
force_all_finite=False,
|
|
354
|
+
accept_sparse="csr",
|
|
355
|
+
)
|
|
356
|
+
return self._onedal_estimator.predict(X, queue=queue)
|
|
357
|
+
|
|
358
|
+
def _onedal_predict_proba(self, X, queue=None):
|
|
359
|
+
if getattr(self, "clf_prob", None) is None:
|
|
360
|
+
raise NotFittedError(
|
|
361
|
+
"predict_proba is not available when fitted with probability=False"
|
|
362
|
+
)
|
|
363
|
+
from .._config import config_context, get_config
|
|
364
|
+
|
|
365
|
+
# We use stock metaestimators below, so the only way
|
|
366
|
+
# to pass a queue is using config_context.
|
|
367
|
+
cfg = get_config()
|
|
368
|
+
cfg["target_offload"] = queue
|
|
369
|
+
with config_context(**cfg):
|
|
370
|
+
return self.clf_prob.predict_proba(X)
|
|
371
|
+
|
|
372
|
+
def _onedal_decision_function(self, X, queue=None):
|
|
373
|
+
if sklearn_check_version("1.0"):
|
|
374
|
+
X = validate_data(
|
|
375
|
+
self,
|
|
376
|
+
X,
|
|
377
|
+
dtype=[np.float64, np.float32],
|
|
378
|
+
force_all_finite=False,
|
|
379
|
+
accept_sparse="csr",
|
|
380
|
+
reset=False,
|
|
381
|
+
)
|
|
382
|
+
else:
|
|
383
|
+
X = check_array(
|
|
384
|
+
X,
|
|
385
|
+
dtype=[np.float64, np.float32],
|
|
386
|
+
force_all_finite=False,
|
|
387
|
+
accept_sparse="csr",
|
|
388
|
+
)
|
|
389
|
+
return self._onedal_estimator.decision_function(X, queue=queue)
|
|
390
|
+
|
|
391
|
+
def _onedal_score(self, X, y, sample_weight=None, queue=None):
|
|
392
|
+
return accuracy_score(
|
|
393
|
+
y, self._onedal_predict(X, queue=queue), sample_weight=sample_weight
|
|
394
|
+
)
|
|
395
|
+
|
|
396
|
+
fit.__doc__ = _sklearn_SVC.fit.__doc__
|
|
397
|
+
predict.__doc__ = _sklearn_SVC.predict.__doc__
|
|
398
|
+
decision_function.__doc__ = _sklearn_SVC.decision_function.__doc__
|
|
399
|
+
score.__doc__ = _sklearn_SVC.score.__doc__
|
sklearnex/svm/svr.py
ADDED
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
# ==============================================================================
|
|
2
|
+
# Copyright 2021 Intel Corporation
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
# ==============================================================================
|
|
16
|
+
|
|
17
|
+
import numpy as np
|
|
18
|
+
from sklearn.svm import SVR as _sklearn_SVR
|
|
19
|
+
from sklearn.utils.validation import _deprecate_positional_args, check_is_fitted
|
|
20
|
+
|
|
21
|
+
from daal4py.sklearn._n_jobs_support import control_n_jobs
|
|
22
|
+
from daal4py.sklearn._utils import sklearn_check_version
|
|
23
|
+
from onedal.svm import SVR as onedal_SVR
|
|
24
|
+
|
|
25
|
+
from .._device_offload import dispatch, wrap_output_data
|
|
26
|
+
from ._common import BaseSVR
|
|
27
|
+
|
|
28
|
+
if sklearn_check_version("1.6"):
|
|
29
|
+
from sklearn.utils.validation import validate_data
|
|
30
|
+
else:
|
|
31
|
+
validate_data = BaseSVR._validate_data
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
@control_n_jobs(decorated_methods=["fit", "predict", "score"])
|
|
35
|
+
class SVR(_sklearn_SVR, BaseSVR):
|
|
36
|
+
__doc__ = _sklearn_SVR.__doc__
|
|
37
|
+
|
|
38
|
+
if sklearn_check_version("1.2"):
|
|
39
|
+
_parameter_constraints: dict = {**_sklearn_SVR._parameter_constraints}
|
|
40
|
+
|
|
41
|
+
@_deprecate_positional_args
|
|
42
|
+
def __init__(
|
|
43
|
+
self,
|
|
44
|
+
*,
|
|
45
|
+
kernel="rbf",
|
|
46
|
+
degree=3,
|
|
47
|
+
gamma="scale",
|
|
48
|
+
coef0=0.0,
|
|
49
|
+
tol=1e-3,
|
|
50
|
+
C=1.0,
|
|
51
|
+
epsilon=0.1,
|
|
52
|
+
shrinking=True,
|
|
53
|
+
cache_size=200,
|
|
54
|
+
verbose=False,
|
|
55
|
+
max_iter=-1,
|
|
56
|
+
):
|
|
57
|
+
super().__init__(
|
|
58
|
+
kernel=kernel,
|
|
59
|
+
degree=degree,
|
|
60
|
+
gamma=gamma,
|
|
61
|
+
coef0=coef0,
|
|
62
|
+
tol=tol,
|
|
63
|
+
C=C,
|
|
64
|
+
epsilon=epsilon,
|
|
65
|
+
shrinking=shrinking,
|
|
66
|
+
cache_size=cache_size,
|
|
67
|
+
verbose=verbose,
|
|
68
|
+
max_iter=max_iter,
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
def fit(self, X, y, sample_weight=None):
|
|
72
|
+
if sklearn_check_version("1.2"):
|
|
73
|
+
self._validate_params()
|
|
74
|
+
elif self.C <= 0:
|
|
75
|
+
# else if added to correct issues with
|
|
76
|
+
# sklearn tests:
|
|
77
|
+
# svm/tests/test_sparse.py::test_error
|
|
78
|
+
# svm/tests/test_svm.py::test_bad_input
|
|
79
|
+
# for sklearn versions < 1.2 (i.e. without
|
|
80
|
+
# validate_params parameter checking)
|
|
81
|
+
# Without this, a segmentation fault with
|
|
82
|
+
# Windows fatal exception: access violation
|
|
83
|
+
# occurs
|
|
84
|
+
raise ValueError("C <= 0")
|
|
85
|
+
dispatch(
|
|
86
|
+
self,
|
|
87
|
+
"fit",
|
|
88
|
+
{
|
|
89
|
+
"onedal": self.__class__._onedal_fit,
|
|
90
|
+
"sklearn": _sklearn_SVR.fit,
|
|
91
|
+
},
|
|
92
|
+
X,
|
|
93
|
+
y,
|
|
94
|
+
sample_weight=sample_weight,
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
return self
|
|
98
|
+
|
|
99
|
+
@wrap_output_data
|
|
100
|
+
def predict(self, X):
|
|
101
|
+
check_is_fitted(self)
|
|
102
|
+
return dispatch(
|
|
103
|
+
self,
|
|
104
|
+
"predict",
|
|
105
|
+
{
|
|
106
|
+
"onedal": self.__class__._onedal_predict,
|
|
107
|
+
"sklearn": _sklearn_SVR.predict,
|
|
108
|
+
},
|
|
109
|
+
X,
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
@wrap_output_data
|
|
113
|
+
def score(self, X, y, sample_weight=None):
|
|
114
|
+
check_is_fitted(self)
|
|
115
|
+
return dispatch(
|
|
116
|
+
self,
|
|
117
|
+
"score",
|
|
118
|
+
{
|
|
119
|
+
"onedal": self.__class__._onedal_score,
|
|
120
|
+
"sklearn": _sklearn_SVR.score,
|
|
121
|
+
},
|
|
122
|
+
X,
|
|
123
|
+
y,
|
|
124
|
+
sample_weight=sample_weight,
|
|
125
|
+
)
|
|
126
|
+
|
|
127
|
+
def _onedal_fit(self, X, y, sample_weight=None, queue=None):
|
|
128
|
+
X, _, sample_weight = self._onedal_fit_checks(X, y, sample_weight)
|
|
129
|
+
onedal_params = {
|
|
130
|
+
"C": self.C,
|
|
131
|
+
"epsilon": self.epsilon,
|
|
132
|
+
"kernel": self.kernel,
|
|
133
|
+
"degree": self.degree,
|
|
134
|
+
"gamma": self._compute_gamma_sigma(X),
|
|
135
|
+
"coef0": self.coef0,
|
|
136
|
+
"tol": self.tol,
|
|
137
|
+
"shrinking": self.shrinking,
|
|
138
|
+
"cache_size": self.cache_size,
|
|
139
|
+
"max_iter": self.max_iter,
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
self._onedal_estimator = onedal_SVR(**onedal_params)
|
|
143
|
+
self._onedal_estimator.fit(X, y, sample_weight, queue=queue)
|
|
144
|
+
self._save_attributes()
|
|
145
|
+
|
|
146
|
+
def _onedal_predict(self, X, queue=None):
|
|
147
|
+
if sklearn_check_version("1.0"):
|
|
148
|
+
X = validate_data(
|
|
149
|
+
self,
|
|
150
|
+
X,
|
|
151
|
+
dtype=[np.float64, np.float32],
|
|
152
|
+
force_all_finite=False,
|
|
153
|
+
accept_sparse="csr",
|
|
154
|
+
reset=False,
|
|
155
|
+
)
|
|
156
|
+
else:
|
|
157
|
+
X = check_array(
|
|
158
|
+
X,
|
|
159
|
+
dtype=[np.float64, np.float32],
|
|
160
|
+
force_all_finite=False,
|
|
161
|
+
accept_sparse="csr",
|
|
162
|
+
)
|
|
163
|
+
return self._onedal_estimator.predict(X, queue=queue)
|
|
164
|
+
|
|
165
|
+
fit.__doc__ = _sklearn_SVR.fit.__doc__
|
|
166
|
+
predict.__doc__ = _sklearn_SVR.predict.__doc__
|
|
167
|
+
score.__doc__ = _sklearn_SVR.score.__doc__
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# ===============================================================================
|
|
2
|
+
# Copyright 2021 Intel Corporation
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
# ===============================================================================
|
|
16
|
+
|
|
17
|
+
import numpy as np
|
|
18
|
+
import pytest
|
|
19
|
+
from numpy.testing import assert_allclose
|
|
20
|
+
|
|
21
|
+
from onedal.tests.utils._dataframes_support import (
|
|
22
|
+
_as_numpy,
|
|
23
|
+
_convert_to_dataframe,
|
|
24
|
+
get_dataframes_and_queues,
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
@pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
|
|
29
|
+
def test_sklearnex_import_svc(dataframe, queue):
|
|
30
|
+
if queue and queue.sycl_device.is_gpu:
|
|
31
|
+
pytest.skip("SVC fit for the GPU sycl_queue is buggy.")
|
|
32
|
+
from sklearnex.svm import SVC
|
|
33
|
+
|
|
34
|
+
X = np.array([[-2, -1], [-1, -1], [-1, -2], [+1, +1], [+1, +2], [+2, +1]])
|
|
35
|
+
y = np.array([1, 1, 1, 2, 2, 2])
|
|
36
|
+
X = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
|
|
37
|
+
y = _convert_to_dataframe(y, sycl_queue=queue, target_df=dataframe)
|
|
38
|
+
svc = SVC(kernel="linear").fit(X, y)
|
|
39
|
+
assert "daal4py" in svc.__module__ or "sklearnex" in svc.__module__
|
|
40
|
+
assert_allclose(_as_numpy(svc.dual_coef_), [[-0.25, 0.25]])
|
|
41
|
+
assert_allclose(_as_numpy(svc.support_), [1, 3])
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
@pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
|
|
45
|
+
def test_sklearnex_import_nusvc(dataframe, queue):
|
|
46
|
+
if queue and queue.sycl_device.is_gpu:
|
|
47
|
+
pytest.skip("NuSVC fit for the GPU sycl_queue is buggy.")
|
|
48
|
+
from sklearnex.svm import NuSVC
|
|
49
|
+
|
|
50
|
+
X = np.array([[-2, -1], [-1, -1], [-1, -2], [+1, +1], [+1, +2], [+2, +1]])
|
|
51
|
+
y = np.array([1, 1, 1, 2, 2, 2])
|
|
52
|
+
X = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
|
|
53
|
+
y = _convert_to_dataframe(y, sycl_queue=queue, target_df=dataframe)
|
|
54
|
+
svc = NuSVC(kernel="linear").fit(X, y)
|
|
55
|
+
assert "daal4py" in svc.__module__ or "sklearnex" in svc.__module__
|
|
56
|
+
assert_allclose(
|
|
57
|
+
_as_numpy(svc.dual_coef_), [[-0.04761905, -0.0952381, 0.0952381, 0.04761905]]
|
|
58
|
+
)
|
|
59
|
+
assert_allclose(_as_numpy(svc.support_), [0, 1, 3, 4])
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
@pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
|
|
63
|
+
def test_sklearnex_import_svr(dataframe, queue):
|
|
64
|
+
if queue and queue.sycl_device.is_gpu:
|
|
65
|
+
pytest.skip("SVR fit for the GPU sycl_queue is buggy.")
|
|
66
|
+
from sklearnex.svm import SVR
|
|
67
|
+
|
|
68
|
+
X = np.array([[-2, -1], [-1, -1], [-1, -2], [+1, +1], [+1, +2], [+2, +1]])
|
|
69
|
+
y = np.array([1, 1, 1, 2, 2, 2])
|
|
70
|
+
X = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
|
|
71
|
+
y = _convert_to_dataframe(y, sycl_queue=queue, target_df=dataframe)
|
|
72
|
+
svc = SVR(kernel="linear").fit(X, y)
|
|
73
|
+
assert "daal4py" in svc.__module__ or "sklearnex" in svc.__module__
|
|
74
|
+
assert_allclose(_as_numpy(svc.dual_coef_), [[-0.1, 0.1]])
|
|
75
|
+
assert_allclose(_as_numpy(svc.support_), [1, 3])
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
@pytest.mark.parametrize("dataframe,queue", get_dataframes_and_queues())
|
|
79
|
+
def test_sklearnex_import_nusvr(dataframe, queue):
|
|
80
|
+
if queue and queue.sycl_device.is_gpu:
|
|
81
|
+
pytest.skip("NuSVR fit for the GPU sycl_queue is buggy.")
|
|
82
|
+
from sklearnex.svm import NuSVR
|
|
83
|
+
|
|
84
|
+
X = np.array([[-2, -1], [-1, -1], [-1, -2], [+1, +1], [+1, +2], [+2, +1]])
|
|
85
|
+
y = np.array([1, 1, 1, 2, 2, 2])
|
|
86
|
+
X = _convert_to_dataframe(X, sycl_queue=queue, target_df=dataframe)
|
|
87
|
+
y = _convert_to_dataframe(y, sycl_queue=queue, target_df=dataframe)
|
|
88
|
+
svc = NuSVR(kernel="linear", nu=0.9).fit(X, y)
|
|
89
|
+
assert "daal4py" in svc.__module__ or "sklearnex" in svc.__module__
|
|
90
|
+
assert_allclose(
|
|
91
|
+
_as_numpy(svc.dual_coef_), [[-1.0, 0.611111, 1.0, -0.611111]], rtol=1e-3
|
|
92
|
+
)
|
|
93
|
+
assert_allclose(_as_numpy(svc.support_), [1, 2, 3, 5])
|