El algoritmo k vecinos más cercanos (KNN) es un clasificador de aprendizaje supervisado no paramétrico, que emplea la proximidad para realizar clasificaciones o predicciones sobre la agrupación de un punto de datos individual. Es uno de los clasificadores de clasificación y regresión más populares y sencillos que se emplean actualmente en el machine learning.
El algoritmo de k vecinos más cercanos, también conocido como KNN o k-NN, es un clasificador de aprendizaje supervisado no paramétrico, que utiliza la proximidad para hacer clasificaciones o predicciones sobre la agrupación de un punto de datos individual.
Si bien se puede usar para problemas de regresión o clasificación, generalmente se usa como un algoritmo de clasificación, partiendo de la suposición de que se pueden encontrar puntos similares cerca uno del otro.
Para los problemas de clasificación, se asigna una etiqueta de clase sobre la base de un voto mayoritario, es decir, se utiliza la etiqueta que se representa con más frecuencia alrededor de un punto de datos determinado. Si bien esto técnicamente se considera "voto por mayoría", el término "voto por mayoría" se usa más comúnmente en la literatura. La distinción entre estas terminologías es que "voto mayoritario" técnicamente requiere una mayoría superior al 50 %, lo que funciona principalmente cuando solo hay dos categorías. Cuando tiene varias clases, por ejemplo, cuatro categorías, no necesita necesariamente el 50 % de los votos para llegar a una conclusión sobre una clase; puede asignar una etiqueta de clase con un voto superior al 25 %. La Universidad de Wisconsin-Madison lo resume bien con un ejemplo al que puede acceder aquí (PDF, 1,2 MB) (enlace externo a ibm.com).
Los problemas de regresión usan un concepto similar al de los problemas de clasificación, pero en este caso, se toma el promedio de los k vecinos más cercanos para hacer una predicción sobre una clasificación. La distinción principal aquí es que la clasificación se usa para valores discretos, mientras que la regresión se usa para valores continuos. Sin embargo, antes de que se pueda hacer una clasificación, se debe definir la distancia. La distancia euclidiana es la más utilizada, y nos profundizaremos más a continuación.
También vale la pena señalar que el algoritmo KNN también forma parte de una familia de modelos de "aprendizaje perezoso", lo que significa que solo almacena un conjunto de datos de entrenamiento en lugar de pasar por una etapa de entrenamiento. Esto también significa que todo el cálculo ocurre cuando se realiza una clasificación o predicción. Dado que depende en gran medida de la memoria para almacenar todos sus datos de entrenamiento, también se lo denomina método de aprendizaje basado en instancias o basado en la memoria.
A Evelyn Fix y Joseph Hodges se les atribuyen las ideas iniciales en torno al modelo KNN en este. artículo de 1951 (PDF, 1,1 MB) (enlace externo a ibm.com) mientras que Thomas Cover amplía su concepto en su investigación (PDF 1 MB) (enlace externo a ibm.com), "Clasificación de patrones de vecinos más cercanos". Si bien no es tan popular como lo fue antes, sigue siendo uno de los primeros algoritmos que uno aprende en la ciencia de datos debido a su simplicidad y precisión. Sin embargo, a medida que crece un conjunto de datos, KNN se vuelve cada vez más ineficiente, lo que compromete el rendimiento general del modelo. Se usa comúnmente para sistemas de recomendación simples, reconocimiento de patrones, extracción de datos, predicciones del mercado financiero, detección de intrusos y más.
Conozca los componentes básicos y las mejores prácticas para ayudar a sus equipos a acelerar la IA responsable.
Regístrese para obtener el informe técnico sobre la gobernanza de la IA
Para resumir, el objetivo del algoritmo de k vecinos más cercanos es identificar los vecinos más cercanos de un punto de consulta determinado, de modo que podamos asignar una etiqueta de clase a ese punto. Para ello, KNN tiene algunos requisitos:
Para determinar qué puntos de datos están más cerca de un punto de consulta determinado, será necesario calcular la distancia entre el punto de consulta y los demás puntos de datos. Esas métricas de distancia ayudan a formar límites de decisión, que dividen los puntos de consulta en diferentes regiones. Por lo general, los límites de decisión se visualizan con diagramas de Voronoi.
Si bien hay varias medidas de distancia entre las que puede elegir, este artículo solo cubrirá lo siguiente:
Esta es la medida de distancia más comúnmente empleada y está limitada a vectores de valores reales. Empleando la siguiente fórmula, se mide una línea recta entre el punto de consulta y el otro punto que se está midiendo.
Esta es también otra métrica de distancia popular, que mide el valor absoluto entre dos puntos. También se conoce como distancia de taxi o distancia de cuadra de la ciudad, ya que comúnmente se visualiza con una cuadrícula, que ilustra cómo se puede navegar de una dirección a otra a través de las calles de la ciudad.
Esta medida de distancia es la forma generalizada de las métricas de distancia euclidiana y Manhattan. El parámetro, p, en la fórmula a continuación, permite la creación de otras métricas de distancia. La distancia euclidiana se representa mediante esta fórmula cuando p es igual a dos, y la distancia de Manhattan se denota con p igual a uno.
Esta técnica se emplea normalmente con vectores booleanos o de cadena, identificando los puntos donde los vectores no coinciden. Como resultado, también se conoce como la métrica de superposición. Esto se puede representar con la siguiente fórmula:
Por ejemplo, si tuviera las siguientes cadenas, la distancia de Hamming sería 2, ya que solo dos de los valores difieren.
El valor k en el algoritmo k-NN define cuántos vecinos se verificarán para determinar la clasificación de un punto de consulta específico. Por ejemplo, si k=1, la instancia se asignará a la misma clase que su vecino más cercano. Definir k puede ser un acto de equilibrio, ya que diferentes valores pueden conducir a un sobreajuste o un ajuste insuficiente. Los valores más bajos de k pueden tener una varianza alta, pero un sesgo bajo, y los valores más grandes de k pueden conducir a un sesgo alto y una varianza más baja. La elección de k dependerá en gran medida de los datos de entrada, ya que los datos con más valores atípicos o ruido probablemente funcionarán mejor con valores más altos de k. En general, se recomienda tener un número impar para k a fin de evitar empates en la clasificación, y las tácticas de validación cruzada pueden ayudarlo a elegir la k óptima para su conjunto de datos.
Para profundizar, puede aprender más sobre el algoritmo k-NN empleando Python y scikit-learn (también conocido como sklearn). Nuestro tutorial en Watson Studio lo ayuda a aprender la sintaxis básica de esta biblioteca, que también contiene otras bibliotecas populares, como NumPy, pandas y Matplotlib. El siguiente código es un ejemplo de cómo crear y predecir con un modelo KNN:
from sklearn.neighbors import KNeighborsClassifier
model_name = ‘K-Nearest Neighbor Classifier’
knnClassifier = KNeighborsClassifier(n_neighbors = 5, metric = ‘minkowski’, p=2)
knn_model = Pipeline(steps=[(‘preprocessor’, preprocessorForFeatures), (‘classifier’ , knnClassifier)])
knn_model.fit(X_train, y_train)
y_pred = knn_model.predict(X_test)
El algoritmo k-NN se ha usado en diversas aplicaciones, principalmente dentro de la clasificación. Algunos de estos casos de uso son:
- Preprocesamiento de datos: los conjuntos de datos suelen tener valores faltantes, pero el algoritmo KNN puede estimar esos valores en un proceso conocido como imputación de datos faltantes.
- Motores de recomendación: empleando datos de flujo de clics de sitios web, el algoritmo KNN se ha usado para proporcionar recomendaciones automáticas a los usuarios sobre contenido adicional. Esta investigación (el enlace reside fuera de ibm.com) muestra que un usuario se asigna a un grupo en específico y, en función del comportamiento del usuario de ese grupo, se le da una recomendación. Sin embargo, dados los problemas de escala con KNN, este enfoque puede no ser óptimo para conjuntos de datos más grandes.
- Finanzas: también se ha empleado en diversos casos de uso financieros y económicos. Por ejemplo, un documento (el enlace reside fuera de ibm.com) muestra cómo el uso de KNN en datos crediticios puede ayudar a los bancos a evaluar el riesgo de un préstamo para una organización o persona. Se emplea para determinar la solvencia crediticia de un solicitante de préstamo. Otra revista (enlace externo a ibm.com) destaca su uso en pronósticos del mercado de valores, tipos de cambio de divisas, negociación de futuros y análisis de lavado de dinero.
- Atención médica: KNN también se ha usado dentro de la industria de la atención médica, haciendo predicciones sobre el riesgo de ataques cardiacos y cáncer de próstata. El algoritmo funciona calculando las expresiones génicas más probables.
- Reconocimiento de patrones: KNN también ha ayudado a identificar patrones, como en la clasificación de texto y dígitos (enlace externo a ibm.com). Esto fue particularmente útil para identificar números escritos a mano que se pueden encontrar en formularios o sobres de correo.
Al igual que cualquier algoritmo de machine learning, k-NN tiene sus fortalezas y debilidades. Dependiendo del proyecto y la aplicación, puede que sea la elección correcta o no.
- Fácil de implementar: dada la simplicidad y precisión del algoritmo, es uno de los primeros clasificadores que aprenderá un nuevo científico de datos.
- Se adapta fácilmente: a medida que se agregan nuevas muestras de entrenamiento, el algoritmo se ajusta para tener en cuenta cualquier dato nuevo, ya que todos los datos de entrenamiento se almacenan en la memoria.
- Pocos hiperparámetros: KNN solo requiere un valor a k y una métrica de distancia, lo que es bajo en comparación con otros algoritmos de machine learning.
- No es escalable: Dado que KNN es un algoritmo perezoso, ocupa más memoria y almacenamiento de datos en comparación con otros clasificadores. Esto puede ser costoso tanto desde el punto de vista del tiempo como del dinero. Más memoria y almacenamiento elevarán los gastos de la compañía y más datos pueden tardar más en computarse. Aunque se crearon diferentes estructuras de datos, como Ball-Tree, para abordar las ineficiencias computacionales, un clasificador diferente puede ser ideal en función del problema empresarial.
- Maldición de la dimensionalidad: el algoritmo KNN tiende a ser víctima de la maldición de la dimensionalidad, lo que significa que no funciona bien con entradas de datos de alta dimensión. Esto a veces también se conoce como el fenómeno de pico, donde después de que el algoritmo alcanza el número óptimo de características, las características adicionales aumentan la cantidad de errores de clasificación, especialmente cuando el tamaño de la muestra es más pequeño.
- Propenso al sobreajuste: debido a la "maldición de la dimensionalidad", KNN también es más propenso al sobreajuste. Aunque se emplean técnicas de selección de características y reducción de la dimensionalidad para evitar que esto ocurra, el valor de k también puede influir en el comportamiento del modelo. Los valores bajos de k pueden sobreajustar los datos, mientras que los valores altos de k tienden a "suavizar" los valores de predicción, ya que promedian los valores sobre un área mayor, o vecindario. Sin embargo, si el valor de k es demasiado alto, el ajuste a los datos puede ser insuficiente.
IBM Cloud Pak for Data es una plataforma de datos abierta y extensible que proporciona una estructura de datos para que todos los datos estén disponibles para la IA y los analytics, en cualquier nube.
Experimente con modelos fundacionales y cree modelos de aprendizaje automático instantáneamente en nuestro estudio de próxima generación para creadores de IA.
Aprenda más sobre Db2 on Cloud, una base de datos SQL en la nube totalmente gestionada, configurada y optimizada para un rendimiento estable.
Aprenda los conceptos fundamentales de la IA y la IA generativa, incluida la ingeniería rápida, los modelos de lenguaje de gran tamaño y los mejores proyectos de código abierto.
Aprenda los fundamentos de la agrupación en clústeres de K-means en Python mediante IBM Watson Studio Jupyter Notebooks en watsonx.ai.
Aprenda los fundamentos de la realización de clústeres K-means en R empleando IBM Watson Studio Jupyter Notebooks en watsonx.ai.
Explore los conceptos básicos para resolver un problema de aprendizaje automático basado en clasificación y obtenga un estudio comparativo de algunos de los algoritmos más populares en la actualidad.
Identificación de clases usando vecinos más cercanos.