成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

TimesNet:時(shí)間序列預(yù)測(cè)的最新模型

開發(fā) 前端
2020年發(fā)布的N-BEATS、2022年發(fā)布的N-HiTS和2023年3月發(fā)布的PatchTST開始。N-BEATS和N-HiTS依賴于多層感知器架構(gòu),而PatchTST利用了Transformer架構(gòu)。

2020年發(fā)布的N-BEATS、2022年發(fā)布的N-HiTS和2023年3月發(fā)布的PatchTST開始。N-BEATS和N-HiTS依賴于多層感知器架構(gòu),而PatchTST利用了Transformer架構(gòu)。

2023年4月發(fā)表了一個(gè)新的模型,它在時(shí)間序列分析的多個(gè)任務(wù)中實(shí)現(xiàn)了最先進(jìn)的結(jié)果,如預(yù)測(cè)、imputation、分類和異常檢測(cè):TimesNet。

TimesNet由Wu、Hu、Liu等人在他們的論文《TimesNet: Temporal 2D-Variation Modeling For General Time Series Analysis》中提出。

與以前的模型不同,它使用基于cnn的架構(gòu)來跨不同的任務(wù)獲得最先進(jìn)的結(jié)果,使其成為時(shí)間序列分析的基礎(chǔ)模型的絕佳候選。

在本文中,我們將探討TimesNet的架構(gòu)和內(nèi)部工作原理。然后將該模型應(yīng)用于預(yù)測(cè)任務(wù),與N-BEATS和N-HiTS進(jìn)行對(duì)比。

TimesNet

TimesNet背后的動(dòng)機(jī)來自于許多現(xiàn)實(shí)生活中的時(shí)間序列表現(xiàn)出多周期性的認(rèn)識(shí)。這意味著變化發(fā)生在不同的時(shí)期。

例如,室外溫度有日周期和年周期。通常,白天比晚上熱,夏天比冬天熱。這些多個(gè)時(shí)期相互重疊和相互作用,使得很難單獨(dú)分離和建模。

周期內(nèi)變化是指溫度在一天內(nèi)的變化,周期間變化是指溫度每天或每年的變化。所以TimesNet的作者提出在二維空間中重塑序列,以模擬周期內(nèi)和周期間的變化。

TimesNet的架構(gòu)

從上圖中,我們可以看到TimesNet是多個(gè)帶有跳過連接的TimesBlock的堆棧。

在每個(gè)TimesBlock中,首先通過快速傅立葉變換(FTT)來找到數(shù)據(jù)中的不同周期。然后被重塑為一個(gè)2D向量,并發(fā)送到一個(gè)Inception塊中,在那里它學(xué)習(xí)并預(yù)測(cè)該系列的2D表示。然后使用自適應(yīng)聚合將該深度表示重塑回一維向量。

捕捉多周期性

為了捕獲時(shí)間序列中多個(gè)時(shí)期的變化,作者建議將一維序列轉(zhuǎn)換為二維空間,同時(shí)模擬周期內(nèi)和周期間的變化。

在上圖中,我們可以看到模型是如何表示二維空間中的變化的。在紅色矩形內(nèi)可以看到周期內(nèi)的變化,也就是數(shù)據(jù)在一個(gè)周期內(nèi)的變化。然后藍(lán)色矩形包含周期間變化,這是數(shù)據(jù)如何從一個(gè)時(shí)期到另一個(gè)時(shí)期的變化。

為了更好地理解這一點(diǎn),假設(shè)我們有以周為周期的每日數(shù)據(jù)。周期間變化是指數(shù)據(jù)在周一、周二、周三等期間的變化情況。

那么,周期間變化就是數(shù)據(jù)從第1周的星期一到第2周的星期一,從第1周的星期二到第2周的星期二的變化。換句話說,它是同一階段的數(shù)據(jù)在不同時(shí)期的變化。

