NeuralProphet:基于神经网络的时间序列建模库

简介: NeuralProphet:基于神经网络的时间序列建模库

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环境中使用该软件包,则应安装其实时版本pip install . 这将提供更多功能,例如使用plot_live_loss()实时训练和验证损失。

gitclonehttps://github.com/ourownstory/neural_prophetcdneural_prophetpipinstall .[live]

我建议创建一个新环境(conda或venv),并从新环境安装NeuralProphet软件包,让安装程序处理所有依赖项(它具有Pandas,Jupyter Notebook,PyTorch作为依赖项)。

现在我们已经安装了软件包,让我们开始吧!

案例分析实践

在这里,我使用在Kaggle上的2013年至2017年德里的每日气候数据。首先,让我们导入主要包。

importpandasaspdfromneuralprophetimportNeuralProphet

然后,我们可以将数据读取到Panda DataFrame中。NeuralProphet对象期望时间序列数据具有一个名为ds的日期列,而我们希望将其预测为y。

#Dataisfromhttps://www.kaggle.com/sumanthvrao/daily-climate-time-series-datadf=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() ifyou'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-Netar_sparsity=None, # Sparcity in the AR coefficientslearning_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")

640.png

上面显示了一年的预测图,其中从2017-01-01到2018-01-01之间的时间段是预测。可以看出,预测图类似于历史时间序列。它既捕获了季节性,又捕获了线性趋势的缓慢增长。

也可以通过调用model.plot_parameters()来绘制参数。

640.png

使用平均绝对误差(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")
#Youcanusemetrics["SmoothL1Loss"] andmetrics["SmoothL1Loss_val"] too.

640.png

总结

在本文中,我们讨论了NeuralProphet,这是一个基于神经网络对时间序列进行建模的python库。该库使用PyTorch作为后端。作为案例研究,我们为德里的每日气候时间序列数据创建了一个预测模型,并进行了一年的预测。使用此库的一个优点是其语法与Facebook的Prophet库类似。

您可以在GitHub上找到此博客文章的Jupyter笔记本。谢谢阅读!

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

目录
相关文章
|
2月前
|
C++
基于Reactor模型的高性能网络库之地址篇
这段代码定义了一个 InetAddress 类,是 C++ 网络编程中用于封装 IPv4 地址和端口的常见做法。该类的主要作用是方便地表示和操作一个网络地址(IP + 端口)
159 58
|
2月前
|
网络协议 算法 Java
基于Reactor模型的高性能网络库之Tcpserver组件-上层调度器
TcpServer 是一个用于管理 TCP 连接的类,包含成员变量如事件循环(EventLoop)、连接池(ConnectionMap)和回调函数等。其主要功能包括监听新连接、设置线程池、启动服务器及处理连接事件。通过 Acceptor 接收新连接,并使用轮询算法将连接分配给子事件循环(subloop)进行读写操作。调用链从 start() 开始,经由线程池启动和 Acceptor 监听,最终由 TcpConnection 管理具体连接的事件处理。
56 2
|
2月前
基于Reactor模型的高性能网络库之Tcpconnection组件
TcpConnection 由 subLoop 管理 connfd,负责处理具体连接。它封装了连接套接字,通过 Channel 监听可读、可写、关闭、错误等
71 1
|
2月前
|
负载均衡 算法 安全
基于Reactor模式的高性能网络库之线程池组件设计篇
EventLoopThreadPool 是 Reactor 模式中实现“一个主线程 + 多个工作线程”的关键组件,用于高效管理多个 EventLoop 并在多核 CPU 上分担高并发 I/O 压力。通过封装 Thread 类和 EventLoopThread,实现线程创建、管理和事件循环的调度,形成线程池结构。每个 EventLoopThread 管理一个子线程与对应的 EventLoop(subloop),主线程(base loop)通过负载均衡算法将任务派发至各 subloop,从而提升系统性能与并发处理能力。
106 3
|
2月前
基于Reactor模式的高性能网络库github地址
https://github.com/zyi30/reactor-net.git
45 0
|
2月前
基于Reactor模型的高性能网络库之Poller(EpollPoller)组件
封装底层 I/O 多路复用机制(如 epoll)的抽象类 Poller,提供统一接口支持多种实现。Poller 是一个抽象基类,定义了 Channel 管理、事件收集等核心功能,并与 EventLoop 绑定。其子类 EPollPoller 实现了基于 epoll 的具体操作,包括事件等待、Channel 更新和删除等。通过工厂方法可创建默认的 Poller 实例,实现多态调用。
193 60
|
2月前
基于Reactor模型的高性能网络库之Channel组件篇
Channel 是事件通道,它绑定某个文件描述符 fd,注册感兴趣的事件(如读/写),并在事件发生时分发给对应的回调函数。
155 60
|
2月前
|
安全 调度
基于Reactor模型的高性能网络库之核心调度器:EventLoop组件
它负责:监听事件(如 I/O 可读写、定时器)、分发事件、执行回调、管理事件源 Channel 等。
168 57
|
2月前
基于Reactor模型的高性能网络库之时间篇
是一个用于表示时间戳(精确到微秒)**的简单封装类
125 57
|
2月前
|
JSON 网络安全 数据格式
Python网络请求库requests使用详述
总结来说,`requests`库非常适用于需要快速、简易、可靠进行HTTP请求的应用场景,它的简洁性让开发者避免繁琐的网络代码而专注于交互逻辑本身。通过上述方式,你可以利用 `requests`处理大部分常见的HTTP请求需求。
262 51

热门文章

最新文章