Contenido del curso

- K-Vecinos Más Cercanos (KNN): Clasificación basada en instancias para sistemas de recomendación

K-Vecinos Más Cercanos (KNN): Clasificación basada en instancias para sistemas de recomendación

Odisea Algorítmica Aprendizaje basado en instancias Sistemas de recomendación

K-Vecinos Más Cercanos (KNN) es un algoritmo de aprendizaje supervisado, no paramétrico y perezoso (lazy learner). No construye un modelo durante el entrenamiento; simplemente memoriza los datos de entrenamiento y pospone el cálculo hasta el momento de la predicción. Esta naturaleza lo hace extremadamente flexible y potente para tareas de clasificación y regresión, especialmente en sistemas de recomendación donde la similitud entre usuarios o ítems es la clave del descubrimiento.

La esencia del algoritmo es simple pero profunda: “dime con quién andas y te diré quién eres”. KNN identifica los k puntos de datos más cercanos a una nueva observación y asigna la clase (o valor) más frecuente entre ellos. A continuación, desglosamos cada componente técnico, desde las métricas de distancia hasta la maldición de la dimensionalidad, con aplicaciones concretas en recomendación de películas y genios.

1. Cálculo de distancias: el corazón de la cercanía

La noción de “cercanía” depende directamente de la métrica de distancia utilizada. Las tres más comunes en KNN son:

  • Distancia Euclidiana (norma L2): la distancia geométrica en línea recta entre dos puntos en el espacio. Es la más intuitiva y ampliamente usada.
    d(x, y) = √(∑(xᵢ − yᵢ)²)
  • Distancia Manhattan (norma L1): suma de las diferencias absolutas a lo largo de cada dimensión. Útil cuando las características son ortogonales o en espacios de alta dimensionalidad donde la distancia Euclidiana se diluye.
    d(x, y) = ∑|xᵢ − yᵢ|
  • Distancia Minkowski: generalización paramétrica de las anteriores. Con parámetro p=1 obtenemos Manhattan, p=2 Euclidiana, y valores mayores enfatizan diferencias grandes.
    d(x, y) = (∑|xᵢ − yᵢ|ᵖ)^{1/p}
💡 Consejo práctico: En sistemas de recomendación basados en usuarios (user-based), la distancia Euclidiana es común cuando las valoraciones están normalizadas. Manhattan puede ser más robusta frente a outliers. Siempre prueba varias métricas durante la validación cruzada.

2. Selección del valor de k y ponderación de vecinos

El parámetro k controla la flexibilidad del modelo:

  • k pequeño (ej. 1, 3): modelo de alto sesgo (bajo sesgo estadístico) pero alta varianza. Muy sensible al ruido local. Captura patrones detallados pero sobreajusta fácilmente.
  • k grande (ej. 20, 50): menor varianza, pero mayor sesgo. Las decisiones se suavizan y el modelo puede subestimar la estructura local. Hay un balance óptimo que se encuentra mediante validación (grid search).

Ponderación de vecinos: una mejora común es asignar pesos a los vecinos según su distancia. Los vecinos más cercanos tienen mayor influencia. Se suele usar la inversa de la distancia o la inversa del cuadrado de la distancia. Esto reduce el impacto de vecinos lejanos y mejora la precisión en fronteras de decisión complejas.

📊 Relación sesgo-varianza en KNN:
kSesgoVarianzaComportamiento
1BajoAltaOverfitting, sensible a ruido
5–10MedioMediaBalance típico en recomendación
50+AltoBajaUnderfitting, suavizado extremo

3. La maldición de la dimensionalidad

A medida que el número de características (dimensiones) crece, el espacio se vuelve extremadamente disperso. Las distancias entre puntos tienden a volverse casi uniformes, lo que hace que la noción de “vecino más cercano” pierda significado. Esto se conoce como la maldición de la dimensionalidad. En sistemas de recomendación con miles de atributos (géneros, actores, descriptores de contenido), el KNN puede fallar si no se aplican técnicas de reducción de dimensionalidad (PCA, selección de características) o se usan distancias robustas como la coseno.

Síntoma claro: la diferencia entre la distancia al vecino más cercano y al más lejano se vuelve despreciable. Para mitigarlo:

  • Normalizar o estandarizar las características (imprescindible).
  • Reducir dimensionalidad con proyecciones (PCA, t-SNE) o selección manual.
  • Usar métricas de similitud como el coseno (menos sensible a la escala).

4. Normalización de datos: requisito indispensable

KNN se basa en distancias; si una característica tiene un rango numérico grande (ej. ingresos en miles de dólares vs. edad entre 0-100), dominará el cálculo. La normalización es obligatoria. Las técnicas más usadas:

  • Min-Max scaling: reescala cada feature al rango [0,1].
  • Estandarización (Z-score): centra en media 0 y desviación estándar 1. Recomendada cuando hay outliers.

En sistemas de recomendación de películas, típicamente normalizamos las valoraciones por usuario (para eliminar sesgos de calificación alta/baja) y también los atributos de los ítems (año, duración, etc.).

5. Aplicación a sistemas de recomendación: películas y genios