然后,這些變化在二維空間中表示,其中周期間變化是垂直的,周期內(nèi)變化是水平的。這使得模型能夠更好地學(xué)習(xí)數(shù)據(jù)變化的表示。

一維矢量表示的是相鄰點(diǎn)之間的變化,而二維矢量表示的是相鄰點(diǎn)和相鄰周期之間的變化,給出了一個(gè)更完整的圖像。

原理看著很簡(jiǎn)單,但是還有一個(gè)最重要的問題:如何找到周期?

確定周期性

為了識(shí)別時(shí)間序列中的多個(gè)周期,該模型應(yīng)用了快速傅里葉變換(FTT)。

這是一個(gè)數(shù)學(xué)運(yùn)算,將信號(hào)轉(zhuǎn)換成頻率和幅度的函數(shù)。

在上圖中,作者說明了金融交易稅是如何應(yīng)用的。一旦我們有了每個(gè)周期的頻率和幅度,幅度最大的就被認(rèn)為是最相關(guān)的。

例如,下面是對(duì)eth1數(shù)據(jù)集執(zhí)行FTT的結(jié)果。

在上圖中,快速傅里葉變換能夠快速識(shí)別數(shù)據(jù)中的日周期和年周期,因?yàn)槲覀冊(cè)谶@些周期中看到更高的振幅峰值。

一旦應(yīng)用了FTT,用戶可以設(shè)置一個(gè)參數(shù)k來選擇top-k最重要的周期,這些周期是振幅最大的周期。

然后,TimesNet為每個(gè)周期創(chuàng)建2D向量,并將這些向量發(fā)送到2D內(nèi)核以捕獲時(shí)間變化。

TimesBlock

一旦序列進(jìn)行了傅里葉變換,并為前k個(gè)周期創(chuàng)建了二維張量,數(shù)據(jù)就被發(fā)送到Inception 塊,如下圖所示。

TimesBlock是最主要的模型組件:Inception模塊是2015年發(fā)布的計(jì)算機(jī)視覺模型GoogLeNet的構(gòu)建塊。

Inception模塊的主要思想是通過保持?jǐn)?shù)據(jù)稀疏來有效地表示數(shù)據(jù)。這樣就可以在技術(shù)上增加神經(jīng)網(wǎng)絡(luò)的大小,同時(shí)保持其計(jì)算效率。

這是通過執(zhí)行各種卷積和池化操作來實(shí)現(xiàn)的,然后將所有內(nèi)容連接起來。在TimesNet的上下文中,這就是Inception模塊的樣子。

什么作者選擇視覺模型來處理時(shí)間序列數(shù)據(jù)。

一個(gè)簡(jiǎn)單的答案是,視覺模型特別擅長(zhǎng)解析2D數(shù)據(jù),比如圖像。另一個(gè)好處是可以在TimesNet可以更其他的視覺主干。

自適應(yīng)聚合

要執(zhí)行聚合,必須首先將2D表示重塑為1D向量。

使用自適應(yīng)聚合的原因是不同的周期有不同的振幅,這表明了它們的重要性。

這就是為什么FTT的輸出也被發(fā)送到softmax層,這樣可以使用每個(gè)周期的相對(duì)重要性進(jìn)行聚合。

聚合的數(shù)據(jù)是單個(gè)TimesBlock的輸出。然后將多個(gè)TimesBlock與殘差連接疊加創(chuàng)建TimesNet模型。

TimesNet預(yù)測(cè)

現(xiàn)在讓我們將TimesNet模型應(yīng)用于預(yù)測(cè)任務(wù),并將其性能與N-BEATS和N-HiTS進(jìn)行比較。

我們使用了知識(shí)共享署名許可下發(fā)布的Etth1數(shù)據(jù)集。這是文獻(xiàn)中廣泛使用的時(shí)間序列預(yù)測(cè)基準(zhǔn)。它跟蹤每小時(shí)的變壓器油溫,這反映了設(shè)備的狀況。

導(dǎo)入庫(kù)并讀取數(shù)據(jù),這里我們使用Nixtla提供的NeuralForecast實(shí)現(xiàn)。

