Шаг градиента по данным посылок
Условие
В пункте выдачи строится модель, оценивающая вероятность того, что посылку заберут в день её поступления. Для каждой посылки известен признак x — число часов до закрытия пункта в момент поступления. Метка y равна 1, если посылку забрали в этот день, и 0 иначе.
Данные поступают двумя таблицами. В первой таблице находятся признаки посылок, во второй — результаты выдачи. Строки нужно сопоставить по идентификатору посылки. Если идентификатор есть только в одной из таблиц, такая посылка не участвует в вычислениях.
Используется логистическая регрессия с параметрами w и b. Для посылки с признаком x вероятность равна p = 1 / (1 + exp(-(w*x + b))). На всех сопоставленных посылках выполняется один шаг градиентного спуска для бинарной кросс-энтропии. Градиенты вычисляются по формулам dw = (1/k) * sum((p_i - y_i) * x_i) и db = (1/k) * sum(p_i - y_i), где k — число сопоставленных посылок. Новые параметры равны w_new = w - eta * dw и b_new = b - eta * db.
Требуется вывести w_new и b_new в указанном порядке. Выведите каждое число с четырьмя знаками после точки, округляя до ближайшего значения с четырьмя знаками; при ровно половине выбирается значение с чётной последней цифрой. Гарантируется, что одинаковых идентификаторов внутри каждой таблицы нет.
Формат ввода
В первой строке записаны два целых числа n и m — количество строк в таблице посылок и таблице результатов соответственно.
Во второй строке записаны три вещественных числа w, b и eta — начальные параметры модели и размер шага.
В следующих n строках записаны идентификатор посылки parcel_id и целое число x.
В следующих m строках записаны идентификатор посылки parcel_id и целое число y.
Формат вывода
Выведите два вещественных числа w_new и b_new через пробел, каждое с четырьмя знаками после точки.
Ограничения
1 <= n, m.
n + m <= 4000.
-10 <= w, b <= 10.
0 < eta <= 1.
-100 <= x <= 100.
y равно 0 или 1.
Длина каждого идентификатора составляет от 1 до 12 символов. Идентификатор состоит из латинских букв, цифр и символа _.
Внутри каждой из двух таблиц все идентификаторы различны.
Хотя бы один идентификатор встречается в обеих таблицах, поэтому k >= 1 и деления на ноль не возникает.
Решить задачу с автопроверкой на Python →
Куда дальше
- Python на олимпиадах — где языка хватает с запасом, а где начинают значить лимиты — с замерами
- Перечневые олимпиады: что это и что дают — весь перечень Минобрнауки: уровни, срок диплома, разрезы по предметам и классам
- Олимпиада по информатике: с чего начать — два мира олимпиад — ВсОШ и перечневые: этапы, задания и на каком языке писать