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:
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:
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,
xey, que representan las coordenadas x e y de puntos en un espacio bidimensional. -
classeses 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()
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)
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()
Ejercicio: Claves del diccionario
Ahora hacemos lo mismo, pero con un valor de K más alto que cambia la predicción.
Ejercicio: Usar print()
Ahora hacemos lo mismo, pero con un valor de K más alto que cambia la predicción.
Comprueba lo aprendido
Responde 2–3 preguntas sobre esta lección. Verás ✓ en verde si aciertas o ✗ en rojo si fallas.