Σ
Информатика
Однослойный перцептрон
Прогресс выполнения0%
LVL 1
ОПЫТ0 / 250 XP
Интерактивная практическая работа

Научите перцептрон различать два класса

Пройдите путь от формулы взвешенной суммы до визуальной границы решений, а затем проверьте ограничение модели на задаче XOR.

⏱ 35–45 минут 🐍 Python + NumPy 📈 Визуализация 🧠 Бинарная классификация 🎲 Вариант 1
Этап 1

Как работает перцептрон

Разберите модель и ответьте на контрольные вопросы.
Не завершено
📥

1. Входы

Модель получает вектор признаков x. В работе используются два признака, чтобы результат можно было показать на плоскости.

⚖️

2. Взвешенная сумма

z = w · x + b

w — веса, b — смещение.

🚦

3. Активация

ŷ = sign(z)

Знак суммы определяет, к какому из двух классов относится объект.

x₁ × w₁
x₂ × w₂
смещение b
→
Σ
sign
→
ŷ ∈ {−1, +1}

Мини-тест

1. Для какой задачи предназначен обычный перцептрон?
2. Когда алгоритм гарантированно сходится?
3. Когда обновляются веса?
Этап 2

Соберите класс Perceptron

Выберите пропущенные фрагменты алгоритма обучения.
Не завершено
🧱

Что хранит объект

lr задаёт размер шага, n_iters — число эпох, weights — веса признаков, а bias сдвигает разделяющую прямую.

🔁

Что делает fit

Метод несколько раз проходит по обучающей выборке, получает прогноз и исправляет параметры только тогда, когда прогноз неверен.

🎯

Что делает predict

Метод вычисляет значение w·x+b, применяет sign и возвращает привычные метки классов 0 и 1.

Алгоритм для одного объекта

  1. Берём признаки объекта xᵢ и его правильную метку yᵢ.
  2. Вычисляем взвешенную сумму: z = xᵢ·w + b.
  3. Получаем прогноз: ŷ = sign(z).
  4. Если ŷ ≠ yᵢ, вычисляем поправку update = ηyᵢ.
  5. Исправляем параметры: w ← w + update·xᵢ, b ← b + update.

Пример первого обновления

Пусть x = (2, −1), правильный класс y = +1, скорость обучения η = 0.1, а начальные веса и смещение равны нулю.

z = 2·0 + (−1)·0 + 0 = 0
ŷ = sign(0) = 0 → ошибка
update = 0.1 · 1 = 0.1
w = (0,0) + 0.1·(2,−1) = (0.2,−0.1)
b = 0 + 0.1 = 0.1
Новая граница уже учитывает этот объект
Почему размер weights равен n_features?
Каждому признаку нужен свой вес. Если у объекта два признака, вектор весов содержит два элемента. Число объектов n_samples на длину weights не влияет.
Зачем переводить метки 0/1 в −1/+1?
Функция np.sign() работает со знаком числа. Метки −1 и +1 удобно использовать и в прогнозе, и в формуле изменения весов.
Почему веса не меняются при правильном прогнозе?
Текущая граница уже правильно классифицирует объект. Дополнительное изменение могло бы ухудшить положение границы для других объектов.
Частые ошибки в коде
Не путайте n_features с n_samples, не забывайте прибавлять bias, умножайте update на весь вектор xᵢ и преобразуйте итоговый прогноз обратно в 0/1.
Индивидуальная логика

Паспорт варианта 1

Базовая структура класса остаётся общей, но обучение выполняется по индивидуальным правилам.
Вариант 1
ИнициализацияНулевые веса
Порядок объектовПрямой
Правило обновленияКлассическое
Коэффициент bias1.00
perceptron.py
class Perceptron: def __init__(self, learning_rate=0.01, n_iters=1000): self.lr = learning_rate self.n_iters = n_iters self.weights = None self.bias = None def fit(self, X, y): n_samples, n_features = X.shape self.weights = self.bias = 0 y_ = for _ in range(self.n_iters): for idx, x_i in enumerate(X): linear_output = y_pred = if y_pred != y_[idx]: update = self.weights += self.bias += def predict(self, X): linear_output = np.dot(X, self.weights) + self.bias y_pred = np.sign(linear_output) return np.where(y_pred == -1, 0, 1)
Подсказка. При ошибке весь вектор весов сдвигается в направлении текущего объекта: w ← w + ηyx. Смещение меняется по формуле b ← b + ηy.
Этап 3

Подготовьте линейно разделимые данные

Настройте учебный набор из двух признаков и разделите его на train/test.
Не завершено
Аналог параметра n_samples.
Чем больше значение, тем дальше классы друг от друга.
В задании используется test_size=0.2.
График перестраивается сразу при изменении параметров.
Параметры будут установлены по выбранному варианту.
Класс 0 Класс 1 ○ train□ test
Всего0
Обучение0
Тест0
Признаков2
Этап 4

Обучите модель и проследите обновления

Меняйте скорость обучения, запускайте эпохи и наблюдайте за весами.
Не завершено
Скорость и число эпох применяются к графику автоматически.
Эпоха0
Ошибок—
Train accuracy—
Test accuracy—

Текущие параметры

z = 0.000x₁ + 0.000x₂ + 0.000
Граница решенийФон — предсказанный класс

Журнал обучения

Модель ещё не обучалась.

Последние исправления весов

ЭпохаОбъектИстинаПрогнозΔw₁w₂b
После первой ошибки здесь появится запись.
Этап 5

Объясните границу принятия решений

Закрепите геометрический смысл результата.
Не завершено

Откуда берётся прямая?

На границе модель не предпочитает ни один класс, поэтому взвешенная сумма равна нулю:

w₁x₁ + w₂x₂ + b = 0

Выразим второй признак:

x₂ = −(w₁x₁ + b) / w₂

Если w₂ близок к нулю, граница становится почти вертикальной.

Контрольное задание

Этап 6

Проверьте ограничение на задаче XOR

Четыре точки нельзя корректно разделить одной прямой.
Не завершено
(0,0)
→ 0
(1,0)
→ 1
(0,1)
→ 1
(1,1)
→ 0

Одинаковые классы находятся по диагонали. Любая прямая оставит хотя бы одну точку на неверной стороне.

Точность XOR—
Максимум для запуска—
Запустите обучение и сформулируйте вывод: однослойный перцептрон не решает нелинейно разделимую задачу XOR.
Этап 7

Подготовьте результат к сдаче

Проверьте состав работы и скопируйте готовый Python-код.
Не завершено

Чек-лист отчёта

0%

Продолжайте работу

Завершайте этапы, чтобы получить итоговый результат.

🏆
Достижение открыто+120 XP
⚡

Новый уровень!

Уровень 2
Автор - Симак Р.С.