偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

SOFTS: 時(shí)間序列預(yù)測(cè)的最新模型以及Python使用示例

人工智能 深度學(xué)習(xí)
近年來(lái),深度學(xué)習(xí)一直在時(shí)間序列預(yù)測(cè)中追趕著提升樹(shù)模型,其中新的架構(gòu)已經(jīng)逐漸為最先進(jìn)的性能設(shè)定了新的標(biāo)準(zhǔn)。

近年來(lái),深度學(xué)習(xí)一直在時(shí)間序列預(yù)測(cè)中追趕著提升樹(shù)模型,其中新的架構(gòu)已經(jīng)逐漸為最先進(jìn)的性能設(shè)定了新的標(biāo)準(zhǔn)。

這一切都始于2020年的N-BEATS,然后是2022年的NHITS。2023年,PatchTST和TSMixer被提出,最近的iTransformer進(jìn)一步提高了深度學(xué)習(xí)預(yù)測(cè)模型的性能。

這是2024年4月《SOFTS: Efficient Multivariate Time Series Forecasting with Series-Core Fusion》中提出的新模型,采用集中策略來(lái)學(xué)習(xí)不同序列之間的交互,從而在多變量預(yù)測(cè)任務(wù)中獲得最先進(jìn)的性能。

在本文中,我們?cè)敿?xì)探討了SOFTS的體系結(jié)構(gòu),并介紹新的STar聚合調(diào)度(STAD)模塊,該模塊負(fù)責(zé)學(xué)習(xí)時(shí)間序列之間的交互。然后,我們測(cè)試將該模型應(yīng)用于單變量和多變量預(yù)測(cè)場(chǎng)景,并與其他模型作為對(duì)比。

SOFTS介紹

SOFTS是 Series-cOre Fused Time Series的縮寫,背后的動(dòng)機(jī)來(lái)自于長(zhǎng)期多元預(yù)測(cè)對(duì)決策至關(guān)重要的認(rèn)識(shí):

首先我們一直研究Transformer的模型,它們?cè)噲D通過(guò)使用補(bǔ)丁嵌入和通道獨(dú)立等技術(shù)(如PatchTST)來(lái)降低Transformer的復(fù)雜性。但是由于通道獨(dú)立性,消除了每個(gè)序列之間的相互作用,因此可能會(huì)忽略預(yù)測(cè)信息。

iTransformer 通過(guò)嵌入整個(gè)序列部分地解決了這個(gè)問(wèn)題,并通過(guò)注意機(jī)制處理它們。但是基于transformer的模型在計(jì)算上是復(fù)雜的,并且需要更多的時(shí)間來(lái)訓(xùn)練非常大的數(shù)據(jù)集。

另一方面有一些基于mlp的模型。這些模型通常很快,并產(chǎn)生非常強(qiáng)的結(jié)果,但當(dāng)存在許多序列時(shí),它們的性能往往會(huì)下降。

所以出現(xiàn)了SOFTS:研究人員建議使用基于mlp的STAD模塊。由于是基于MLP的,所以訓(xùn)練速度很快。并且STAD模塊,它允許學(xué)習(xí)每個(gè)序列之間的關(guān)系,就像注意力機(jī)制一樣,但計(jì)算效率更高。

SOFTS架構(gòu)

在上圖中可以看到每個(gè)序列都是單獨(dú)嵌入的,就像在iTransformer 中一樣。

然后將嵌入發(fā)送到STAD模塊。每個(gè)序列之間的交互都是集中學(xué)習(xí)的,然后再分配到各個(gè)系列并融合在一起。

最后再通過(guò)線性層產(chǎn)生預(yù)測(cè)。

這個(gè)體系結(jié)構(gòu)中有很多東西需要分析,我們下面更詳細(xì)地研究每個(gè)組件。

1、歸一化與嵌入

首先使用歸一化來(lái)校準(zhǔn)輸入序列的分布。使用了可逆實(shí)例的歸一化(RevIn)。它將數(shù)據(jù)以單位方差的平均值為中心。然后每個(gè)系列分別進(jìn)行嵌入,就像在iTransformer 模型。

