NeuralProphet:基於神經網絡的時間序列建模庫

2020-12-13 騰訊網

NeuralProphet是一個python庫,用於基於神經網絡對時間序列數據進行建模。它建立在PyTorch之上,並受到Facebook Prophet和AR-Net庫的極大啟發。

NeuralProphet 和 Prophet對比

從庫名稱中,您可能會問Facebook的Prophet庫和NeuralProphet之間的主要區別是什麼。根據NeuralProphet的文檔,增加的功能是[1]:

使用PyTorch的Gradient Descent進行優化,使建模過程比Prophet快得多

使用AR-Net建模時間序列自相關(也稱為序列相關)

自定義損失和指標

具有前饋神經網絡的可配置非線性層,

等等

項目維護者

基於該項目的GitHub頁面,該項目的主要維護者是史丹福大學的Oskar Triebe,Facebook和莫納什大學的合作。

安裝

該項目處於測試階段,因此,如果您要在生產環境中使用此庫,我建議您謹慎使用。

不幸的是,在撰寫本文時,該庫沒有pip或conda軟體包。只能通過克隆存儲庫並運行pip install。來安裝它。但是,如果要在Jupyter Notebook環境中使用該軟體包,則應安裝其實時版本這將提供更多功能,例如使用plot_live_loss()實時訓練和驗證損失。

git clone https://github.com/ourownstory/neural_prophet

cd neural_prophet

pip install .[live]

我建議創建一個新環境(conda或venv),並從新環境安裝NeuralProphet軟體包,讓安裝程序處理所有依賴項(它具有Pandas,Jupyter Notebook,PyTorch作為依賴項)。

現在我們已經安裝了軟體包,讓我們開始吧!

案例分析實踐

在這裡,我使用在Kaggle上的2013年至2017年德裡的每日氣候數據。首先,讓我們導入主要包。

import pandas as pd

from neuralprophet import NeuralProphet

然後,我們可以將數據讀取到Panda DataFrame中。NeuralProphet對象期望時間序列數據具有一個名為ds的日期列,而我們希望將其預測為y。

# Data is from https://www.kaggle.com/sumanthvrao/daily-climate-time-series-data

df = pd.read_csv("./DailyDelhiClimateTrain.csv", parse_dates=["date"])

df = df[["date", "meantemp"]]

df.rename(columns={"date": "ds", "meantemp": "y"}, inplace=True)

現在,讓我們初始化模型,為NeuralProphet對象定義的所有默認參數,包括有關某些參數的其他信息。這些是您可以在模型中配置的超參數。當然,如果您打算使用默認變量,則只需執行model = NeuralProphet()。

# model = NeuralProphet() if you're using default variables below.

model = NeuralProphet(

growth="linear", # Determine trend types: 'linear', 'discontinuous', 'off'

changepoints=None, # list of dates that may include change points (None -> automatic )

n_changepoints=5,

changepoints_range=0.8,

trend_reg=0,

trend_reg_threshold=False,

yearly_seasonality="auto",

weekly_seasonality="auto",

daily_seasonality="auto",

seasonality_mode="additive",

seasonality_reg=0,

n_forecasts=1,

n_lags=0,

num_hidden_layers=0,

d_hidden=None, # Dimension of hidden layers of AR-Net

ar_sparsity=None, # Sparcity in the AR coefficients

learning_rate=None,

epochs=40,

loss_func="Huber",

normalize="auto", # Type of normalization ('minmax', 'standardize', 'soft', 'off')

impute_missing=True,

log_level=None, # Determines the logging level of the logger object

)

配置模型及其超參數後,我們需要訓練模型並進行預測。讓我們對溫度進行一年的預測。

metrics = model.fit(df, validate_each_epoch=True, freq="D")

future = model.make_future_dataframe(df, periods=365, n_historic_predictions=len(df))

forecast = model.predict(future)

您可以通過調用model.plot(forecast)來簡單地繪製預測,如下所示:

fig, ax = plt.subplots(figsize=(14, 10))

model.plot(forecast, xlabel="Date", ylabel="Temp", ax=ax)

ax.set_title("Mean Temperature in Delhi", fontsize=28, fontweight="bold")

上面顯示了一年的預測圖,其中從2017-01-01到2018-01-01之間的時間段是預測。可以看出,預測圖類似於歷史時間序列。它既捕獲了季節性,又捕獲了線性趨勢的緩慢增長。

也可以通過調用model.plot_parameters()來繪製參數。

使用平均絕對誤差(MAE)的模型損失如下圖所示。您也可以使用「平滑的L1損失」功能。

fig, ax = plt.subplots(figsize=(14, 10))

ax.plot(metrics["MAE"], 'ob', linewidth=6, label="Training Loss")

ax.plot(metrics["MAE_val"], '-r', linewidth=2, label="Validation Loss")

# You can use metrics["SmoothL1Loss"] and metrics["SmoothL1Loss_val"] too.

總結

在本文中,我們討論了NeuralProphet,這是一個基於神經網絡對時間序列進行建模的python庫。該庫使用PyTorch作為後端。作為案例研究,我們為德裡的每日氣候時間序列數據創建了一個預測模型,並進行了一年的預測。使用此庫的一個優點是其語法與Facebook的Prophet庫類似。

