Python — как определить «тренд» данных?

Вечер добрый . Появилась потребность в нахождении тренда ( роста \ спада ) данных в Python. Тренд нужно находить почти в real-time (задержка максимум в 1 с) .

На вход дается переменная float каждые 0,05 с , на выходе хочу получать напрямления графика ( тренд ) - растущий ( заметно четкий рост пиков ) , убывающая ( четкий спад пиков ) или без заметных колебаний ( пики очень мало отличаются друг от друга ( 2 - 5 %) , " стабильный") . Пробовал применить метод наименьших квадратов () и другие варианты регрессионного анализа , но из-за слабых навыки в Питоне так и не смог реализовать.
Буду благодарен любимой помощи на эту тему.
  • Вопрос задан
  • 10765 просмотров
Решения вопроса 1
Пригласить эксперта
Ответы на вопрос 1
@iroln
А что не получилось с методом наименьших квадратов?

Вот простейшее решение линейной регрессии:

def linregress(x, y, w=None, b=None):
    x = np.array(x, dtype=np.float64)
    y = np.array(y, dtype=np.float64)

    if w is None:
        w = np.ones(x.size, dtype=np.float64)

    wxy = np.sum(w*y*x)
    wx = np.sum(w*x)
    wy = np.sum(w*y)
    wx2 = np.sum(w*x*x)
    sw = np.sum(w)

    den = wx2*sw - wx*wx

    if den == 0:
        den = np.finfo(np.float64).eps

    if b is None:
        k = (sw*wxy - wx*wy) / den
        b = (wy - k*wx) / sw
    else:
        k = (wxy - wx*b) / wx2

    return k, b


На вход поступают векторы данных x и y (можно ещё вектор весов задать), на выходе коэффициенты k, b для модели y = kx + b.

"Волшебные" функции в numpy: polyfit/polyval.

Функции вычисления ошибок, типа sse/mse/rmse/rsquare написать легко по формулам, которые можно найти в интернете или в книжках по статистическому и регрессионному анализу.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы