KNN and PyTorch
PyTorch supplies tensor operations, automatic differentiation, and neural-network training primitives. It does not provide a high-level K-nearest-neighbors classifier or regressor comparable to scikit-learn's KNeighborsClassifier and KNeighborsRegressor.
Why the previous “PyTorch KNN” abstraction was removed
A hand-written loop that subtracts every query from every training tensor, sorts all distances, and takes a majority vote demonstrates tensor arithmetic—not a production KNN estimator. It omits important behavior such as:
- validated distance metrics and deterministic tie behavior;
- efficient neighbor-search strategies and memory controls;
- estimator-compatible preprocessing, cross-validation, and hyperparameter search;
- sparse-input behavior, distance weighting, and regression variants;
- fitted metadata and input validation.
Presenting that loop as “training KNN with PyTorch” is also misleading: ordinary KNN is instance-based and has no gradient-trained parameter vector.
Recommended workflow
Use scikit-learn for classical KNN on tabular feature matrices. Put StandardScaler and KNeighborsClassifier in one Pipeline, tune , metric, and weights only on training folds, and evaluate once on an isolated test set.
PyTorch can still produce the feature representation. For example, a neural encoder may transform images into embeddings; detach those embeddings, split them with the same entity-aware boundaries as the source data, and fit a neighbor index on training embeddings only. Never fit the encoder or choose using test labels.
For very large embedding collections, use a dedicated exact or approximate nearest-neighbor system whose recall, latency, update, and memory trade-offs match the deployment. That is a retrieval-system decision, not a reason to reimplement KNN with autograd tensors.
What to retain
- Feature scaling and the distance metric jointly define “near.”
- KNN can model irregular local boundaries; it does not inherently struggle with nonlinearity.
- Prediction, rather than fitting, is usually the expensive phase.
- PyTorch is appropriate for learned representations, while a neighbor library should own the search and voting semantics.