Рекурсивный метод наименьших квадратов в питоне?

Кто-нибудь знает простой способ реализовать рекурсивную функцию наименьших квадратов в Python?

Мне нужен быстрый способ регрессии линейного дрейфа ([1 2 ... n], где n — количество временных точек до настоящего момента) из моего входящего сигнала каждый раз, когда он обновляется. Обычно для этого используется RLS, потому что время вычислений не увеличивается с увеличением количества временных точек.


person user1566200    schedule 26.03.2015    source источник
comment
Добавьте примеры и код, который вы пробовали, так как половина из присутствующих здесь не будет знать, что такое рекурсивная функция наименьших квадратов   -  person Bhargav Rao    schedule 26.03.2015


Ответы (2)


Наименьшие квадраты, подходящие линии к данным t [], x [] задаются выражением

x = xbar + (C/V)*(t-tbar)
where
xbar = Sum{ x[i]} / N
tbar = sum{ t[i]} / N
V = Sum{ (t[i]-tbar)^2 } / N
C = Sum{ (x[i]-xbar)*(t[i]-tbar) } / N

Вы можете постепенно вычислять xbar, tbar, V и C следующим образом:

Первоначально

N = 0
xbar = tbar = C = V = 0

Включение данных t,x:

N += 1
f = 1.0/N
dx = x - xbar
dt = t - tbar
xbar += f*dx
tbar += f*dt
V = (1.0-f)*(V + f*dt*dt)
C = (1.0-f)*(C + f*dx*dt)

Обратите внимание, что пока у вас не будет хотя бы двух точек данных, V будет равно нулю, поэтому линии нет. Обратите также внимание, что каждый x[] может быть вектором; пока xbar и C также вычисляются как векторы, работают одни и те же формулы.

person dmuir    schedule 30.03.2015

Алгоритм RLS реализован в библиотеке Python Padasip. Вы можете проверить код на github: исходные коды Padasip

Или вы можете использовать непосредственно библиотеку. См. документацию по алгоритму Padasip RLS.

person matousc    schedule 18.10.2016