网络流量预测入门(三)之LSTM预测网络流量

在上篇博客LSTM机器学习生成音乐中,介绍了如何使用LSTM生成音乐,而在上上篇网络流量预测入门(二)之LSTM介绍中,介绍了LSTM的基本原理

在这篇博客中,将介绍如何使用SVR和LSTM对网络流量进行预测。

环境版本信息:

  • keras:2.4.3
  • numpy:1.19.2
  • tensorflow:2.4.1
  • sklearn:0.23.2

项目地址:network-traffic-predict

数据集介绍

数据集来自欧洲11个城市的ISP互联网流量(用ec_data表示)和英国学术网流量(用uk_data表示),数据集见Github

ec_data统计了从2005年7月6号至2005年7月28号共计14772组网络流量数据,uk_data统计了从2004年11月19号至2005年1月27号共计19888组网络数据。ec_data和uk_data都是以5分钟为间隔进行采样得到的数据,数据见下图。由图中可以看出,ec_data和uk_data具有很强的周期性以及规律性,因此可以大胆的搏一搏单车变摩托:LSTM在预测的时候能够有着比较好的结果。

预测流程

在这篇博客中,使用前10个序列去预测下一个时间序列的网络流量值。当然,也可以如同简单明朗的 RNN 写诗教程一样,通过前10个序列去预测后面\(N\)个序列的网络流量值,如下图所示。

数据集准备

流量预测的目的是使用前\(K\)个序列去预测后面\(N\)个序列(这篇博客\(K=10,N=1\)),从机器学习训练的角度去看,前\(K\)个序列为\(X\),后面\(N\)个序列则为\(Y\)。因此,需要从网络流量数据中构建数据集。构建数据集的过程原理在简单明朗的 RNN 写诗教程详细说过,以诗为例,过程如下:

通过上面的操作,就可以将网络流量序列变成X_Data和Y_Data,部分代码如下:

# all_data 即为数据集,sequence_len即为K
sequence_len = 10
X = []
Y = []
for i in range(len(all_data)-sequence_len):
X.append(all_data[i:i+sequence_len])
Y.append(all_data[i+sequence_len])
X = np.array(X)
Y = np.array(Y)

SVR预测

SVR使用sklearn提供的默认参数,默认参数设置如下:

超参数 取值
kernel rbf
gamma scale
tol 0.001
C 1.0

代码见:Github,使用SVR进行预测还是挺简单的,看看代码就能够看懂了。

预测结果图如下图所示:

  • ec_data:MAPE=0.095

  • uk_data:MAPE=0.084

LSTM 预测

LSTM的模型结构如下图所示,是一个很简单的双层LSTM网络,并没有加入一些特殊的结构。

代码见:Github

预测结果:

  • ec_data:MAPE=0.040

  • uk_data:MAPE=0.035

优化点

可以将uk_data和ec_data进行小波变换,然后将小波变换后的结果进行训练。在预测的过程中,将预测结果进行反小波变换恢复成网络流量时间序列,可以有效的消除网络流量突变造成的影响。如果有兴趣,值得试一试。

