K-nearest neighbors (KNN) en Python

K-Nearest Neighbors (KNN) es un algoritmo de aprendizaje automático supervisado que se utiliza para tareas de clasificación y regresión. También se utiliza con frecuencia en la imputación de valores faltantes. El principio en el que se basa es que las observaciones más cercanas a un punto de datos dado son las más "similares" en un conjunto de datos, y, por lo tanto, podemos clasificar puntos no previstos en función de los valores de los puntos existentes más cercanos. El usuario puede elegir el valor de K, que representa el número de observaciones cercanas a usar en el algoritmo.


KNN en Python

Comencemos por visualizar algunos puntos de datos:

Ejemplo

    plt.show()
  

Resultado:

Ejemplo de KNN en Pyhton

Ahora ajustamos el algoritmo KNN con K=1:

Ejemplo

    knn = KNeighborsClassifier(n_neighbors=1)
knn.fit(data, classes)
print(knn)
knn.fit(data, classes)
print(knn)
  

Y lo usamos para clasificar un nuevo punto de datos:

Ejemplo

    plt.text(x=new_x-1.7, y=new_y-0.7, s=f"Nuevo punto, clase: {prediction[0]}")
plt.show()
  

Ahora hacemos lo mismo, pero con un valor de K más alto que cambia la predicción:

Ejemplo

    plt.text(x=new_x-1.7, y=new_y-0.7, s=f"Nuevo punto, clase: {prediction[0]}")
plt.show()
  

Ejemplo completo de KNN en Python

Ejemplo

    plt.show()
  

Resultado:

ejemplo completo de como hacer un KNN en Pyhton

Explicación del Ejemplo

1.Importar Librerías:

  • Importamos las librerías necesarias, que incluyen Matplotlib para visualización y scikit-learn para KNN.

2. Datos de Ejemplo:

  • Definimos dos listas, x e y , que representan las coordenadas x e y de puntos en un espacio bidimensional.
  • classes es una lista que asigna una clase (0 o 1) a cada punto. En este ejemplo, estamos trabajando en un problema de clasificación binaria.

3. Visualización de Datos:

  • Usamos Matplotlib para crear un gráfico de dispersión que muestra los puntos en el espacio bidimensional. Los puntos se colorean según su clase.

4. Creación del Modelo KNN (K=1):

  • Creamos un modelo KNN con n_neighbors=1 , lo que significa que solo se considerará el punto más cercano para hacer predicciones.
  • Ajustamos (entrenamos) el modelo KNN con nuestros datos de ejemplo utilizando knn.fit(data, classes) .

5. Clasificación de un Nuevo Punto:

  • Creamos un nuevo punto (new_x, new_y) que deseamos clasificar.
  • Usamos el modelo KNN entrenado para predecir la clase del nuevo punto con knn.predict(new_point) .

6. Visualización de Resultados (K=1):

  • Visualizamos el nuevo punto junto con los puntos existentes, coloreando el nuevo punto según su clase predicha. También mostramos un texto con la clase predicha.

7. Cambio del Valor de K (K=5):

  • Creamos un nuevo modelo KNN con n_neighbors=5 , lo que significa que consideraremos los 5 puntos más cercanos para hacer predicciones.
  • Ajustamos el nuevo modelo KNN con nuestros datos de ejemplo.
  • Volvemos a clasificar el mismo nuevo punto con el nuevo modelo.

8. Visualización de Resultados (K=5):

  • Visualizamos nuevamente el nuevo punto junto con los puntos existentes, pero esta vez con un valor de K más grande.
  • La clase predicha puede cambiar debido a la inclusión de más puntos cercanos en la decisión.

Practica K-nearest neighbors (KNN) en Python en el editor

Pon en práctica lo aprendido con nuestro editor Python interactivo. Cada ejercicio incluye el código de partida y un botón para abrirlo en una nueva pestaña, donde puedes modificarlo y ejecutarlo.

Ejercicio: Visualizar puntos KNN

Dibuja un scatter de dos clases antes de aplicar KNN.

Ejemplo

    import numpy as np
import matplotlib.pyplot as plt

x = np.array([1, 1.5, 2, 4, 4.5, 5])
y = np.array([1, 1.8, 1.2, 4, 3.8, 4.2])
clases = np.array([0, 0, 0, 1, 1, 1])
plt.scatter(x[clases == 0], y[clases == 0], label='Clase 0')
plt.scatter(x[clases == 1], y[clases == 1], label='Clase 1')
plt.legend()
plt.title('Puntos para KNN')
plt.show()
  
Abrir en editor

Ejercicio: Ahora ajustamos el algoritmo KNN con K=1

Ahora ajustamos el algoritmo KNN con K=1.

Ejemplo

    knn = KNeighborsClassifier(n_neighbors=1)
knn.fit(data, classes)
print(knn)
knn.fit(data, classes)
print(knn)
  
Abrir en editor

Ejercicio: Y lo usamos para clasificar un nuevo punto de datos

Y lo usamos para clasificar un nuevo punto de datos.

Ejemplo

    plt.text(x=new_x-1.7, y=new_y-0.7, s=f"Nuevo punto, clase: {prediction[0]}")
plt.show()
  
Abrir en editor

Ejercicio: Claves del diccionario

Ahora hacemos lo mismo, pero con un valor de K más alto que cambia la predicción.

Ejemplo

    d = {"nombre": "Elena", "ciudad": "Valencia"}
print(d)
print(d.keys())
  
Abrir en editor

Ejercicio: Usar print()

Ahora hacemos lo mismo, pero con un valor de K más alto que cambia la predicción.

Ejemplo

    resultado = 29
print(resultado)
print(resultado * 2)
  
Abrir en editor

Comprueba lo aprendido

Responde 2–3 preguntas sobre esta lección. Verás ✓ en verde si aciertas o ✗ en rojo si fallas.