K-Nearest Neighbors (KNN)
Explora los K-vecinos más cercanos (KNN). Aprende cómo funciona este algoritmo de aprendizaje supervisado para clasificación y regresión, su uso en búsqueda visual y su integración con Ultralytics YOLO26.
K-Nearest Neighbors (KNN) es un algoritmo robusto e intuitivo utilizado en el campo del aprendizaje supervisado tanto para tareas de clasificación como de regresión. Destacado por su sencillez, KNN suele clasificarse como un "aprendiz vago" (lazy learner) porque no construye un modelo ni aprende parámetros durante una fase de entrenamiento. En su lugar, memoriza todo el conjunto de datos de entrenamiento y realiza cálculos únicamente cuando se solicita una predicción. El principio fundamental del algoritmo se basa en la similitud de características: asume que los puntos de datos con atributos similares existen muy cerca unos de otros dentro de un espacio de características multidimensional.
Link to this sectionCómo funciona el algoritmo#
El mecanismo de K-Nearest Neighbors se basa en cálculos de distancia. Cuando se introduce un nuevo punto de consulta, el algoritmo busca en el conjunto de datos almacenado para encontrar los 'K' números de muestras de entrenamiento más cercanas a la nueva entrada.
-
Medición de distancia: El sistema calcula la distancia entre el punto de consulta y cualquier otro punto de la base de datos. La métrica más común es la distancia euclidiana, que mide la distancia en línea recta entre puntos. Dependiendo del tipo de datos, se pueden utilizar otras métricas como la distancia de Manhattan (geometría de taxista) o la distancia de Minkowski.
-
Selección de vecinos: Después de calcular las distancias, el algoritmo las ordena e identifica las 'K' entradas más cercanas.
-
Toma de decisiones: - Para clasificación: El algoritmo utiliza un sistema de "votación mayoritaria". La etiqueta de clase que aparece con mayor frecuencia entre los K vecinos se asigna al punto de consulta. Esto se utiliza ampliamente en tareas básicas de clasificación de imágenes. - Para regresión: La predicción se calcula promediando los valores de los K vecinos más cercanos para estimar una variable continua.
Link to this sectionElegir el 'K' correcto#
Seleccionar el valor óptimo para 'K' es un paso crítico en el ajuste de hiperparámetros. La elección de K influye significativamente en el rendimiento del modelo y en su capacidad para generalizar con datos nuevos.
- Valor de K bajo: Un K pequeño (p. ej., K=1) hace que el modelo sea muy sensible al ruido y a los valores atípicos en los datos, lo que puede provocar sobreajuste.
- Valor de K alto: Un K grande suaviza los límites de decisión, reduciendo el efecto del ruido pero posiblemente difuminando patrones distintos, lo que resulta en un subajuste.
Link to this sectionAplicaciones en el mundo real#
A pesar de su sencillez en comparación con las redes neuronales profundas, KNN sigue siendo muy relevante en la IA moderna, especialmente cuando se combina con técnicas avanzadas de extracción de características.
- Sistemas de recomendación: KNN facilita el filtrado colaborativo en streaming multimedia y comercio electrónico. Al identificar usuarios con historiales de visualización o comportamientos de compra similares (vecinos), las plataformas pueden sugerir productos que es probable que gusten a un usuario basándose en las preferencias de sus "vecinos más cercanos".
- Detección de anomalías: En ciberseguridad y finanzas, KNN se utiliza para la detección de anomalías. Las transacciones o actividades de red se mapean en un espacio de características; cualquier nuevo punto de datos que caiga lejos de los grupos densos de actividad "normal" se marca como posible fraude o brecha de seguridad.
- Búsqueda visual: Los motores de búsqueda vectorial modernos suelen basarse en algoritmos de Vecino más cercano aproximado (ANN)—una variante optimizada de KNN—para recuperar rápidamente imágenes similares basándose en embeddings de alta dimensión generados por modelos como YOLO26.
Link to this sectionDesafíos y consideraciones#
Aunque es eficaz, KNN se enfrenta a la maldición de la dimensionalidad. A medida que aumenta el número de características (dimensiones), los puntos de datos se vuelven dispersos y las métricas de distancia pierden su eficacia. Además, debido a que almacena todos los datos de entrenamiento, KNN puede consumir mucha memoria y sufrir de una alta latencia de inferencia en conjuntos de datos grandes. Para abordar esto, los profesionales suelen preprocesar los datos utilizando técnicas de reducción de dimensionalidad como el Análisis de Componentes Principales (PCA) o utilizan estructuras de datos especializadas como KD-Trees para acelerar la búsqueda. Para el escalado a nivel empresarial de conjuntos de datos y entrenamiento de modelos, utilizar la Plataforma Ultralytics puede ayudarte a gestionar los recursos computacionales necesarios para el preprocesamiento de datos complejos.
Link to this sectionDistinguir KNN de K-Means#
Es importante diferenciar K-Nearest Neighbors del clustering K-Means, ya que sus nombres similares a menudo causan confusión.
- KNN es un algoritmo de aprendizaje supervisado que utiliza datos etiquetados para realizar predicciones.
- K-Means es un algoritmo de aprendizaje no supervisado utilizado para agrupar datos no etiquetados en clústeres basándose en similitudes estructurales.
Link to this sectionEjemplo de implementación#
El siguiente fragmento de código demuestra un flujo de trabajo sencillo de clasificación KNN utilizando la popular biblioteca Scikit-learn. En un contexto de visión artificial, las "características" de entrada normalmente serían extraídas por un modelo de aprendizaje profundo como YOLO26 antes de ser pasadas al clasificador KNN.
from sklearn.neighbors import KNeighborsClassifier
# Simulated feature vectors (e.g., extracted from YOLO26) and labels
# Features: [Size, Redness], Labels: 0=Apple, 1=Orange
features = [[0.8, 0.9], [0.9, 0.8], [0.2, 0.3], [0.3, 0.2]]
labels = [0, 0, 1, 1]
# Initialize KNN with 3 neighbors
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(features, labels)
# Predict the class of a new object [Size=0.85, Redness=0.85]
prediction = knn.predict([[0.85, 0.85]])
print(f"Predicted Class: {prediction[0]} (0=Apple, 1=Orange)")





