Градиент по данным: формула и численная проверка

☰ Теория

Если прогноз равен w · x, то при изменении w на h промах меняется на h · x. Раскрывая квадрат (e + h · x)² и переходя к h → 0, получаем для одного объекта производную 2 · (прогноз − факт) · x; для MSE берём среднее таких производных.

Подробно: Длина шага.

Модель имеет один вес:

прогноз = w · x

Даны четыре объекта:

x факт
1 2
2 4
4 8
5 10

Функция потерь — средняя квадратичная ошибка:

MSE = среднее((прогноз − факт)²)

Программа получает одно вещественное число w. Используйте h = 1e-5.

Напишите три функции:

def loss(w):
    ...

def analytic_grad(w):
    ...

def numeric_grad(w, h):
    ...
  • loss(w) должна вычислять MSE по всем четырём объектам.
  • analytic_grad(w) должна для каждого объекта вычислять вклад 2 · (прогноз − факт) · x, а затем возвращать среднее этих вкладов.
  • numeric_grad(w, h) должна независимо вычислять производную функции loss центральной разностью:
    (loss(w + h) − loss(w − h)) / (2 · h)

Важно: в numeric_grad нельзя использовать аналитическую формулу производной или вызывать analytic_grad.

Выведите в одной строке через пробел:

  1. аналитический градиент;
  2. численный градиент;
  3. модуль разности между ними.

Все три числа выведите с шестью знаками после точки.
 

Входные данные

В единственной строке дано вещественное число w — значение веса, в котором нужно вычислить производную.

Выходные данные

Выведите в одной строке через пробел три вещественных числа:

  1. аналитический градиент;
  2. численный градиент, вычисленный центральной разностью при h = 1e-5;
  3. модуль разности между аналитическим и численным градиентами.

Все три числа выведите с шестью знаками после точки.

 

Примеры
№Входные данныеВыходные данные
1
1.5
-11.500000 -11.500000 0.000000

Напишите программу
Auto
       

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

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