Limites de Decisão
Parte da seção Aprendizado supervisionado do Journey de Machine Learning da Coddy. Lição 8 de 58.
Uma fronteira de decisão é onde a resposta de um modelo muda. Para vê-la, pergunte ao modelo em cada ponto do gráfico, organizado como uma grade:
np.meshgrid combina cada x com cada y. Transforme os pares em linhas, faça a previsão de todos eles e reorganize as respostas no formato da grade:
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 preenche a área de cada código de classe: levels posiciona as bordas na metade do caminho entre os códigos, colors corresponde às cores dos pontos. Desenhe os pontos depois, por cima.
Desafio
FácilUma máquina de venda automática separa moedas por tamanho e peso. O código inicial ajusta o k-NN usando coins.csv (códigos de classe de 0 a 2); draw_coins(ax) desenha as moedas.
- Crie uma grade de 100 por 100
xx,yy: de 18 a 26 mm na horizontal, de 3 a 9 g na vertical. - Preveja cada ponto em
zz, com o mesmo formato da grade. - Preencha o mapa, com cores de C0 a C2, depois desenhe as moedas e exiba.
Como esta:
Moedas de outro país, então as regiões são diferentes.
O Coddy descreve o seu mapa.
Experimente você mesmo
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifier
# Uma linha para cada moeda medida pela máquina: diâmetro (mm), peso (g), valor em centavos
coins = pd.read_csv("coins.csv")
X = np.column_stack([coins["diameter_mm"], coins["weight_g"]])
# Códigos das classes: 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)
# Desenha as moedas em ax, uma cor por classe: 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)")
# Escreva seu código abaixo
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Aprendizado supervisionado
1Seu primeiro modelo
Aprendendo com exemplosConjuntos de treino e testeAjustar e preverAvaliar um modeloRecapitulação: classificador de sementes4Regressão logística
Previsões de sim ou nãoO limiar de decisãoPesos como evidênciasVárias classesRevisão: filtro de spam2Vizinhos Mais Próximos
Como o k-NN DecideEscolhendo kLimites de DecisãoEscalonamento para VizinhosRevisão: Vizinhos do Vinho5Avaliando Classificadores
A Matriz de ConfusãoPrecisão e RevocaçãoA Pontuação F1Classes DesbalanceadasCurvas ROCRecapitulação: Teste de Triagem8Validação Cruzada
Validação K-FoldComparando Modelos de Forma JustaBusca em GradeRevisão: Consertos de Skate11Projeto: Espécies de Pinguins
Conheça os PinguinsPrepare os DadosEscolha um ModeloAjuste o VencedorColoque o Modelo em Produção3Regressão Linear
Prevendo númerosVárias característicasMedindo errosGráficos de resíduosRevisão: aluguel de bicicletas6Árvores de Decisão
Árvores fazem perguntasLendo uma árvoreProfundidade da árvoreImportância das característicasRevisão: decisões de empréstimoPratique por conta própria: Compilador de Python online