Menu
CoddyTech

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:

Los 80 chiles sobre una cuadrícula de puntos pequeños. Cada punto está coloreado según la respuesta del modelo en ese lugar: naranja para picante a la izquierda, azul para suave a la derecha, uniéndose a lo largo de una línea escalonada

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.

challenge icon

Desafío

Fácil

Una 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.

  1. 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.
  2. Predice cada punto en zz, con la misma forma que la cuadrícula.
  3. Rellena el mapa, con colores de C0 a C2; después dibuja las monedas y muéstralo.

Como esta:

Un mapa del clasificador de monedas: tres regiones suaves, azul para 10c en la parte inferior izquierda, naranja para 5c en el medio, verde para 25c a la derecha, cada una con sus monedas encima y una leyenda

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
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Aprendizaje supervisado

Practica por tu cuenta: Compilador de Python online