Олимпиадный тренинг

Задача . Задача 3. Пишем градиентный спуск для логистической регрессии


Задача

Темы:

Вы уже научились вычислять сигмоиду и log-loss. Теперь пришло время собрать всё вместе и написать полноценный градиентный спуск для логистической регрессии!

Ваша задача — написать программу, которая находит оптимальные параметры w и b для логистической регрессии с помощью градиентного спуска.

Что нужно сделать:

  1. Начать с начальных значений w = 0 и b = 0

  2. На каждой итерации (эпохе):

    • Вычислить предсказания: z=w⋅X+b, затем p=σ(z)

    • Вычислить градиенты по формулам: 
      \[ \frac{\partial \text{Loss}}{\partial w} = \frac{1}{n} \sum_{i=1}^{n} (p_i - y_i) \cdot x_i \]
      \[ \frac{\partial \text{Loss}}{\partial b} = \frac{1}{n} \sum_{i=1}^{n} (p_i - y_i) \]

      Обновить параметры:
      \[ w = w - \alpha \cdot \frac{\partial \text{Loss}}{\partial w} \]
      \[ b = b - \alpha \cdot \frac{\partial \text{Loss}}{\partial b} \]

  3. Повторить указанное количество итераций

  4. Вернуть найденные параметры и историю ошибок

Параметры алгоритма:

  • Скорость обучения (alpha): задаётся во входных данных
  • Количество итераций (epochs): задаётся во входных данных
  • Для вычисления вероятности также используйте  y_pred = np.clip(y_pred, 1e-15, 1 - 1e-15)

Формат входных данных

Первая строка: признаки (вещественные числа, разделённые пробелом)
Вторая строка: правильные классы (0 или 1, разделённые пробелом)
Третья строка: скорость обучения (вещественное число) и количество итераций (целое число), разделённые пробелом


Формат выходных данных

Выведите три числа, каждое в отдельной строке:
Первая строка: найденное значение w (с точностью до 4 знаков после запятой)
Вторая строка: найденное значение b (с точностью до 4 знаков после запятой)
Третья строка: финальное значение log-loss (с точностью до 4 знаков после запятой)

Примеры
Входные данныеВыходные данные
1 1.0 2.0 3.0 4.0 5.0
0 0 0 1 1
0.1 200
0.7543
-2.3483
0.3649

time 1000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
Python1
Комментарий учителя