El enfoque clásico es filtrado colaborativo basado en usuarios o basado en ítems. KNN es la columna vertebral de estos sistemas:

  • Recomendación user-based: Encuentra los k usuarios más similares al usuario activo (usando distancias sobre sus valoraciones). Luego recomienda ítems que esos vecinos han valorado positivamente. Ejemplo: “A los usuarios como tú (vecinos) les gustó ‘Inception’, tal vez a ti también”.
  • Recomendación item-based: Calcula la similitud entre ítems (películas) basada en las valoraciones de usuarios. Recomienda ítems similares a los que el usuario ya valoró alto. Ejemplo: “Viste ‘Matrix’, te recomendamos ‘Dark City’ (distancia baja en características)”.

Ejemplo concreto: supongamos una matriz de valoraciones de películas (usuarios × películas). Para recomendar al usuario A, calculamos la distancia Euclidiana entre su vector de valoraciones y el de otros usuarios. Los 3 vecinos más cercanos (k=3) han valorado “El Padrino” con 5 estrellas. KNN asigna una predicción de 5. Si además usamos ponderación por distancia, el vecino más similar tendrá más peso.

El mismo principio se aplica a recomendación de “genios” o mentores: si representamos a los mentores con atributos como habilidades, experiencia, calificaciones, KNN encuentra los perfiles más cercanos al aprendiz.

⚙️ Ejemplo de código (distancia Euclidiana y predicción simple):
from sklearn.neighbors import KNeighborsClassifier
model = KNeighborsClassifier(n_neighbors=5, metric='euclidean', weights='distance')
model.fit(X_train, y_train)
prediction = model.predict(X_new)

6. Búsqueda eficiente: KD-Trees y más allá

KNN ingenuo (fuerza bruta) calcula la distancia a todos los puntos de entrenamiento, con complejidad O(n·d). Inviable para grandes conjuntos de datos. Las estructuras de datos como KD-Trees (árboles k-dimensionales) aceleran la búsqueda en espacios de baja/media dimensión (hasta ~20D).

  • KD-Tree: particiona el espacio en regiones hiperrectangulares. La búsqueda del vecino más cercano puede realizarse en O(log n) en promedio, aunque en alta dimensión degenera a O(n).
  • Ball Tree: alternativa que usa hiperesferas, más robusta ante alta dimensionalidad.
  • Librerías como scikit-learn usan automáticamente estas estructuras según el tamaño y la dimensionalidad (algorithm='auto').

Para sistemas de recomendación con millones de usuarios, se usan además técnicas de aproximación (LSH, Annoy, FAISS) que sacrifican algo de precisión por velocidad. Pero en lecciones fundamentales, entender el KD-Tree es suficiente.

📌 Resumen visual del flujo KNN:
  1. Normalizar características.
  2. Elegir métrica de distancia (Euclidiana, Manhattan, coseno).
  3. Seleccionar k óptimo (validación cruzada).
  4. Ponderar vecinos (uniforme o por distancia).
  5. Predecir: clasificación por mayoría, regresión por promedio.
  6. Optimizar búsqueda con KD-Tree o Ball Tree.

7. Sesgo, varianza y el dilema de la complejidad

KNN ilustra perfectamente el trade-off sesgo-varianza. Un k pequeño: el modelo se ajusta demasiado a los datos de entrenamiento (alta varianza, bajo sesgo). Un k grande: el modelo es más rígido (alto sesgo, baja varianza). La elección óptima depende de la densidad de los datos y del nivel de ruido. En sistemas de recomendación donde los datos son dispersos (matriz sparse), valores de k entre 10 y 30 suelen funcionar bien.

Consejo profesional: Siempre escala las características antes de probar diferentes k. Puedes usar StandardScaler de scikit-learn. Además, considera usar distancia coseno si trabajas con vectores de texto o representaciones latentes.

8. Ejemplo integrador: sistema de recomendación de películas con KNN

Imagina que tenemos 5 usuarios y 4 películas. Las valoraciones (1–5) son:

UsuarioMatrixInceptionStar WarsEl Padrino
Ana534?
Bob3425
Carlos4514
Diana2253
Eva5544

Queremos predecir la valoración de Ana para “El Padrino” (desconocida). Usando k=3 y distancia Euclidiana (normalizando previamente las valoraciones por usuario para eliminar sesgo de calificación). Tras normalizar, los vecinos más cercanos de Ana resultan ser Bob, Carlos y Eva. Promediando sus valoraciones a “El Padrino” (5, 4, 4) obtenemos una predicción de 4.33. Con pesos por distancia, el vecino más similar (Eva) tendría mayor peso y la predicción subiría ligeramente.

Este mecanismo es la base de los sistemas de recomendación colaborativos, ampliamente usados por Netflix, Amazon y Spotify.

Descripción del algoritmo KNN: cálculo de distancias (Euclidiana, Manhattan, Minkowski), selección de k, ponderación de vecinos y el problema de la maldición de la dimensionalidad. Aplicación a sistemas de recomendación (ej. recomendación de películas/genios), utilizando similitud entre usuarios o ítems. Se analiza el sesgo (k pequeño) y varianza (k grande) y la necesidad de normalización de datos. Se mencionan técnicas de búsqueda eficiente (KD-Trees).
Calificación
0 0

No hay comentarios por ahora.