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:
- Elegir K: Determinar el número de vecinos más cercanos (K).
- 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).
- Buscar K vecinos más cercanos: Ordenar los objetos por distancia y seleccionar los K más cercanos.
- 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]}")