在上圖中我們可以看到,嵌入整個(gè)序列就像應(yīng)用補(bǔ)丁嵌入,其中補(bǔ)丁長(zhǎng)度等于輸入序列的長(zhǎng)度。

這樣,嵌入就包含了整個(gè)序列在所有時(shí)間步長(zhǎng)的信息。

然后將嵌入式系列發(fā)送到STAD模塊。

2、STar Aggregate-Dispatch (STAD)

STAD模塊是soft模型與其他預(yù)測(cè)方法的真正區(qū)別。使用集中式策略來(lái)查找所有時(shí)間序列之間的相互作用。

嵌入的序列首先通過(guò)MLP和池化層,然后將這個(gè)學(xué)習(xí)到的表示連接起來(lái)形成核(上圖中的黃色塊表示)。

核構(gòu)建好了以后就進(jìn)入了“重復(fù)”和“連接”的步驟,在這個(gè)步驟中,核表示被分派給每個(gè)系列。

MLP和池化層未捕獲的信息還可以通過(guò)殘差連接添加到核表示中。然后在融合(fuse)操作的過(guò)程中,核表示及其對(duì)應(yīng)系列的殘差都通過(guò)MLP層發(fā)送。最后的線性層采用STAD模塊的輸出來(lái)生成每個(gè)序列的最終預(yù)測(cè)。

與其他捕獲通道交互的方法(如注意力機(jī)制)相比,STAD模塊的主要優(yōu)點(diǎn)之一是它降低了復(fù)雜性。

因?yàn)镾TAD模塊具有線性復(fù)雜度,而注意力機(jī)制具有二次復(fù)雜度,這意味著STAD在技術(shù)上可以更有效地處理具有多個(gè)序列的大型數(shù)據(jù)集。

下面我們來(lái)實(shí)際使用SOFTS進(jìn)行單變量和多變量場(chǎng)景的測(cè)試。

使用SOFTS預(yù)測(cè)

這里,我們使用 Electricity Transformer dataset 數(shù)據(jù)集。

這個(gè)數(shù)據(jù)集跟蹤了中國(guó)某省兩個(gè)地區(qū)的變壓器油溫。每小時(shí)和每15分鐘采樣一個(gè)數(shù)據(jù)集,總共有四個(gè)數(shù)據(jù)集。

我門使用neuralforecast庫(kù)中的SOFTS實(shí)現(xiàn),這是官方認(rèn)可的庫(kù),并且這樣我們可以直接使用和測(cè)試不同預(yù)測(cè)模型的進(jìn)行對(duì)比。

在撰寫本文時(shí),SOFTS還沒(méi)有集成在的neuralforecast版本中,所以我們需要使用源代碼進(jìn)行安裝。

pip install git+https://github.com/Nixtla/neuralforecast.git

然后就是從導(dǎo)入包開(kāi)始。使用datasetsforecast以所需格式加載數(shù)據(jù)集,以便使用neuralforecast訓(xùn)練模型,并使用utilsforecast評(píng)估模型的性能。這就是我們使用neuralforecast的原因,因?yàn)樗际且惶椎?/span>

import pandas as pd
 import numpy as np
 import matplotlib.pyplot as plt
 
 from datasetsforecast.long_horizon import LongHorizon
 
 from neuralforecast.core import NeuralForecast
 from neuralforecast.losses.pytorch import MAE, MSE
 from neuralforecast.models import SOFTS, PatchTST, TSMixer, iTransformer
 
 from utilsforecast.losses import mae, mse
 from utilsforecast.evaluation import evaluate

編寫一個(gè)函數(shù)來(lái)幫助加載數(shù)據(jù)集,以及它們的標(biāo)準(zhǔn)測(cè)試大小、驗(yàn)證大小和頻率。

def load_data(name):
    if name == "ettm1":
        Y_df, *_ = LongHorizon.load(directory='./', group='ETTm1')
        Y_df = Y_df[Y_df['unique_id'] == 'OT'] # univariate dataset
        Y_df['ds'] = pd.to_datetime(Y_df['ds'])
        val_size = 11520
        test_size = 11520
        freq = '15T'
    elif name == "ettm2":
        Y_df, *_ = LongHorizon.load(directory='./', group='ETTm2')
        Y_df['ds'] = pd.to_datetime(Y_df['ds'])
        val_size = 11520
        test_size = 11520
        freq = '15T'
 
    return Y_df, val_size, test_size, freq

