NeuralProphet是一個python庫,用于基于神經(jīng)網(wǎng)絡(luò)對時間序列數(shù)據(jù)進行建模。 它建立在PyTorch之上,并受到Facebook Prophet和AR-Net庫的極大啟發(fā)。
從庫名稱中,您可能會問Facebook的Prophet庫和NeuralProphet之間的主要區(qū)別是什么。 根據(jù)NeuralProphet的文檔,增加的功能是[1]:
· 使用PyTorch的Gradient Descent進行優(yōu)化,使建模過程比Prophet快得多
· 使用AR-Net建模時間序列自相關(guān)(也稱為序列相關(guān))
· 自定義損失和指標(biāo)
· 具有前饋神經(jīng)網(wǎng)絡(luò)的可配置非線性層,
· 等等
基于該項目的GitHub頁面,該項目的主要維護者是斯坦福大學(xué)的Oskar Triebe,F(xiàn)acebook和莫納什大學(xué)的合作。
該項目處于測試階段,因此,如果您要在生產(chǎn)環(huán)境中使用此庫,我建議您謹慎使用。
不幸的是,在撰寫本文時,該庫沒有pip或conda軟件包。 只能通過克隆存儲庫并運行pip install。來安裝它。但是,如果要在Jupyter Notebook環(huán)境中使用該軟件包,則應(yīng)安裝其實時版本pip install . 這將提供更多功能,例如使用plotliveloss()實時訓(xùn)練和驗證損失。
git clone https://github.com/ourownstory/neural_prophet cd neural_prophet pip install .[live]
我建議創(chuàng)建一個新環(huán)境(conda或venv),并從新環(huán)境安裝NeuralProphet軟件包,讓安裝程序處理所有依賴項(它具有Pandas,Jupyter Notebook,PyTorch作為依賴項)。
現(xiàn)在我們已經(jīng)安裝了軟件包,讓我們開始吧!
在這里,我使用在Kaggle上的2013年至2017年德里的每日氣候數(shù)據(jù)。 首先,讓我們導(dǎo)入主要包。
import pandas as pd from neuralprophet import NeuralProphet
然后,我們可以將數(shù)據(jù)讀取到Panda DataFrame中。 NeuralProphet對象期望時間序列數(shù)據(jù)具有一個名為ds的日期列,而我們希望將其預(yù)測為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)
現(xiàn)在,讓我們初始化模型,為NeuralProphet對象定義的所有默認參數(shù),包括有關(guān)某些參數(shù)的其他信息。 這些是您可以在模型中配置的超參數(shù)。 當(dāng)然,如果您打算使用默認變量,則只需執(zhí)行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)
配置模型及其超參數(shù)后,我們需要訓(xùn)練模型并進行預(yù)測。 讓我們對溫度進行一年的預(yù)測。
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)
您可以通過調(diào)用model.plot(forecast)來簡單地繪制預(yù)測,如下所示:
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')
上面顯示了一年的預(yù)測圖,其中從2017-01-01到2018-01-01之間的時間段是預(yù)測。 可以看出,預(yù)測圖類似于歷史時間序列。 它既捕獲了季節(jié)性,又捕獲了線性趨勢的緩慢增長。
也可以通過調(diào)用model.plot_parameters()來繪制參數(shù)。
使用平均絕對誤差(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,這是一個基于神經(jīng)網(wǎng)絡(luò)對時間序列進行建模的python庫。 該庫使用PyTorch作為后端。 作為案例研究,我們?yōu)榈吕锏拿咳諝夂驎r間序列數(shù)據(jù)創(chuàng)建了一個預(yù)測模型,并進行了一年的預(yù)測。 使用此庫的一個優(yōu)點是其語法與Facebook的Prophet庫類似。
您可以在GitHub上找到此博客文章的Jupyter筆記本。謝謝閱讀!
github/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] facebook.github.io/prophet/
[4] github/ourownstory/AR-Net
聯(lián)系客服