Экстраполяция синуса и косинуса

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

Горизонтальные координаты парашютиста от времени имеют следующий вид: x = a * cos(b * t) + шум, y = b * sin(a * t) + шум. Даны координаты парашютиста в первую тысячу секунд: t = 0 .. 999. Необходимо спрогнозировать координаты парашютиста в следующую тысячу секунд: t = 1000 .. 1999. Никаких уточнений по метрике и по значениям шума не давалось, требовали просто сделать прогноз максимально точным.

Основную проблему у меня вызвала зависимость двух этих функций от одних и тех же параметров. Я аппроксимизировал каждую из них по отдельности, и поэтому итоговая точность у меня очень и очень хромала.

Есть ли какие-то стандартные методы для решения такой задачи? Она выглядит, на самом деле, очень базово, и я предполагаю, что мне банально не хватает опыта понять, что нужно сделать.


Ответы (1 шт):

Автор решения: Zhihar

чуть более подробно - чтобы я сделал:

я использовал бы метод наименьших квадратов, а коэффициенты искал бы с помощью градиентного спуска (любого алгоритма, проблема оврагов не думаю, что сильная будет)

т.е. есть теоретические координаты

x0(t) = a * cos(b * t), 
y0(t) = b * sin(a * t)

и есть экспериментальные точки x(t), y(t)

расстояние между экспериментальной и теоретической точками соответственно:

s(t) = (x0(t) - x(t))^2 + (y0(t) - y1(t))

в методе наименьших квадратов требуется найти такие параметры a, b для которых

sum s(t) t=0..1000 -> min

в некоторых случаях удаётся "схалявить", если теоретические формулы нормально дифференцируются (хотя бы 1 параметр можно вычислить теоретически), в данном случае это не очень получается, поскольку все таки параметры внутри тригонометрических функций находятся

так что придется применять градиентный спуск и аккуратненько спускаться от a_start и b_start до a_min и b_min при которых указанная выше сумма будет минимальной

дешево и сердито (и точность неплохая будет и скорость вычислений хорошая)

P.S.

на счёт шума в формуле не очень понял, возможно придется искать не 2, а 4 параметра:

x0(t) = a * cos(b * t) + m, 
y0(t) = b * sin(a * t) + n

но вроде как я понял шум как раз около 0 ходит, а не около некоторых параметров m, n

→ Ссылка