然后就可以對(duì)ETTm1數(shù)據(jù)集進(jìn)行單變量預(yù)測(cè)。

1、單變量預(yù)測(cè)

加載ETTm1數(shù)據(jù)集,將預(yù)測(cè)范圍設(shè)置為96個(gè)時(shí)間步長(zhǎng)。

可以測(cè)試更多的預(yù)測(cè)長(zhǎng)度,但我們這里只使用96。

Y_df, val_size, test_size, freq = load_data('ettm1')
 
 horizon = 96

然后初始化不同的模型,我們將soft與TSMixer, iTransformer和PatchTST進(jìn)行比較。

所有模型都使用的默認(rèn)配置將最大訓(xùn)練步數(shù)設(shè)置為1000,如果三次后驗(yàn)證損失沒(méi)有改善,則停止訓(xùn)練。

models = [
    SOFTS(h=horizon, input_size=3*horizon, n_series=1, max_steps=1000, early_stop_patience_steps=3),
    TSMixer(h=horizon, input_size=3*horizon, n_series=1, max_steps=1000, early_stop_patience_steps=3),
    iTransformer(h=horizon, input_size=3*horizon, n_series=1, max_steps=1000, early_stop_patience_steps=3),
    PatchTST(h=horizon, input_size=3*horizon, max_steps=1000, early_stop_patience_steps=3)
 ]

然后初始化NeuralForecast對(duì)象訓(xùn)練模型。并使用交叉驗(yàn)證來(lái)獲得多個(gè)預(yù)測(cè)窗口,更好地評(píng)估每個(gè)模型的性能。

nf = NeuralForecast(models=models, freq=freq)
 nf_preds = nf.cross_validation(df=Y_df, val_size=val_size, test_size=test_size, n_windows=None)
 nf_preds = nf_preds.reset_index()

評(píng)估計(jì)算了每個(gè)模型的平均絕對(duì)誤差(MAE)和均方誤差(MSE)。因?yàn)橹暗臄?shù)據(jù)是縮放的,因此報(bào)告的指標(biāo)也是縮放的。

ettm1_evaluation = evaluate(df=nf_preds, metrics=[mae, mse], models=['SOFTS', 'TSMixer', 'iTransformer', 'PatchTST'])

從上圖可以看出,PatchTST的MAE最低,而softts、TSMixer和PatchTST的MSE是一樣的。在這種特殊情況下,PatchTST仍然是總體上最好的模型。

這并不奇怪,因?yàn)镻atchTST在這個(gè)數(shù)據(jù)集中是出了名的好,特別是對(duì)于單變量任務(wù)。下面我們開(kāi)始測(cè)試多變量場(chǎng)景。

2、多變量預(yù)測(cè)

使用相同的load_data函數(shù),我們現(xiàn)在為這個(gè)多變量場(chǎng)景使用ETTm2數(shù)據(jù)集。

Y_df, val_size, test_size, freq = load_data('ettm2')
 
 horizon = 96

然后簡(jiǎn)單地初始化每個(gè)模型。我們只使用多變量模型來(lái)學(xué)習(xí)序列之間的相互作用,所以不會(huì)使用PatchTST,因?yàn)樗鼞?yīng)用通道獨(dú)立性(意味著每個(gè)序列被單獨(dú)處理)。

然后保留了與單變量場(chǎng)景中相同的超參數(shù)。只將n_series更改為7,因?yàn)橛?個(gè)時(shí)間序列相互作用。

models = [SOFTS(h=horizon, input_size=3*horizon, n_series=7, max_steps=1000, early_stop_patience_steps=3, scaler_type='identity', valid_loss=MAE()),
          TSMixer(h=horizon, input_size=3*horizon, n_series=7, max_steps=1000, early_stop_patience_steps=3, scaler_type='identity', valid_loss=MAE()),
          iTransformer(h=horizon, input_size=3*horizon, n_series=7, max_steps=1000, early_stop_patience_steps=3, scaler_type='identity', valid_loss=MAE())]

訓(xùn)練所有的模型并進(jìn)行預(yù)測(cè)。

