Вы уже научились вычислять сигмоиду и log-loss. Теперь пришло время собрать всё вместе и написать полноценный градиентный спуск для логистической регрессии!
Ваша задача — написать программу, которая находит оптимальные параметры w и b для логистической регрессии с помощью градиентного спуска.
Что нужно сделать:
-
Начать с начальных значений w = 0 и b = 0
-
На каждой итерации (эпохе):
-
Вычислить предсказания: 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} \]
-
Повторить указанное количество итераций
-
Вернуть найденные параметры и историю ошибок
Параметры алгоритма:
- Скорость обучения (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
|