网络流量预测入门(三)之LSTM预测网络流量的更多相关文章

  1. 网络流量预测入门(二)之LSTM介绍

    目录 网络流量预测入门(二)之LSTM介绍 LSTM简介 Simple RNN的弊端 LSTM的结构 细胞状态(Cell State) 门(Gate) 遗忘门(Forget Gate) 输入门(Inp ...

  2. 网络流量预测入门(一)之RNN 介绍

    目录 网络流量预测入门(一)之RNN 介绍 RNN简介 RNN 结构 RNN原理 结构原理 损失函数$E$ 反向传播 总结 参考 网络流量预测入门(一)之RNN 介绍 了解RNN之前,神经网络的知识是 ...

  3. 脑残式网络编程入门(三):HTTP协议必知必会的一些知识

    本文原作者:“竹千代”,原文由“玉刚说”写作平台提供写作赞助,原文版权归“玉刚说”微信公众号所有,即时通讯网收录时有改动. 1.前言 无论是即时通讯应用还是传统的信息系统,Http协议都是我们最常打交 ...

  4. 通过房价预测入门Kaggle

    今天看了个新闻,说是中国社会科学院城市发展与环境研究所及社会科学文献出版社共同发布<房地产蓝皮书:中国房地产发展报告No.16(2019)>指出房价上涨7.6%,看得我都坐不住了,这房价上 ...

  5. 第十三节,卷积神经网络之经典网络LeNet-5、AlexNet、VGG-16、ResNet(三)(后面附有一些网络英文翻译文章链接)

    一 实例探索 上一节我们介绍了卷积神经网络的基本构建,比如卷积层.池化层以及全连接层这些组件.事实上,过去几年计算机视觉研究中的大量研究都集中在如何把这些基本构件组合起来,形成有效的卷积神经网络.最直 ...

  6. 【原创】NIO框架入门(三):iOS与MINA2、Netty4的跨平台UDP双向通信实战

    前言 本文将演示一个iOS客户端程序,通过UDP协议与两个典型的NIO框架服务端,实现跨平台双向通信的完整Demo.服务端将分别用MINA2和Netty4进行实现,而通信时服务端你只需选其一就行了.同 ...

  7. Web技术的发展 网络发展简介(三)

    在上一篇文章中,对TCP/IP通信协议进行了简单的介绍 通信协议是通信的理论基石,计算机.操作系统以及各种网络设备对通信的支持是计算机网络通信的物质基础 而web服务则是运行于应用层,借助于应用层的协 ...

  8. python网络爬虫之入门[一]

    目录 前言 一.探讨什么是python网络爬虫? 二.一个针对于网络传输的抓包工具fiddler 三.学习request模块来爬取第一个网页 * 扩展内容(爬取top250的网页) 后记 @(目录) ...

  9. IM开发者的零基础通信技术入门(三):国人通信方式的百年变迁

    [来源申明]本文原文来自:微信公众号“鲜枣课堂”,官方网站:xzclass.com,原题为:<中国通信的百年沉浮>,本文引用时已征得原作者同意.为了更好的内容呈现,即时通讯网在收录时内容有 ...

随机推荐

  1. springMVC-8-jackson使用

    springMVC默认的 Json 解决方案是 Jackson, 所以只需要导入 Jackson 的 jar, 即可使用 <!--Jackson--> <dependency> ...

  2. selenium定位,操作元素

    1.定位方式 1.id driver.find_element_by_id('username').send_keys('byhy') 2.name driver.find_element_by_na ...

  3. IPV6改造?华为云如此简单

    现在很多企业都在搞这个IPV6改造,说实话这个IPV6改造我这边也不是特别精通,也是通过查阅各种资料来了解IPV6这个东西,下面是我查的一些资料大家可以借鉴一下. IPv6改造三步曲--Vecloud ...

  4. Gogs+Drone搭建CI/CD平台

    Gogs 是由 Go 语言编写的 Git 服务器,由中国人主导开发的一款开源项目,搭建方便并且拥有完善的中文文档,配合 Drone 可以实现持续集成/持续部署.本文介绍如何通过 Docker 搭建 G ...

  5. 🏆【Java技术专区】「并发编程专题」教你如何使用异步神器CompletableFuture

    前提概要 在java8以前,我们使用java的多线程编程,一般是通过Runnable中的run方法来完成,这种方式,有个很明显的缺点,就是,没有返回值.这时候,大家可能会去尝试使用Callable中的 ...

  6. js 日期转为时间戳

    在js中,将一个字符转化成Date型也不是什么难事:var str = '2013-08-30'; // 日期字符串str = str.replace(/-/g,'/'); // 将-替换成/,因为下 ...

  7. Verilog function的使用

    function的用法 function的标准写法如下: function  <返回值的类型或是范围>  (函数名): <端口说明语句> //input xxx <变量类 ...

  8. noip模拟30[毛毛毛探探探]

    \(noip模拟30\;solutions\) 所以说,这次被初中的大神给爆了????? 其实真的不甘心,这次考场上的遗憾太多,浪费的时间过多,心情非常不好 用这篇题解来结束这场让人伤心的考试吧 \( ...

  9. 浏览器中hook对象属性

    先获取window对象属性 来源: 夜幕爬虫安全论坛 原文链接: http://bbs.nightteam.cn/thread-485.htm?orderby=desc&user=7

  10. [JS]函数作为值

    在JavaScript中,函数不仅是语法,也是值.这意味着可以把函数赋值给变量.保存为对象的属性或者数组的元素.作为参数传给其他函数. 将函数赋值给变量s,实际上变量引用的是函数对象.不仅可以通过函数 ...