Шаг модели по наблюдениям птиц

тема: Градиентный шаг · уровень: средний

Условие

Сотрудники парка оценивают число замеченных птиц по скорости ветра. Для этого используется линейная модель \(\hat y=ax+b\), где \(x\) — скорость ветра, а \(\hat y\) — прогноз числа птиц.

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

Пусть \(S\) — множество записей с известной скоростью ветра, а \(m\) — их количество. Переданными параметрами \(a\) и \(b\) модель была до обучения. Необходимо выполнить ровно один шаг градиентного спуска с коэффициентом обучения \(\eta\) для функции средней квадратичной ошибки

\[MSE(a,b)=\frac{1}{m}\sum_{(x,y)\in S}(ax+b-y)^2.\]

Используются производные \(\frac{\partial MSE}{\partial a}=\frac{2}{m}\sum_{(x,y)\in S}(ax+b-y)x\) и \(\frac{\partial MSE}{\partial b}=\frac{2}{m}\sum_{(x,y)\in S}(ax+b-y)\). Новые параметры вычисляются одновременно: \(a'=a-\eta\frac{\partial MSE}{\partial a}\), \(b'=b-\eta\frac{\partial MSE}{\partial b}\).

После шага требуется найти прогнозы \(a'x+b'\) для двух значений скорости ветра из запроса. При совпадении значений в наблюдениях каждая совпадающая запись учитывается отдельно.

Формат ввода

В первой строке дано целое число n — количество записей наблюдений.

В следующих n строках даны скорость ветра x и число замеченных птиц y. Вместо скорости ветра может стоять NA.

В следующей строке даны вещественные числа a, b, eta — исходные параметры модели и коэффициент обучения.

В последней строке даны два целых числа q1 и q2 — скорости ветра в запросе.

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

Выведите в одной строке два прогноза после одного шага: сначала для q1, затем для q2.

Каждое число выведите ровно с четырьмя знаками после точки. Недостающие нули после точки дописываются.

Ограничения

1 ≤ n ≤ 2000.

В каждой строке наблюдений x равно NA длины 2 либо является целым числом от 0 до 100. Число y — целое от 0 до 1000.

Хотя бы в одной записи значение x не равно NA, поэтому m ≥ 1 и деления на ноль не возникает.

-100 ≤ a, b ≤ 100, 0.0001 ≤ eta ≤ 1. Вещественные числа во входе содержат не более 6 знаков после точки.

0 ≤ q1, q2 ≤ 100.

Решить задачу с автопроверкой на Python →

Куда дальше