import numpy as np
 import pandas as pd
 import matplotlib.pyplot as plt
 
 from neuralforecast.core import NeuralForecast
 from neuralforecast.models import NHITS, NBEATS, TimesNet
 
 from neuralforecast.losses.numpy import mae, mse

讀取CSV文件。

df = pd.read_csv('data/etth1.csv')
 df['ds'] = pd.to_datetime(df['ds'])
 df.head()

在上圖中,請(qǐng)注意數(shù)據(jù)集已經(jīng)具有NeuralForecast所期望的格式。包需要三列:

  • ds:日期列
  • id列:unique_id
  • y值列

然后,我們先看看數(shù)據(jù)

fig, ax = plt.subplots()
 
 ax.plot(df['y'])
 ax.set_xlabel('Time')
 ax.set_ylabel('Oil temperature')
 
 fig.autofmt_xdate()
 plt.tight_layout()

現(xiàn)在我們開始預(yù)測(cè),使用96小時(shí)的預(yù)測(cè)長(zhǎng)度,這是文獻(xiàn)中長(zhǎng)期預(yù)測(cè)的常見長(zhǎng)度。

我們還保留了兩個(gè)96個(gè)時(shí)間步長(zhǎng)的窗口來評(píng)估我們的模型。

我們定義一個(gè)我們想要用來執(zhí)行預(yù)測(cè)任務(wù)的模型列表。這里將使用N-BEATS, N-HiTS和TimesNet。

保留所有模型的默認(rèn)參數(shù),并將最大epoch數(shù)限制為50。請(qǐng)注意,默認(rèn)情況下,TimesNet將選擇數(shù)據(jù)中最重要的前5個(gè)輪次。

horizon = 96
 
 models = [NHITS(h=horizon,
                input_size=2*horizon,
                max_steps=50),
          NBEATS(h=horizon,
                input_size=2*horizon,
                max_steps=50),
          TimesNet(h=horizon,
                  input_size=2*horizon,
                  max_steps=50)]

下一步是用模型列表和數(shù)據(jù)頻率(每小時(shí)一次)實(shí)例化NeuralForecasts對(duì)象。

nf = NeuralForecast(models=models, freq='H')

然后運(yùn)行交叉驗(yàn)證,這樣就有了數(shù)據(jù)集的預(yù)測(cè)值和實(shí)際值。可以評(píng)估每個(gè)模型的性能。

preds_df = nf.cross_validation(df=df, step_size=horizon, n_windows=2)

我們可以看到實(shí)際值,以及來自我們指定的每個(gè)模型的預(yù)測(cè)。這樣可以很容易地將預(yù)測(cè)與實(shí)際值相比較。

fig, ax = plt.subplots()
 
 ax.plot(preds_df['y'], label='actual')
 ax.plot(preds_df['NHITS'], label='N-HITS', ls='--')
 ax.plot(preds_df['NBEATS'], label='N-BEATS', ls=':')
 ax.plot(preds_df['TimesNet'], label='TimesNet', ls='-.')
 
 ax.legend(loc='best')
 ax.set_xlabel('Time steps')
 ax.set_ylabel('Oil temperature')
 
 fig.autofmt_xdate()
 plt.tight_layout()

在上圖中,似乎所有的模型都無法預(yù)測(cè)測(cè)試集中觀察到的油溫下降。但是可以看到N-BEATS和N-HiTS已經(jīng)捕捉到了一些在TimesNet的預(yù)測(cè)中沒有觀察到的周期性模式。

但是最終還需要通過計(jì)算MSE和MAE來評(píng)估模型,以確定哪個(gè)模型是最好的。

