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

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

Конфигурация и ограничения

Однако каждый метод скользящего среднего требует настройки размера окна. Размер окна, также известный как диапазон, определяет количество точек данных, используемых при расчете скользящего среднего. Больший размер окна приводит к более плавному усреднению, но также может привести к более медленному реагированию на изменения в данных. Меньший размер окна даст более чувствительный ответ, но может также увеличить влияние краткосрочных колебаний данных. Ограничение заключается в медленной реакции на изменение данных и может отставать от реальных значений. Кроме того, скользящие средние могут быть чувствительны к выбросам в данных и могут неточно отражать основные закономерности в данных.

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

Простая скользящая средняя (SMA)

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

где:

  • n - количество периодов, используемых для расчета среднего,
  • Σ представляет собой сумму входных данных x_i за указанное количество периодов,
  • x - ввод данных в период i.

Теперь давайте рассмотрим короткую реализацию SMA на языке программирования Python.

def SMA(J, n):
    T = len(J)
    J_avg = [0] * n
    SMA = []
    
    for t in range(1, T):
        J_avg.pop(0)
        J_avg.append(J[t])
        SMA.append(sum(J_avg) / n)
    
    return SMA

# Example usage
J = [100, 105, 103, 110, 115, ...]
n = 11
SMA_values = SMA(J, n)

Взвешенная скользящая средняя (WMA)

Взвешенное скользящее среднее (WMA) — это широко используемый инструмент технического анализа, который рассчитывает среднюю цену финансового инструмента за определенное количество прошлых периодов. WMA присваивает вес каждой ценовой точке при расчете, при этом самым последним ценам присваивается наибольший вес. Он часто используется для определения тенденций и генерации сигналов на покупку или продажу, подобно простой скользящей средней (SMA) и экспоненциальной скользящей средней (EMA). Формула для расчета WMA определяется как:

где:

  • от w1 до wn — веса, присвоенные n точкам данных в окне. Веса обычно выбираются таким образом, чтобы самые последние точки данных имели более высокие веса.
  • x - ввод данных в период i.

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

T = 50
J = [100, 105, 103, 110, 115, ...]
n = 11
w = [1, 2, 3, 4, 5, ..., 11]
sum_weights = sum(w)
values = list()

for t in range(1, T):
    WMA = 0
    for i in range(n):
        WMA += J[t-i] * w[i]
    WMA /= sum_weights
    values.append(WMA)

Экспоненциальная скользящая средняя (EMA)

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

где:

  • т - момент времени,
  • Xt — текущая точка данных,
  • альфа (α) — коэффициент сглаживания (значение от 0 до 1),
  • EMA(t-1) — предыдущее значение EMA,
  • EMA(t) — текущее значение, которое рассчитывается.

Коэффициент сглаживания определяет вес, придаваемый текущей точке данных при расчете EMA. Большее значение альфа придает больший вес текущей точке данных, а меньшее значение α придает больший вес предыдущим значениям EMA. Значение α обычно устанавливается в диапазоне от 0,8 до 0,98, при этом большее значение используется для получения более точных результатов, а меньшее значение используется для большего сглаживания. EMA имеет несколько преимуществ перед простой скользящей средней (SMA) и взвешенной скользящей средней (WMA). EMA быстрее реагирует на изменения данных и меньше подвержена влиянию запаздывания и чувствительности к выбросам, которые могут присутствовать в SMA и WMA. Однако расчет EMA сложнее, чем SMA и WMA, и выбор коэффициента сглаживания может оказать существенное влияние на получаемые результаты. После всей необходимой теории рассмотрим реализацию EMA на языке программирования Python.

def exponential_moving_average(values, alpha):
    ema = [values[0]]
    for i in range(1, len(values)):
        ema.append(alpha * values[i] + (1 - alpha) * ema[i-1])
    return ema

Скользящие средние и алгоритмы оптимизации в машинном обучении

В машинном обучении цель состоит в том, чтобы найти оптимальные параметры модели, которые минимизируют ошибку между предсказаниями модели и фактическими целевыми значениями. Эта ошибка обычно измеряется целевой функцией, которая представляет собой математическое выражение, обобщающее характеристики модели. Алгоритмы оптимизации используются для настройки параметров модели с целью минимизации целевой функции.

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

Метод скользящего среднего включает вычисление экспоненциально взвешенного скользящего среднего целевой функции во времени. Пусть J(t) — целевая функция во время итерации t, а J_avg(t) — скользящее среднее во время итерации t. Скользящее среднее обновляется на каждой итерации с использованием следующего уравнения:

J_avg(t+1) = beta * J_avg(t) + (1 - beta) * J(t+1)

где:

  • Бета — это параметр, определяющий вес, придаваемый предыдущему среднему значению. Если бета близка к 1, скользящее среднее будет меняться очень медленно, придавая больший вес прошлому. Если бета близка к 0, скользящее среднее будет меняться очень быстро, придавая больший вес текущей итерации. Выбор бета повлияет на поведение скользящей средней и на процесс оптимизации.

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

learning_rate = alpha / sqrt(J_avg(t))

где:

  • Альфа — постоянный фактор, определяющий начальную скорость обучения.

Определив все необходимые параметры, мы готовы реализовать пример алгоритма скользящей средней на языке программирования Python.

import numpy as np

def moving_average_schedule(x_0, gradient, J, T, alpha, beta):
    J_avg = J(x_0)
    x = x_0
    for t in range(T):
        learning_rate = alpha / np.sqrt(J_avg)
        x = x - learning_rate * gradient(x)
        J_avg = beta * J_avg + (1 - beta) * J(x)
    return x

В этом примере x_0 — это начальные параметры оптимизации, gradient(x) — это функция, которая возвращает градиент целевой функции в точке x, J(x)  – это функция, возвращающая значение целевой функции в x, T – количество итераций, альфа – постоянный коэффициент, определяющий начальный >скорость обучения, а бета — параметр скользящего среднего. Конечный результат x — это оптимизированные параметры после T итераций.

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

Если вам понравилась статья, не забудьте подписаться на мои новые статьи.

Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord .

Заинтересованы в масштабировании запуска вашего программного обеспечения? Ознакомьтесь с разделом Схема.