K-Nearest Neighbors (KNN)
Explora los vecinos más cercanos (KNN). Aprende cómo funciona este algoritmo de aprendizaje supervisado para la clasificación y la regresión, su uso en la búsqueda visual y su integración con Ultralytics YOLO26.
Vecinos más cercanos (KNN) es un algoritmo robusto e intuitivo utilizado en el campo del aprendizaje supervisado tanto para tareas de clasificación como de regresión. Debido a su sencillez, KNN suele clasificarse como un «aprendiz perezoso», ya que no crea un modelo ni aprende parámetros durante la 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 se encuentran próximos entre sí dentro de un espacio de características multidimensional.
Cómo funciona el algoritmo#
El mecanismo de Vecinos más cercanos 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' ejemplos de entrenamiento más cercanos a la nueva entrada.
-
Medición de la distancia: El sistema calcula la distancia entre el punto de consulta y todos los demás puntos de la base de datos. La métrica más habitual es la distancia euclídea, que mide la distancia en línea recta entre los puntos. También pueden utilizarse otras métricas, como la distancia de Manhattan (geometría del taxi) o la distancia de Minkowski, según el tipo de datos.
-
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.
Elegir la 'K' adecuada#
Seleccionar el valor óptimo de 'K' es un paso fundamental en el ajuste de hiperparámetros. La elección de K influye considerablemente en el rendimiento del modelo y en su capacidad para generalizar a datos nuevos.
- Valor bajo de K: Una K pequeña (por ejemplo, K=1) hace que el modelo sea muy sensible al ruido y a los valores atípicos de los datos, lo que puede provocar sobreajuste.
- Valor alto de K: Una K grande suaviza los límites de decisión, reduciendo el efecto del ruido, pero puede difuminar patrones diferenciados, lo que da lugar a un subajuste.
Aplicaciones 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 servicios de streaming y comercio electrónico. Al identificar a usuarios con historiales de visualización o comportamientos de compra similares (vecinos), las plataformas pueden sugerir productos que probablemente 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 representan en un espacio de características; cualquier nuevo punto de datos que se encuentre lejos de las agrupaciones densas de actividad «normal» se marca como posible fraude o brecha de seguridad.
- Búsqueda visual: Los motores modernos de búsqueda vectorial suelen basarse en algoritmos de Vecinos más cercanos aproximados (ANN), una variación optimizada de KNN, para recuperar rápidamente imágenes similares a partir de embeddings de alta dimensionalidad generados por modelos como YOLO26.
Desafíos y aspectos que debes tener en cuenta#
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 eficacia. Además, como almacena todos los datos de entrenamiento, KNN puede consumir mucha memoria y sufrir una latencia de inferencia elevada en conjuntos de datos grandes. Para solucionar este problema, los profesionales suelen preprocesar los datos mediante técnicas de reducción de la dimensionalidad, como el análisis de componentes principales (PCA), o utilizar estructuras de datos especializadas, como los árboles KD, para acelerar la búsqueda. Para escalar conjuntos de datos y entrenamientos de modelos a nivel empresarial, utilizar la Ultralytics Platform puede ayudar a gestionar los recursos de computación necesarios para preprocesar datos complejos.
Diferencias entre KNN y K-Means#
Es importante diferenciar Vecinos más cercanos de la agrupación K-Means, ya que sus nombres similares suelen causar 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 que se utiliza para agrupar datos sin etiquetar en clústeres basados en similitudes estructurales.
Ejemplo de implementación#
El siguiente fragmento de código muestra un flujo de trabajo sencillo de clasificación KNN utilizando la popular biblioteca Scikit-learn. En un contexto de visión por ordenador, las «características» de entrada normalmente las extraería un modelo de deep learning, como YOLO26, antes de pasarlas 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)")