nf = NeuralForecast(models=models, freq='15min')
 
 nf_preds = nf.cross_validation(df=Y_df, val_size=val_size, test_size=test_size, n_windows=None)
 nf_preds = nf_preds.reset_index()

最后使用MAE和MSE來(lái)評(píng)估每個(gè)模型的性能。

ettm2_evaluation = evaluate(df=nf_preds, metrics=[mae, mse], models=['SOFTS', 'TSMixer', 'iTransformer'])

上圖中可以看到到當(dāng)在96的水平上預(yù)測(cè)時(shí),TSMixer large在ETTm2數(shù)據(jù)集上的表現(xiàn)優(yōu)于iTransformer和soft。

雖然這與soft論文的結(jié)果相矛盾,這是因?yàn)槲覀儧](méi)有進(jìn)行超參數(shù)優(yōu)化,并且使用了96個(gè)時(shí)間步長(zhǎng)的固定范圍。

這個(gè)實(shí)驗(yàn)的結(jié)果可能不太令人印象深刻,我們只在固定預(yù)測(cè)范圍的單個(gè)數(shù)據(jù)集上進(jìn)行了測(cè)試,所以這不是SOFTS性能的穩(wěn)健基準(zhǔn),同時(shí)也說(shuō)明了SOFTS在使用時(shí)可能需要更多的時(shí)間來(lái)進(jìn)行超參數(shù)的優(yōu)化。

總結(jié)

SOFTS是一個(gè)很有前途的基于mlp的多元預(yù)測(cè)模型,STAD模塊是一種集中式方法,用于學(xué)習(xí)時(shí)間序列之間的相互作用,其計(jì)算強(qiáng)度低于注意力機(jī)制。這使得模型能夠有效地處理具有許多并發(fā)時(shí)間序列的大型數(shù)據(jù)集。

雖然在我們的實(shí)驗(yàn)中,SOFTS的性能可能看起來(lái)有點(diǎn)平淡無(wú)奇,但請(qǐng)記住,這并不代表其性能的穩(wěn)健基準(zhǔn),因?yàn)槲覀冎辉诠潭ㄒ暯绲膯蝹€(gè)數(shù)據(jù)集上進(jìn)行了測(cè)試。

但是SOFTS的思路還是非常好的,比如使用集中式學(xué)習(xí)時(shí)間序列之間的相互作用,并且使用低強(qiáng)度的計(jì)算來(lái)保證數(shù)據(jù)計(jì)算的效率,這都是值得我們學(xué)習(xí)的地方。

并且每個(gè)問(wèn)題都需要其獨(dú)特的解決方案,所以將SOFTS作為特定場(chǎng)景的一個(gè)測(cè)試選項(xiàng)是一個(gè)明智的選擇。

責(zé)任編輯:華軒 來(lái)源: DeepHub IMBA
相關(guān)推薦

2023-10-13 15:34:55

時(shí)間序列TimesNet

2024-01-30 01:12:37

自然語(yǔ)言時(shí)間序列預(yù)測(cè)Pytorch

2023-01-30 17:10:23

DeepTime元學(xué)習(xí)

2023-03-16 18:09:00

機(jī)器學(xué)習(xí)數(shù)據(jù)集

2025-01-14 13:32:47

2024-07-18 13:13:58

2024-05-09 16:23:14

2023-06-26 07:51:48

2021-07-02 10:05:45

PythonHot-winters指數(shù)平滑

2021-07-01 21:46:30

PythonHot-Winters數(shù)據(jù)

2022-07-15 16:14:39

深度學(xué)習(xí)時(shí)間序列理論

2023-04-09 15:57:39

時(shí)間序列分析Python開(kāi)發(fā)

2022-11-24 17:00:01

模型ARDL開(kāi)發(fā)

2023-11-06 07:27:38

模型NLP領(lǐng)域

2023-03-16 07:27:30

CnosDB數(shù)據(jù)庫(kù)

2024-09-03 08:16:08

2017-04-25 08:26:39

神經(jīng)網(wǎng)絡(luò)解碼

2024-06-27 16:38:57

2023-03-27 07:34:28

XGBoostInluxDB時(shí)間序列

2024-03-18 00:00:03

時(shí)間序列Prompt模型
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)