Fronteras de decisión
Parte de la sección Aprendizaje supervisado del Journey de Machine Learning de Coddy. Lección 8 de 58.
Una frontera de decisión es el lugar donde cambia la respuesta de un modelo. Para verla, pregunta al modelo en cada punto del gráfico, distribuido en forma de cuadrícula:
np.meshgrid empareja cada x con cada y. Aplana los pares en filas, predice todos y vuelve a darles la forma de la cuadrícula:
xx, yy = np.meshgrid(np.linspace(2, 16, 100), np.linspace(0.5, 6.5, 100))
grid = np.column_stack([xx.flatten(), yy.flatten()])
zz = model.predict(grid).reshape(xx.shape)
ax.contourf(xx, yy, zz, levels=[-0.5, 0.5, 1.5], colors=["C0", "C1"], alpha=0.3)contourf rellena el área de cada código de clase: levels coloca los bordes a mitad de camino entre los códigos, colors coincide con los puntos. Dibuja los puntos después, encima.
Desafío
FácilUna máquina expendedora clasifica las monedas por tamaño y peso. El código inicial ajusta k-NN con coins.csv (códigos de clase del 0 al 2); draw_coins(ax) las dibuja.
- Crea una cuadrícula de 100 por 100
xx,yy: de 18 a 26 mm a lo ancho, de 3 a 9 g hacia arriba. - Predice cada punto en
zz, con la misma forma que la cuadrícula. - Rellena el mapa, con colores de C0 a C2; después dibuja las monedas y muéstralo.
Como esta:
Las monedas de otro país, así que las regiones son diferentes.
Coddy describe tu mapa.
Pruébalo tú mismo
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifier
# Una fila por cada moneda medida por la máquina: diámetro (mm), peso (g), valor en céntimos
coins = pd.read_csv("coins.csv")
X = np.column_stack([coins["diameter_mm"], coins["weight_g"]])
# Códigos de clase: 0 para 10c, 1 para 20c, 2 para 50c
y = coins["value_c"].map({10: 0, 20: 1, 50: 2})
names = ["10c", "20c", "50c"]
model = KNeighborsClassifier(n_neighbors=5)
model.fit(X, y)
# Dibuja las monedas en ax, un color por clase: C0, C1, C2
def draw_coins(ax):
for code in range(3):
ax.scatter(X[y == code, 0], X[y == code, 1], s=20, label=names[code])
ax.legend()
fig, ax = plt.subplots()
ax.set_title("Coin Sorter Map")
ax.set_xlabel("Diameter (mm)")
ax.set_ylabel("Weight (g)")
# Escribe tu código a continuación
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Aprendizaje supervisado
1Tu primer modelo
Aprender de ejemplosConjuntos de entrenamiento y pruebaAjustar y predecirEvaluar un modeloRepaso: clasificador de semillas4Regresión logística
Predicciones de sí o noEl umbral de decisiónLos pesos como evidenciaVarias clasesRepaso: filtro de spam2Vecinos más cercanos
Cómo decide k-NNCómo elegir kFronteras de decisiónEscalado para los vecinosRepaso: vecinos del vino5Medición de clasificadores
La matriz de confusiónPrecisión y exhaustividadLa puntuación F1Clases desequilibradasCurvas ROCRepaso: prueba de detección8Validación cruzada
Validación K-FoldComparación justa de modelosBúsqueda en cuadrículaRepaso: reparaciones de monopatines11Proyecto: especies de pingüinos
Conoce a los pingüinosPrepara los datosElige un modeloAjusta el modelo ganadorPublica el modelo3Regresión lineal
Predicción de númerosVarias característicasMedición de erroresGráficos de residuosRepaso: alquiler de bicicletas6Árboles de decisión
Los árboles hacen preguntasLeer un árbolProfundidad del árbolImportancia de las característicasRepaso: decisiones de préstamosPractica por tu cuenta: Compilador de Python online