Границы принятия решений
Часть раздела Обучение с учителем путешествия по Machine Learning на Coddy. Урок 8 из 58.
Граница принятия решений — это место, где меняется ответ модели. Чтобы увидеть её, попросите модель дать ответ в каждой точке диаграммы, представленной в виде сетки:
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 задаёт цвета, соответствующие точкам. Нарисуй точки после этого, поверх заливки.
Задание
ЛегкоТорговый автомат сортирует монеты по размеру и весу. В начальном коде k-NN обучается на coins.csv (коды классов от 0 до 2); draw_coins(ax) рисует монеты.
- Создай сетку размером 100 на 100:
xx,yy: от 18 до 26 мм по горизонтали, от 3 до 9 г по вертикали. - Сделай предсказание для каждой точки и помести результаты в
zz, сохранив форму сетки. - Залей карту цветами от C0 до C2, затем нарисуй монеты и покажи результат.
Вот так:
Монеты другой страны, поэтому и области другие.
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)")
# Напишите свой код ниже
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Обучение с учителем
1Ваша первая модель
Обучение на примерахОбучающая и тестовая выборкиОбучение и предсказаниеОценка моделиПовторение: сортировщик семян4Логистическая регрессия
Предсказания «да» или «нет»Порог принятия решенияВеса как свидетельстваНесколько классовПовторение: спам-фильтр2Метод ближайших соседей
Как работает k-NNВыбор kГраницы принятия решенийМасштабирование признаков для поиска соседейПовторение: соседи для вин5Оценка классификаторов
Матрица ошибокТочность и полнотаF1-мераНесбалансированные классыROC-кривыеПовторение: скрининговый тест8Кросс-валидация
K-блочная проверкаСправедливое сравнение моделейПоиск по сеткеПовторение: ремонт скейтбордов11Проект: виды пингвинов
Знакомство с пингвинамиПодготовка данныхВыбор моделиНастройка лучшей моделиЗапуск моделиПотренируйтесь самостоятельно: Онлайн-компилятор Python