Разреженная авторегрессия

В этом разделе мы используем NeuralProphet для работы с данными с разрешением в 5 минут (ежедневные температуры в Йосемити). Это продолжение учебного пособия Учебник 4: Авторегрессия. В то время как четвертый учебник охватывает авторегрессию в общем, настоящий блокнот сосредоточен на разреженности.

if "google.colab" in str(get_ipython()):
    # Удаляем предустановленные пакеты из Colab, чтобы избежать конфликтов
    !pip uninstall -y torch notebook notebook_shim tensorflow tensorflow-datasets prophet torchaudio torchdata torchtext torchvision
    !pip install git+https://github.com/ourownstory/neural_prophet.git@examples_cond_seas # может занять некоторое время
    #!pip install neuralprophet # намного быстрее, но может не иметь последних обновлений/исправлений ошибок

import pandas as pd
from neuralprophet import NeuralProphet, set_log_level, df_utils

set_log_level("ERROR")
data_location = "https://raw.githubusercontent.com/ourownstory/neuralprophet-data/main/datasets/"
df = pd.read_csv(data_location + "yosemite_temps.csv")

Разрежение коэффициентов AR

Компонент авторегрессии в NeuralProphet определяется как AR-Net (статья, github). Следовательно, мы можем установить значение ar_reg больше нуля, если хотим вызвать разреженность в коэффициентах AR.

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

Мы начнем с установки регуляризации на 0.1

m = NeuralProphet(
    n_lags=6 * 12,
    n_forecasts=3 * 12,
    n_changepoints=0,
    weekly_seasonality=False,
    daily_seasonality=False,
    learning_rate=0.01,
    ar_reg=0.1,
)
m.set_plotting_backend("plotly-static")
metrics = m.fit(df, freq="5min")  # validate_each_epoch=True, plot_live_loss=True
m.plot_parameters()
m = m.highlight_nth_step_ahead_of_each_forecast(1)
m.plot_parameters()
m = m.highlight_nth_step_ahead_of_each_forecast(36)
m.plot_parameters()

Дальнейшее снижение ненулевых AR-коэффициентов

Повышая значение ar_reg, мы можем дополнительно уменьшить количество ненулевых весов. Здесь мы устанавливаем его равным 1.

m = NeuralProphet(
    n_lags=6 * 12,
    n_forecasts=3 * 12,
    n_changepoints=0,
    daily_seasonality=False,
    weekly_seasonality=False,
    learning_rate=0.01,
    ar_reg=1,
)
m.set_plotting_backend("plotly-static")
metrics = m.fit(df, freq="5min")
m.plot_parameters()
m = m.highlight_nth_step_ahead_of_each_forecast(1)
m.plot_parameters()
m = m.highlight_nth_step_ahead_of_each_forecast(36)
m.plot_parameters()

Крайняя разреженность

Чем выше мы устанавливаем ar_reg, тем меньше ненулевых весов учитывается моделью. Здесь мы устанавливаем его равным 10, что должно привести к одному ненулевому лагу.

Примечание: Крайние значения могут привести к нестабильности обучения.

m = NeuralProphet(
    n_lags=6 * 12,
    n_forecasts=3 * 12,
    n_changepoints=0,
    daily_seasonality=False,
    weekly_seasonality=False,
    learning_rate=0.01,
    ar_reg=10,
)
m.set_plotting_backend("plotly-static")
metrics = m.fit(df, freq="5min")
m.plot_parameters()
m = m.highlight_nth_step_ahead_of_each_forecast(1)
m.plot_parameters()
m = m.highlight_nth_step_ahead_of_each_forecast(36)
m.plot_parameters()

Last updated