data = {'N-HiTS': [mae(preds_df['NHITS'], preds_df['y']), mse(preds_df['NHITS'], preds_df['y'])],
        'N-BEATS': [mae(preds_df['NBEATS'], preds_df['y']), mse(preds_df['NBEATS'], preds_df['y'])],
        'TimesNet': [mae(preds_df['TimesNet'], preds_df['y']), mse(preds_df['TimesNet'], preds_df['y'])]}
 
 metrics_df = pd.DataFrame(data=data)
 metrics_df.index = ['mae', 'mse']
 
 metrics_df.style.highlight_min(color='lightgreen', axis=1)

從上圖可以看出,N-HiTS獲得最低的MAE,而N-BEATS獲得最低的MSE。MAE的差異為0.002,MSE的差異為0.00025。由于MSE的差異非常小,特別是考慮到誤差是平方的,所以我認(rèn)為N-HiTS是這項(xiàng)任務(wù)的首選模型。

總結(jié)

本文并不是要證明TimesNet有多好,因?yàn)椴煌哪P涂赡苓m應(yīng)不同的任務(wù),并且我們也沒有進(jìn)行超參數(shù)優(yōu)化,我們介紹TimesNet的主要目的是他的思路,它不僅將cnn的架構(gòu)引入了時(shí)間序列預(yù)測(cè),并且還提供了一種周期性判別的新的思路,這些都是值得我們學(xué)習(xí)的。

一如既往,每個(gè)預(yù)測(cè)問題都需要一個(gè)獨(dú)特的方法和一個(gè)特定的模型,所以你可以在你的模型列表中增加一個(gè)TimesNet了。

本文代碼:https://github.com/marcopeix/time-series-analysis

TimesNet,論文地址:https://browse.arxiv.org/pdf/2210.02186.pdf

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

2024-06-17 16:02:58

2023-01-30 17:10:23

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

2023-03-16 18:09:00

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

2024-05-09 16:23:14

2022-07-15 16:14:39

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

2023-06-26 07:51:48

2022-11-24 17:00:01

模型ARDL開發(fā)

2023-11-06 07:27:38

模型NLP領(lǐng)域

2024-01-30 01:12:37

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

2024-09-03 08:16:08

2022-08-16 09:00:00

機(jī)器學(xué)習(xí)人工智能數(shù)據(jù)庫(kù)

2024-06-27 16:38:57

2024-03-18 00:00:03

時(shí)間序列Prompt模型

2024-07-24 13:58:21

2024-12-11 08:17:30

2021-07-02 10:05:45

PythonHot-winters指數(shù)平滑

2024-07-18 13:13:58

2025-01-14 13:32:47

2021-04-07 10:02:00

XGBoostPython代碼

2021-07-01 21:46:30

PythonHot-Winters數(shù)據(jù)
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 国产精品久久久久久久久免费樱桃 | 欧美久久久久 | 午夜免费在线电影 | 欧美日韩综合一区 | 久久精品| 天天天操天天天干 | 一区二区三区中文字幕 | 午夜男人的天堂 | 日韩在线精品视频 | 免费看91 | 日本免费视频 | 91久久国产 | 欧美视频在线播放 | 国产精品美女久久久久aⅴ国产馆 | 在线观看亚洲专区 | 欧美高清成人 | 亚洲高清在线观看 | 99久久久久久 | 国产真实乱对白精彩久久小说 | 看亚洲a级一级毛片 | 日本韩国电影免费观看 | 久久综合伊人 | 国产一区二区在线免费观看 | 国产精品观看 | 男女羞羞视频免费 | 我想看国产一级毛片 | 欧美日韩亚洲系列 | 欧美一区二区三区在线观看 | 黑人巨大精品欧美一区二区一视频 | 精品一区二区三区四区在线 | 91免费版在线观看 | 蜜桃毛片 | jdav视频在线观看免费 | 久久天天躁狠狠躁夜夜躁2014 | 涩涩视频网站在线观看 | 成人在线视频一区二区三区 | 国产资源在线视频 | 国家aaa的一级看片 h片在线看 | 欧美最猛黑人xxxⅹ 粉嫩一区二区三区四区公司1 | 一区二区三区不卡视频 | 国产精品久久久久久中文字 |