您可以在GitHub上找到此博客文章的Jupyter筆記本。謝謝閱讀!

https://github.com/e-alizadeh/medium/blob/master/notebooks/NeuralProphet/neural_prophet.ipynb

參考文獻

[1] NeuralProphet

[2] O. J. Triebe et al, AR-Net: A Simple Auto-Regressive Neural Network For Time-Series, (2019)

[3]https://facebook.github.io/prophet/

[4]https://github.com/ourownstory/AR-Net

作者:Esmaeil Alizadeh

deephub翻譯組

原文地址:https://towardsdatascience.com/neural-prophet-a-time-series-modeling-library-based-on-neural-networks-dd02dc8d868d

相關焦點

  • Prophet: 時間序列預測庫
    prophet是facebook開源的python預測庫,該庫的api設計與sklearn很像,也是分為fit方法和predict方法。
  • 手把手教你用Prophet快速進行時間序列預測(附Prophet和R代碼)
    本文將通過拆解Prophet的原理及代碼實例來講解如何運用Prophet進行時間序列預測。簡介對於任何業務而言,基於時間進行分析都是至關重要的。庫存量應該保持在多少?你希望商店的客流量是多少?多少人會乘坐飛機旅遊?
  • 基於圖卷積神經網絡GCN的時間序列預測
    時間序列預測任務可以按照不同的方法執行。最經典的是基於統計和自回歸的方法。更準確的是基於增強和集成的算法,我們必須使用滾動周期生成大量有用的手工特性。另一方面,我們可以使用在開發過程中提供更多自由的神經網絡模型,提供對順序建模的可定製的特性。循環和卷積結構在時間序列預測中取得了巨大的成功。
  • 深度學習建模方法,首先需要了解建模的思路
    深度學習建模方法的教學,首先需要講解建模的思路,然後才是使用的計算機建模工具的使用,目前有相關主流程式語言的入門教程,可以推薦華為雲安全部門負責人張勇教授的,其介紹了linux編程環境下如何操作建模機器學習深度學習的環境配置,並分享了多年經驗的建模實踐和驗證過程。
  • 乾貨|時間序列預測類問題下的建模方案探索實踐
    圖8 部分區域XGBoost模型預測結果3.3.神經網絡模型LSTM除了統計學模型和機器學習模型以外,深度學習的神經網絡模型在時間序列預測類問題上也有比較好的表現,其中LSTM模型應用最為廣泛。LSTM模型全名長短期記憶人工神經網絡,是一種時間遞歸神經網絡(RNN),可以很好地解決長時依賴問題。使用LSTM模型建模流程如圖所示。 圖9 LSTM模型建模流程圖神經網絡類模型在做數據預處理時,往往需要對數據進行歸一化處理,將每組數據都變為-1到1之間的數,這樣可以加快網絡的訓練速度。
  • NIPS2018深度學習(20)|亮點: 雙向RNN時間序列;對抗自編碼異常檢測;脈衝神經網絡(論文及代碼)
    但是,在實際應用中,時間序列可能會包含很多缺失值。給定多個可能有關聯的時間序列,補充缺失值同時對類別標籤進行預測非常重要。現有的填補方法通常對潛在的數據生成過程加以較強的假設,比如狀態空間中的線性動力學。這篇文章提出一種新的適用於時間序列的缺失值填補方法,簡稱BRITS,該方法基於循環神經網絡。這種方法利用雙向循環動力系統直接學習缺失值,不需要任何特定的假設。
  • 時間序列預測方法總結
    觀察序列,當序列存在周期性時,線性回歸也可做為baseline3.傳統時序建模方法,ARMA/ARIMA等線性模型。參考:4.時間序列分解,使用加法模型或乘法模型將原始序列拆分為4部分。a.在天池競賽-資金流入流出預測-挑戰Baseline-天池大賽-阿里雲天池,時間序列分解方法也能取得很好的成績。(後面有機會試試這種方法)5. 特徵工程著手,時間滑窗改變數據的組織方式,使用xgboost/LSTM模型/時間卷積網絡等。
  • 基於預測行為神經網絡的3D工藝生成學習
    我們提出了一個深度神經網絡,用於在Minecraft環境中構建人為建造的3D工藝房屋。與其對受限的遊戲環境進行探索,我們提出了一種方法來學習模仿人類的建築順序。先前的方法將動作序列視為堆疊的體素表示。然而,堆疊的體素表示遭受不必要的計算成本和有限的序列信息的困擾。為了解決這些問題,我們將動作序列視為3D空間中的有序點集。我們的網絡基於編碼器-解碼器框架。
  • 教程| 如何解決LSTM循環神經網絡中的超長序列問題
    作者:Jason Brownlee機器之心編譯參與:李澤南在 LSTM 循環神經網絡面臨長序列輸入時,我們應該怎樣應對?Jason Brownlee 給了我們 6 種解決方案。長短期記憶(LSTM)循環神經網絡可以學習和記憶長段序列的輸入。如果你的問題對於每個輸入都有一個輸出(如時間序列預測和文本翻譯任務),那麼 LSTM 可以運行得很好。
  • 谷歌開源Neural Tangents:簡單快速訓練無限寬度神經網絡
    近日,谷歌一項研究成果在社區引發了關注,該研究宣稱可通過神經正切核(Neural Tangent Kernel)使用貝葉斯推理或梯度下降分析式地訓練無限寬度的神經網絡。使用谷歌開源的軟體庫 Neural Tangents,這個過程不僅簡單且快速,而且效果非常好,甚至只需 5 行代碼就能一步到位地構建並訓練這種無限寬度網絡的集成模型!
  • 一文看懂NLP神經網絡發展歷史中最重要的8個裡程碑!
    正如很多人所知,語言建模有著豐富的歷史。其中比較經典的方法基於 n-grams ,並使用平滑處理不可見的 n-grams(Kneser & Ney, 1995)。第一個神經語言模型是 Bengio 等人在 2001 年提出的前饋神經網絡,如圖 1 所示。
  • 簡述基於神經網絡的抽取式摘要方法
    目前流行的基於神經網絡的抽取式摘要往往將問題建模為序列標註和句子排序兩類任務。下面首先介紹傳統的抽取式摘要方法,接著簡述基於神經網絡的抽取式摘要方法。 2.1 傳統方法 2.1.1 Lead-3 一般來說,作者常常會在標題和文章開始就表明主題,因此最簡單的方法就是抽取文章中的前幾句作為摘要。常用的方法為 Lead-3,即抽取文章的前三句作為文章的摘要。
  • 循環神經網絡(RNN) 基礎淺析
    RNN由於其序列建模的突出優點,在處理序列數據(如文本、語音)的任務中表現出卓越的性能。         什麼?你居然說你沒聽說過這兩個新聞?,中文名稱叫 循環神經網絡。不過要提醒大家注意的是,它還有一個遠房親戚,也經常自稱為RNN,它的全名是Recursive neural network,中文學名叫 遞歸神經網絡。大家注意分辨千萬別把這兩個搞混了,會鬧笑話的。
  • 「人工神經網絡」人工神經網絡之BP算法
    人工神經網絡(Artificial Neural Network,ANN)是在受到了生物學的啟發後創建的,在某種程度上它是對生物大腦的一種模擬。人們仿照生物神經網絡的結構,使用簡單運算單元模擬神經元,並將大量運算單元按某種形式密集連接,便構成了人工神經網絡。結構如圖:人工神經網絡(ANN)模型帶有權重值(w1,w2,...
  • 【歸納綜述】Graph Neural Network: An Introduction Ⅰ
    無論是我的專欄寫作進度,還是科研中的項目要求,都同樣指向了結構化建模,這麼巧肯定說明了結構化建模是大勢所趨。在這個19年都是老研究的AI領域,2020年年中的我還對已經火到巔峰的圖神經網絡一知半解就說不過去了。
  • Pytorch實現LSTM時間序列預測
    摘要:本文主要基於Pytorch深度學習框架,實現LSTM神經網絡模型,用於時間序列的預測。
  • 獨家 | 一文讀懂人工神經網絡
    然後它們會隨著時間的推移自行發展,這就是「機器學習」。人工神經網絡(ANN)是一種用於機器學習的計算模型,它的工作方式和生物的神經元類似。 當信息到達神經元,它們(神經元)通過調整網絡去感知和獲取這些信息得出一個理想的結果。通過神經元傳輸儘量多的數據會有助於得到更精準的結果。這就是神經網絡中的「訓練」。
  • 谷歌重磅開源Neural Tangents:5行代碼打造無限寬神經網絡模型
    開箱即用,5行代碼打造無限寬神經網絡模型Neural Tangents 是一個高級神經網絡 API,可用於指定複雜、分層的神經網絡,在 CPU/GPU/TPU 上開箱即用。該庫用 JAX編寫,既可以構建有限寬度神經網絡,亦可輕鬆創建和訓練無限寬度神經網絡。有什麼用呢?舉個例子,你需要訓練一個完全連接神經網絡。
  • 時域卷積網絡TCN詳解:使用卷積進行序列建模和預測
    儘管卷積神經網絡(CNNs)通常與圖像分類任務相關,但經過適當的修改,它已被證明是進行序列建模和預測的有價值的工具。在本文中,我們將詳細探討時域卷積網絡(TCN)所包含的基本構建塊,以及它們如何結合在一起創建一個強大的預測模型。使用我們的開源Darts TCN實現,我們展示了只用幾行代碼就可以在真實數據集上實現準確預測。以下對時間卷積網絡的描述基於以下論文:https://arxiv.org/pdf/1803.01271.pdf。
  • 循環神經網絡的增強方法:注意力機制以及更多
    循環神經網絡(RNN)是深度學習技術中十分重要的一類模型,它讓神經網絡能夠處理文本、音頻和視頻等序列數據。人們可以用循環神經網絡將一個序列歸結為一個高級的理解模式,從而對序列進行標註,甚至從頭開始生成一個新的序列。