网络流量预测入门(三)之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. 前端开发入门到进阶第三集【js高度计算公式】

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  2. JS文件延迟和异步加载:defer和async属性

    -般情况下,在文档的 <head> 标签中包含 JavaScript 脚本,或者导入的 JavaScript 文件.这意味着必须等到全部 JavaScript 代码都被加载.解析和执行完以 ...

  3. 深入源码理解Spring整合MyBatis原理

    写在前面 聊一聊MyBatis的核心概念.Spring相关的核心内容,主要结合源码理解Spring是如何整合MyBatis的.(结合右侧目录了解吧) MyBatis相关核心概念粗略回顾 SqlSess ...

  4. Python自动化测试面试题-编程篇

    目录 Python自动化测试面试题-经验篇 Python自动化测试面试题-用例设计篇 Python自动化测试面试题-Linux篇 Python自动化测试面试题-MySQL篇 Python自动化测试面试 ...

  5. argparse模块基本用法

    argparse模块基本用法 在 python 编写的程序中,我们经常会看到的 argparse 相关代码,而它究竟怎么使用呢?接招! argparse 是一个命令行参数解析模块 现在提出需求,我需要 ...

  6. document.all("div).style.display = "none"与 等于""的区别

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. ifix历史数据(H04/H08/H24)转换为CSV文件导出

    在最近的一次环保数据维护中,由于自己疏忽导致数据库中TP值并未有效记录,还好历史趋势有相关记录,问题是我该如何将.H24文件记录导出?在逛论坛后,无意发现一款工具解决了我的燃眉之急-HTD2CSV.e ...

  8. 如何用js得到当前页面的url信息方法

    设置或获取对象指定的文件名或路径. alert(window.location.pathname) 设置或获取整个 URL 为字符串. alert(window.location.href); 设置或 ...

  9. php 几个算法

    /** * 返回当前运行文件名 * @acces private * @return string */ private function run_filename() { $tmparr = exp ...

  10. python代码下载m3u8视频

    代码如下: # -*- coding: utf-8 -*- import requests import re import os import base64 from Crypto.Cipher i ...