Skip to content

Commit 325753c

Browse files
committed
fix: try it again
1 parent 82fc26d commit 325753c

File tree

6 files changed

+31
-110
lines changed

6 files changed

+31
-110
lines changed

onedal/neighbors/neighbors.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,6 @@ def _fit(self, X, y):
269269
return result
270270

271271
def _kneighbors(self, X=None, n_neighbors=None, return_distance=True):
272-
use_raw_input = _get_config().get("use_raw_input", False) is True
273272
n_features = getattr(self, "n_features_in_", None)
274273
shape = getattr(X, "shape", None)
275274
if n_features and shape and len(shape) > 1 and shape[1] != n_features:
@@ -296,8 +295,12 @@ def _kneighbors(self, X=None, n_neighbors=None, return_distance=True):
296295

297296
if X is not None:
298297
query_is_train = False
298+
<<<<<<< HEAD
299299
if not use_raw_input:
300300
X = _check_array(X, accept_sparse="csr", dtype=[np.float64, np.float32])
301+
=======
302+
X = _check_array(X, accept_sparse="csr", dtype=[np.float64, np.float32])
303+
>>>>>>> e003b37f (fix: try it again)
301304
else:
302305
query_is_train = True
303306
X = self._fit_X
@@ -646,6 +649,7 @@ def __init__(
646649
self,
647650
n_neighbors=5,
648651
*,
652+
weights="uniform",
649653
algorithm="auto",
650654
p=2,
651655
metric="minkowski",
@@ -660,7 +664,7 @@ def __init__(
660664
metric_params=metric_params,
661665
**kwargs,
662666
)
663-
self.requires_y = False
667+
self.weights = weights
664668

665669
@bind_default_backend("neighbors.search")
666670
def train(self, *args, **kwargs): ...
@@ -682,9 +686,9 @@ def _onedal_predict(self, model, X, params):
682686
return self.infer(params, model, X)
683687

684688
@supports_queue
685-
def fit(self, X, y=None, queue=None):
689+
def fit(self, X, y, queue=None):
686690
return self._fit(X, y)
687691

688692
@supports_queue
689693
def kneighbors(self, X=None, n_neighbors=None, return_distance=True, queue=None):
690-
return self._kneighbors(X, n_neighbors, return_distance)
694+
return self._kneighbors(X, n_neighbors, return_distance)

sklearnex/neighbors/_lof.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,4 +186,4 @@ def score_samples(self, X):
186186
return -np.mean(lrd_ratios_array, axis=1)
187187

188188
fit.__doc__ = _sklearn_LocalOutlierFactor.fit.__doc__
189-
kneighbors.__doc__ = _sklearn_LocalOutlierFactor.kneighbors.__doc__
189+
kneighbors.__doc__ = _sklearn_LocalOutlierFactor.kneighbors.__doc__

sklearnex/neighbors/common.py

Lines changed: 1 addition & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -35,74 +35,6 @@
3535

3636

3737
class KNeighborsDispatchingBase(oneDALEstimator):
38-
39-
def _parse_auto_method(self, method, n_samples, n_features):
40-
"""Parse auto method selection for neighbors algorithm."""
41-
result_method = method
42-
43-
if method in ["auto", "ball_tree"]:
44-
condition = (
45-
self.n_neighbors is not None and self.n_neighbors >= n_samples // 2
46-
)
47-
if self.metric == "precomputed" or n_features > 15 or condition:
48-
result_method = "brute"
49-
else:
50-
if self.metric == "euclidean":
51-
result_method = "kd_tree"
52-
else:
53-
result_method = "brute"
54-
55-
return result_method
56-
57-
def _get_weights(self, dist, weights):
58-
"""Get weights for neighbors based on distance and weights parameter."""
59-
if weights in (None, "uniform"):
60-
return None
61-
if weights == "distance":
62-
# if user attempts to classify a point that was zero distance from one
63-
# or more training points, those training points are weighted as 1.0
64-
# and the other points as 0.0
65-
if dist.dtype is np.dtype(object):
66-
for point_dist_i, point_dist in enumerate(dist):
67-
# check if point_dist is iterable
68-
# (ex: RadiusNeighborClassifier.predict may set an element of
69-
# dist to 1e-6 to represent an 'outlier')
70-
if hasattr(point_dist, "__contains__") and 0.0 in point_dist:
71-
dist[point_dist_i] = point_dist == 0.0
72-
else:
73-
dist[point_dist_i] = 1.0 / point_dist
74-
else:
75-
with np.errstate(divide="ignore"):
76-
dist = 1.0 / dist
77-
inf_mask = np.isinf(dist)
78-
inf_row = np.any(inf_mask, axis=1)
79-
dist[inf_row] = inf_mask[inf_row]
80-
return dist
81-
elif callable(weights):
82-
return weights(dist)
83-
else:
84-
raise ValueError(
85-
"weights not recognized: should be 'uniform', "
86-
"'distance', or a callable function"
87-
)
88-
89-
def _validate_targets(self, y, dtype):
90-
"""Validate and convert target values."""
91-
from onedal.utils.validation import _column_or_1d
92-
arr = _column_or_1d(y, warn=True)
93-
94-
try:
95-
return arr.astype(dtype, copy=False)
96-
except ValueError:
97-
return arr
98-
99-
def _validate_n_classes(self):
100-
"""Validate that we have at least 2 classes for classification."""
101-
length = 0 if self.classes_ is None else len(self.classes_)
102-
if length < 2:
103-
raise ValueError(
104-
f"The number of classes has to be greater than one; got {length}"
105-
)
10638
def _fit_validation(self, X, y=None):
10739
if sklearn_check_version("1.2"):
10840
self._validate_params()
@@ -378,4 +310,4 @@ def kneighbors_graph(self, X=None, n_neighbors=None, mode="connectivity"):
378310

379311
return kneighbors_graph
380312

381-
kneighbors_graph.__doc__ = KNeighborsMixin.kneighbors_graph.__doc__
313+
kneighbors_graph.__doc__ = KNeighborsMixin.kneighbors_graph.__doc__

sklearnex/neighbors/knn_classification.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
# limitations under the License.
1515
# ===============================================================================
1616

17-
import numpy as np
1817
from sklearn.metrics import accuracy_score
1918
from sklearn.neighbors._classification import (
2019
KNeighborsClassifier as _sklearn_KNeighborsClassifier,
@@ -25,8 +24,6 @@
2524
from daal4py.sklearn._utils import sklearn_check_version
2625
from daal4py.sklearn.utils.validation import get_requires_y_tag
2726
from onedal.neighbors import KNeighborsClassifier as onedal_KNeighborsClassifier
28-
from onedal.utils.validation import _check_X_y, _check_classification_targets, _check_n_features
29-
from onedal.common._estimator_checks import _is_classifier
3027

3128
from .._device_offload import dispatch, wrap_output_data
3229
from ..utils.validation import check_feature_names
@@ -141,23 +138,26 @@ def kneighbors(self, X=None, n_neighbors=None, return_distance=True):
141138
)
142139

143140
def _onedal_fit(self, X, y, queue=None):
141+
<<<<<<< HEAD
142+
=======
143+
# import sys
144+
# print("=" * 50, file=sys.stderr, flush=True)
145+
# print("DEBUG: _onedal_fit called!", file=sys.stderr, flush=True)
146+
# print("=" * 50, file=sys.stderr, flush=True)
147+
>>>>>>> e003b37f (fix: try it again)
144148
onedal_params = {
145149
"n_neighbors": self.n_neighbors,
146150
"weights": self.weights,
147-
"algorithm": self._fit_method, # Use parsed method
151+
"algorithm": self.algorithm,
148152
"metric": self.effective_metric_,
149-
"p": self.effective_metric_params_["p"] if self.effective_metric_params_ else 2,
153+
"p": self.effective_metric_params_["p"],
150154
}
151155

152156
self._onedal_estimator = onedal_KNeighborsClassifier(**onedal_params)
157+
self._onedal_estimator.requires_y = get_requires_y_tag(self)
153158
self._onedal_estimator.effective_metric_ = self.effective_metric_
154159
self._onedal_estimator.effective_metric_params_ = self.effective_metric_params_
155-
self._onedal_estimator._fit_method = self._fit_method
156-
self._onedal_estimator.classes_ = self.classes_
157-
158-
# Prepare y for onedal
159-
fit_y = self._validate_targets(processed_y, X.dtype).reshape((-1, 1))
160-
self._onedal_estimator.fit(X, fit_y, queue=queue)
160+
self._onedal_estimator.fit(X, y, queue=queue)
161161

162162
self._save_attributes()
163163

@@ -193,4 +193,4 @@ def _save_attributes(self):
193193
predict.__doc__ = _sklearn_KNeighborsClassifier.predict.__doc__
194194
predict_proba.__doc__ = _sklearn_KNeighborsClassifier.predict_proba.__doc__
195195
score.__doc__ = _sklearn_KNeighborsClassifier.score.__doc__
196-
kneighbors.__doc__ = _sklearn_KNeighborsClassifier.kneighbors.__doc__
196+
kneighbors.__doc__ = _sklearn_KNeighborsClassifier.kneighbors.__doc__

sklearnex/neighbors/knn_regression.py

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
# limitations under the License.
1515
# ==============================================================================
1616

17-
import numpy as np
1817
from sklearn.metrics import r2_score
1918
from sklearn.neighbors._regression import (
2019
KNeighborsRegressor as _sklearn_KNeighborsRegressor,
@@ -25,8 +24,6 @@
2524
from daal4py.sklearn._utils import sklearn_check_version
2625
from daal4py.sklearn.utils.validation import get_requires_y_tag
2726
from onedal.neighbors import KNeighborsRegressor as onedal_KNeighborsRegressor
28-
from onedal.utils.validation import _check_X_y, _check_n_features
29-
from onedal.common._estimator_checks import _is_regressor
3027

3128
from .._device_offload import dispatch, wrap_output_data
3229
from ..utils.validation import check_feature_names
@@ -128,23 +125,16 @@ def _onedal_fit(self, X, y, queue=None):
128125
onedal_params = {
129126
"n_neighbors": self.n_neighbors,
130127
"weights": self.weights,
131-
"algorithm": self._fit_method, # Use parsed method
128+
"algorithm": self.algorithm,
132129
"metric": self.effective_metric_,
133-
"p": self.effective_metric_params_["p"] if self.effective_metric_params_ else 2,
130+
"p": self.effective_metric_params_["p"],
134131
}
135132

136133
self._onedal_estimator = onedal_KNeighborsRegressor(**onedal_params)
134+
self._onedal_estimator.requires_y = get_requires_y_tag(self)
137135
self._onedal_estimator.effective_metric_ = self.effective_metric_
138136
self._onedal_estimator.effective_metric_params_ = self.effective_metric_params_
139-
self._onedal_estimator._fit_method = self._fit_method
140-
141-
# For regression, prepare y data
142-
fit_y = self._validate_targets(y, X.dtype).reshape((-1, 1))
143-
self._onedal_estimator.fit(X, fit_y, queue=queue)
144-
145-
# Reshape y back if needed
146-
if self._shape is not None:
147-
self._y = np.reshape(y, self._shape)
137+
self._onedal_estimator.fit(X, y, queue=queue)
148138

149139
self._save_attributes()
150140

@@ -174,4 +164,4 @@ def _save_attributes(self):
174164
fit.__doc__ = _sklearn_KNeighborsRegressor.__doc__
175165
predict.__doc__ = _sklearn_KNeighborsRegressor.predict.__doc__
176166
kneighbors.__doc__ = _sklearn_KNeighborsRegressor.kneighbors.__doc__
177-
score.__doc__ = _sklearn_KNeighborsRegressor.score.__doc__
167+
score.__doc__ = _sklearn_KNeighborsRegressor.score.__doc__

sklearnex/neighbors/knn_unsupervised.py

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,13 @@
1414
# limitations under the License.
1515
# ===============================================================================
1616

17-
import numpy as np
1817
from sklearn.neighbors._unsupervised import NearestNeighbors as _sklearn_NearestNeighbors
1918
from sklearn.utils.validation import _deprecate_positional_args, check_is_fitted
2019

2120
from daal4py.sklearn._n_jobs_support import control_n_jobs
2221
from daal4py.sklearn._utils import sklearn_check_version
2322
from daal4py.sklearn.utils.validation import get_requires_y_tag
2423
from onedal.neighbors import NearestNeighbors as onedal_NearestNeighbors
25-
from onedal.utils.validation import _check_array, _check_n_features
2624

2725
from .._device_offload import dispatch, wrap_output_data
2826
from ..utils.validation import check_feature_names
@@ -133,18 +131,15 @@ def radius_neighbors_graph(
133131
def _onedal_fit(self, X, y=None, queue=None):
134132
onedal_params = {
135133
"n_neighbors": self.n_neighbors,
136-
"algorithm": self._fit_method, # Use parsed method
134+
"algorithm": self.algorithm,
137135
"metric": self.effective_metric_,
138-
"p": self.effective_metric_params_["p"] if self.effective_metric_params_ else 2,
136+
"p": self.effective_metric_params_["p"],
139137
}
140138

141139
self._onedal_estimator = onedal_NearestNeighbors(**onedal_params)
140+
self._onedal_estimator.requires_y = get_requires_y_tag(self)
142141
self._onedal_estimator.effective_metric_ = self.effective_metric_
143142
self._onedal_estimator.effective_metric_params_ = self.effective_metric_params_
144-
self._onedal_estimator._fit_method = self._fit_method
145-
self._onedal_estimator.fit(X, y, queue=queue)
146-
147-
self._save_attributes()
148143
self._onedal_estimator.fit(X, y, queue=queue)
149144

150145
self._save_attributes()
@@ -172,4 +167,4 @@ def _save_attributes(self):
172167
radius_neighbors.__doc__ = _sklearn_NearestNeighbors.radius_neighbors.__doc__
173168
radius_neighbors_graph.__doc__ = (
174169
_sklearn_NearestNeighbors.radius_neighbors_graph.__doc__
175-
)
170+
)

0 commit comments

Comments
 (0)