Menu
CoddyTech

Границы принятия решений

Часть раздела Обучение с учителем путешествия по Machine Learning на Coddy. Урок 8 из 58.

Граница принятия решений — это место, где меняется ответ модели. Чтобы увидеть её, попросите модель дать ответ в каждой точке диаграммы, представленной в виде сетки:

80 перцев чили на сетке из маленьких точек. Каждая точка окрашена в соответствии с ответом модели в этой точке: оранжевым — острые слева, синим — мягкие справа; они встречаются вдоль ступенчатой линии

np.meshgrid сопоставляет каждое значение x с каждым значением y. Преобразуй пары в строки, предскажи значения для всех строк и верни ответы к форме сетки:

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 закрашивает область каждого кода класса: levels размещает границы посередине между кодами, а colors задаёт цвета, соответствующие точкам. Нарисуй точки после этого, поверх заливки.

challenge icon

Задание

Легко

Торговый автомат сортирует монеты по размеру и весу. В начальном коде k-NN обучается на coins.csv (коды классов от 0 до 2); draw_coins(ax) рисует монеты.

  1. Создай сетку размером 100 на 100: xx, yy: от 18 до 26 мм по горизонтали, от 3 до 9 г по вертикали.
  2. Сделай предсказание для каждой точки и помести результаты в zz, сохранив форму сетки.
  3. Залей карту цветами от C0 до C2, затем нарисуй монеты и покажи результат.

Вот так:

Карта сортировки монет: три мягкие области — синяя для 10c внизу слева, оранжевая для 5c посередине, зелёная для 25c справа; поверх каждой области показаны монеты, есть легенда

Монеты другой страны, поэтому и области другие.

Coddy опишет твою карту.

Попробуйте сами

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifier

# По одной строке для каждой монеты, измеренной машиной: диаметр (mm), вес (g), номинал в центах
coins = pd.read_csv("coins.csv")
X = np.column_stack([coins["diameter_mm"], coins["weight_g"]])
# Коды классов: 0 для 10c, 1 для 20c, 2 для 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)


# Отображает монеты на ax, отдельным цветом для каждого класса: 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)")

# Напишите свой код ниже
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Обучение с учителем

Потренируйтесь самостоятельно: Онлайн-компилятор Python