Экстраполяция синуса и косинуса
Только что закончилось одно мини-соревнование по машинному обучению, и сейчас я хочу узнать, как решается одна задача оттуда.
Горизонтальные координаты парашютиста от времени имеют следующий вид: x = a * cos(b * t) + шум, y = b * sin(a * t) + шум. Даны координаты парашютиста в первую тысячу секунд: t = 0 .. 999. Необходимо спрогнозировать координаты парашютиста в следующую тысячу секунд: t = 1000 .. 1999. Никаких уточнений по метрике и по значениям шума не давалось, требовали просто сделать прогноз максимально точным.
Основную проблему у меня вызвала зависимость двух этих функций от одних и тех же параметров. Я аппроксимизировал каждую из них по отдельности, и поэтому итоговая точность у меня очень и очень хромала.
Есть ли какие-то стандартные методы для решения такой задачи? Она выглядит, на самом деле, очень базово, и я предполагаю, что мне банально не хватает опыта понять, что нужно сделать.
Ответы (1 шт):
чуть более подробно - чтобы я сделал:
я использовал бы метод наименьших квадратов, а коэффициенты искал бы с помощью градиентного спуска (любого алгоритма, проблема оврагов не думаю, что сильная будет)
т.е. есть теоретические координаты
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