Sobes.tech
Middle

¿Qué es el algoritmo de k-vecinos más cercanos (kNN)?

sobes.tech AI

Respuesta de la IA

El algoritmo de los k vecinos más cercanos (kNN) es un algoritmo simple y no paramétrico de aprendizaje automático, utilizado tanto para clasificación como para regresión.

Esencia: Asigna un nuevo objeto (punto de datos) a la clase más representada entre los k vecinos más cercanos en el conjunto de entrenamiento. Para regresión, predice un valor como el promedio/mediana de los valores de los k vecinos más cercanos.

Pasos principales para la clasificación:

  1. Elegir K: Determinar el número de vecinos más cercanos (K).
  2. Calcular la distancia: Calcular la distancia entre el nuevo objeto y cada uno de los objetos en el conjunto de entrenamiento (por ejemplo, distancia euclidiana).
  3. Buscar K vecinos más cercanos: Ordenar los objetos por distancia y seleccionar los K más cercanos.
  4. Votación: Determinar la clase del nuevo objeto en base a la mayoría de votos entre los K vecinos más cercanos.

Ventajas:

  • Facilidad de implementación y comprensión.
  • No requiere entrenamiento de un modelo (algoritmo perezoso).
  • Se adapta a nuevos datos a medida que aparecen.

Desventajas:

  • Costoso computacionalmente con grandes volúmenes de datos (en la fase de predicción).
  • La elección de K y la métrica de distancia son críticas.
  • Sensible a la escala de las características y a la "maldición de la dimensionalidad".
  • No funciona bien directamente con características categóricas (requiere codificación).

Aplicaciones:

  • Reconocimiento de patrones.
  • Sistemas de recomendación.
  • Diagnóstico médico.
  • Búsqueda de documentos similares.
# Ejemplo de implementación de kNN para clasificación usando scikit-learn

from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import numpy as np

# Creación de datos de demostración
X = np.array([[1, 2], [1.5, 1.8], [5, 8], [8, 8], [1, 0.6], [9, 11]])
y = np.array([0, 0, 1, 1, 0, 1]) # Etiquetas de clases

# División de datos en conjunto de entrenamiento y prueba
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# Creación y entrenamiento del modelo kNN
# K=3, es decir, 3 vecinos más cercanos
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)

# Predicción en el conjunto de prueba
y_pred = knn.predict(X_test)

# Evaluación de la precisión
accuracy = accuracy_score(y_test, y_pred)
# print(f"Precisión del modelo: {accuracy}")

# Predicción para un nuevo punto
new_point = np.array([[3, 5]])
predicted_class = knn.predict(new_point)
# print(f"Clase predicha para la nueva punto: {predicted_class[0]}")