mojolearn.KNeighborsClassifier#
- class mojolearn.KNeighborsClassifier(n_neighbors=5, query_tile=0, *, weights='uniform', metric='euclidean', algorithm='brute', p=2)#
Classifier that votes among the k nearest training points.
For each query, the classes of its
n_neighborsnearest training points are counted and the most frequent wins; a tie goes to the lowest class in sorted order, as in cuML and scikit-learn. Withweights='distance'each neighbor’s vote is weighted by1 / distance. Neighbor search is exact brute force, as inNearestNeighbors.- Parameters:
n_neighbors (int, default 5) – Number of neighbors that vote. Must be between 1 and the number of training samples.
query_tile (int, default 0) – As in
NearestNeighbors: memory use only, never the answer.weights ({‘uniform’, ‘distance’} or None, default ‘uniform’) – ‘uniform’ (or
None) gives every neighbor one vote. ‘distance’ follows scikit-learn: weight1 / d, and when a query has neighbors at distance exactly zero, those neighbors get weight 1 and the others in that row get 0. A callable raisesValueError. ‘distance’ withmetric='inner_product'raisesValueError(an inner product is a similarity, not a distance).metric (str, default ‘euclidean’) – As in
NearestNeighborswithalgorithm='brute'.algorithm ({‘brute’, ‘auto’}, default ‘brute’) – Exact brute force. ‘rbc’ raises
ValueErrorhere; useNearestNeighbors(algorithm='rbc').kneighborsand vote on the result instead.p (float, default 2) – As in
NearestNeighbors.numeric_mode ({‘identical’, ‘fast’}, optional) – As in
NearestNeighbors. ‘fast’ is available on Apple GPUs only.
- Variables:
classes_ (list of int, or list of lists for a 2-D
y) – Sorted unique labels per output, as Python ints (a list, not an ndarray).outputs_2d_ (bool) – Whether
yhad more than one output column.n_samples_fit_ (int) – Number of training samples.
n_features_in_ (int) – Number of features seen at
fit.used_query_tile_ (int) – Query batch size the last prediction ran with.
Examples
>>> import numpy as np, mojolearn >>> rng = np.random.default_rng(0) >>> X = rng.random((1000, 8), dtype=np.float32) >>> y = (X[:, 0] > 0.5).astype(np.int32) >>> clf = mojolearn.KNeighborsClassifier(n_neighbors=5).fit(X, y) >>> labels = clf.predict(X[:10]) >>> proba = clf.predict_proba(X[:10])
Methods
fit(X, y)Store the training points and their labels.
get_params([deep])kneighbors(X[, n_neighbors, return_distance])Find the nearest fitted points to each query, nearest first.
load(path)Load a model written by
save.The numeric mode this estimator runs in.
predict(X)Predict the class of each query by neighbor vote.
Return each query's vote fractions per class.
save(path)Save the fitted model to an
.npzfile.set_params(**params)Set constructor parameters.
The GPU backend this estimator runs on.
Attributes
Sorted unique labels seen at
fit, as a list of ints; a list of such lists for a 2-Dy.- save(path)#
Save the fitted model to an
.npzfile.The file holds the training points, labels, classes and parameters.
mojolearn.host_model(path)can predict from it on a CPU with no GPU.- Parameters:
path (str or path-like) – Destination file.
- Raises:
RuntimeError – If the model is not fitted.
- classmethod load(path)#
Load a model written by
save.classes_is rebuilt from the saved labels asfitbuilds it; a file whose stored classes disagree with its labels raisesValueError.- Parameters:
path (str or path-like) – File written by
save.- Returns:
KNeighborsClassifier – A fitted model, ready for
predict.
- fit(X, y)#
Store the training points and their labels.
- Parameters:
X (array-like of shape (n_samples, n_features)) – Training points; converted to float32.
y (array-like of int, shape (n_samples,) or (n_samples, n_outputs)) – Integer class labels of any values (negative values and gaps are fine) within the int32 range. A 2-D
yvotes each column separately. Float labels raiseValueError; cast them to int first (cuML requires int32 labels too).
- Returns:
self
- property classes_#
Sorted unique labels seen at
fit, as a list of ints; a list of such lists for a 2-Dy.
- predict(X)#
Predict the class of each query by neighbor vote.
- Parameters:
X (array-like of shape (n_queries, n_features)) – Query points; converted to float32.
- Returns:
Array of int64, shape (n_queries,) or (n_queries, n_outputs) – The voted labels, in the original label values; 2-D when
ywas 2-D.- Raises:
ValueError – If the model is not fitted,
Xhas the wrong number of features, orn_neighborsexceeds the number of training samples.
- predict_proba(X)#
Return each query’s vote fractions per class.
- Parameters:
X (array-like of shape (n_queries, n_features)) – Query points; converted to float32.
- Returns:
Array of float32, shape (n_queries, n_classes), or a list of them – Columns follow
classes_order. For a 2-Dy, one array per output, as cuML and scikit-learn return it.
- kneighbors(X, n_neighbors=None, return_distance=True)#
Find the nearest fitted points to each query, nearest first.
Distances are the chosen metric’s (‘euclidean’ returns true, not squared, distances). Ties in distance are broken by the lower index, matching scikit-learn’s layout and ordering.
On a GPU the fitted points are copied to the device at the first call after
fitand reused by later calls. Changing the array passed tofitin place after that is not seen; callfitagain instead (as with cuML, whosefitcopies the data to the device).- Parameters:
X (array-like of shape (n_queries, n_features)) – Query points; converted to float32.
n_neighbors (int, optional) – Neighbors per query; defaults to the constructor’s
n_neighbors. Must be between 1 andn_samples_fit_.return_distance (bool, default True) – Return the distances as well as the indices.
- Returns:
distances (Array of shape (n_queries, n_neighbors), float32) – Returned only when
return_distanceis True.indices (Array of shape (n_queries, n_neighbors), int64) – Row indices into the fitted data.
- Raises:
ValueError – If the model is not fitted,
Xhas the wrong number of features, orn_neighborsis out of range.
- numeric_mode_used()#
The numeric mode this estimator runs in.
- Returns:
str –
'identical'or'fast', read from the compiled binary the estimator uses, not from the argument it was given.
- set_params(**params)#
Set constructor parameters. The estimator is rebuilt through its constructor, so every constructor check runs again and any fitted state is dropped, as a new setting invalidates it.
- vendor_used()#
The GPU backend this estimator runs on.
- Returns:
str –
'metal','cuda'or'hip', read from the compiled binary the estimator uses.