2019-05-30 11:33:02 zuiyishihefang 阅读数 3009
  • 深度学习--RNN与LSTM实战项目-唐诗生成视频教学

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 课程讲解深度学习中RNN与LSTM网络结构特点,实例演示如何使用Tensorflow构造网络模型。并且讲解了如何基于唐诗数据集去建立LSTM模型进行序列预测。代码示例演示如何使用Tensorflow从零开始训练唐诗生成网络模型。 专属会员卡更超值:http://edu.csdn.net/lecturer/1079

    3642 人正在学习 去看看 唐宇迪

交通预见未来 (5)基于深度学习的短时道路交通流预测

1、文章信息

《Short-Term Traffic Flow Prediction with Conv-LSTM》。

这篇文章是一篇会议论文,2017第九届无线通信与信号处理国际会议(WCSP),福州大学物理与信息工程学院的几位老师,被引10次。

2、主体内容

本文提出了一种基于深度学习的短时交通流预测方法。交通流数据包含三个主要特征:时间特征、空间特征和周期性特征。我们把CNN和LSTM结合起来生成一个ConvLSTM模块,用于提取交通流的时空特征,然后使用Bi-LSTM(双向LSTM,Keras中有相应模块)提取交通流的周期特征。

利用ConvLSTM模块对相邻区域的短时交通流数据进行处理,提取时空特征;利用双向LSTM对预测点历史交通数据进行处理,提取交通流数据的周期特征。提出了一种无需数据预处理和数据特征提取的端到端深度学习短时交通流预测体系结构。最后,集中时空特征和周期特征对交通流进行预测。

3、创新点

既使用了ConvLSTM,又使用了Bi-LSTM, 结构新颖。

4、大家比较关注的算法实现

我们将交通流数据映射到一维向量。我们将预测点的交通流数据放入向量中心,根据与预测点的距离,将其他点的交通流数据依距离放在该向量中心(预测点)两侧。

将不同时刻的一维空间信息向量组合成矩阵如下:

其中s表示预测点(一列代表一个预测点),t表示时间。

周期数据可以表示为以下矩阵:

其中d代表昨天的相同时刻,w代表上周的相同时刻。

上述数据矩阵即为本文提出的深度神经网络结构的输入数据。其中,损失函数为MSE,优化器为RMSprop。

4.1 ConvLSTM的结构

ConvLSTM的输入数据既为公式3.1。一行作为一个向量,代表着一个time step所有预测点之间的空间信息,我们使用一维Conv(Conv1D)对公式3.1中的每一行进行处理,自然也是利用一维卷积核滤波器(kernal size=1),通过滑动滤波器获取每个time step局部感知域的卷积信息(空间信息)。然后,将局部特征聚合成全局特征。

紧接着加池化层,不同之处在于池化滤波器不进行复杂的卷积运算。本文中使用一维平均池化层(AveragePooling1D)。通过池化将生成的特征序列C缩减到原维度的一半大小。这两种特征提取使得深度神经网络在处理交通流数据时具有更高的失真容忍度。

分别对时间序列向量(式3.1中的每一行)的各个元素进行卷积和池化处理后,输出结果变为时间序列向量Ct = (C1, C2, C3,…,Ct)。向量中的每个元素都是区域内各点间交通流的空间相关性。(该表达式中每个元素代表着一个行向量,行向量的维度比式3.1中行向量的维度要小,因为经过了池化)

上面得到的时间序列向量Ct即为LSTM的输入数据。

4.2 双向LSTM的结构(Bi-directional LSTM)

交通流也具有很强的周期性特征。本文将增加交通流的周期性特征作为补充信息来预测短期交通流。在提取交通流数据的周期性特征时,我们会同时处理前一天的同一时间和上一周的同一时间的交通流信息。在处理了历史信息后,得到了全时间序列数据(我想应该是将上一周的数据和前一天的数据放到预测当天数据的前面,组成全时间序列数据以获取周期性信息。)。

双向LSTM的结构由上下堆叠的两个单向LSTM组成。因此,Bi-LSTM输入包含预测时间前后的时间序列,在每个T时刻,输入序列被输入给两个方向相反LSTM,输出由两个LSTM决定。每个反向LSTM的误差传播与正向LSTM传播算法相同。Bi-LSTM结构如下图所示,其中xi为LSTM的输入,Of为正向LSTM的输出,Ob表示反向LSTM的输出。

简单来说,就是再Keras中将LSTM换成Bidirectional(LSTM)即可。一些细节信息例如使用了多少个timestep, 历史数据如何处理输入到Bi-LSTM中,池化前后的维度变化 等,文章交代的并不清楚,毕竟会议论文。

 

关注微信公众号《当交通遇上机器学习》,后台回复“数据”即可获取高达175G的四个月的滴滴GPS数据和滴滴订单数据的获取方式,以及从数据处理(Oracle数据库)、模型构建(机器学习)、编程实现(python)到可视化(ArcGIS)等一系列视频教程。

公众号以交通大数据为主线,专注于人工智能、机器学习、深度学习在道路交通和轨道交通领域内的科研前沿与应用,在交通大数据与机器学习的道路上越走越远!

https://img-blog.csdnimg.cn/20190514010027398.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3p1aXlpc2hpaGVmYW5n,size_16,color_FFFFFF,t_70

2020-03-23 10:44:42 qq_43360777 阅读数 20
  • 深度学习--RNN与LSTM实战项目-唐诗生成视频教学

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 课程讲解深度学习中RNN与LSTM网络结构特点,实例演示如何使用Tensorflow构造网络模型。并且讲解了如何基于唐诗数据集去建立LSTM模型进行序列预测。代码示例演示如何使用Tensorflow从零开始训练唐诗生成网络模型。 专属会员卡更超值:http://edu.csdn.net/lecturer/1079

    3642 人正在学习 去看看 唐宇迪

目的:实现预测下一时段网络流量特征变化和网络安全事件分类识别,为NIDS实现网络安全事件的预警功能提供了方法分析。
方法:由三个主要阶段组成的神经网络模型:在第一阶段,对NIDS中网络流量数据进行时间序列预处理和长期短期记忆(LSTM)网络学习时间特征。在第二阶段,卷积神经网络(CNN)学习网络流量的空间特征。在第三阶段,基于前面步骤得到训练后的LSTM模型用以预测后续时间戳中的网络流量时间序列,训练后的CNN模型对该时间序列进行安全事件分类,用以估计下一时间段中网络安全事件的出现概率。
预测方法模型主要由时间序列预测模型和攻击分类模型组成,如图1所示。其中时间序列预测模块由LSTM实现,攻击分类模型由LetNet实现。
在这里插入图片描述
特征归一化处理
LSTM输入特征:将NIDS的网络流量数据集通过数据预处理构造为包含多个连续流量数据的时间序列,每个训练样本由相邻时间戳的两个时间序列组成。
CNN输入特征:将拥有n维特征项的流量数据通过独热编码(OHE)后转换为单个m×m的流图像, m=根号n

数据集:2017年,加拿大新布伦瑞克大学(UNB)信息安全卓越中心(ISCX)发布了一个名为CICIDS2017的入侵检测数据集。如DoS、DDoS、Bruteforce、XSS,SQL注入、Infiltration、PortScan和Botnet。
特征:根据ImanSharafaldin[32],在实验中选择包含了表1中显示的每种攻击对应最佳选择功能特征值,共计33个。
特征提取工具:CICFlowMeter
在这里插入图片描述

2020-02-29 21:15:40 wht18720080085 阅读数 108
  • 深度学习--RNN与LSTM实战项目-唐诗生成视频教学

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 课程讲解深度学习中RNN与LSTM网络结构特点,实例演示如何使用Tensorflow构造网络模型。并且讲解了如何基于唐诗数据集去建立LSTM模型进行序列预测。代码示例演示如何使用Tensorflow从零开始训练唐诗生成网络模型。 专属会员卡更超值:http://edu.csdn.net/lecturer/1079

    3642 人正在学习 去看看 唐宇迪

传统机器学习算法的特征:输入-》人工特征提取-》权重学习-》预测结果

深度学习算法: 输入-》基础特征提取-》多层复杂特征提取-》权重学习-》预测结果

例如深度学习在图像中的应用:

输入-》基础特征提取(基础特征:图片像素)-》多层复杂特征提取(第一层(线条),第二层(简单形状)第三层(复杂形状))-》权重学习-》预测结果

机器学习领域三大方向:自然语言处理、计算机视觉和语音识别

1958年提出感知机模型,是首个可以根据样例数据来学习特征权重的模型。

二十世纪八十年代神经网络研究印分布式知识表达和神经网络反向传播算法的提出而兴起。至今反向传播算法仍是训练神经网络的主要方法。

LSTM模型:1991年提出,可有效对较长的序列进行建模,主要应用:自然语言处理、机器翻译、语音识别、时序预测等。

1998年,使用支持向量机算法可将手写字符识别错误率降低到0.8%。

随着GPU、云计算的出现,深度学习开始了新的高潮。

深度学习最早兴起于图像识别,其中计算机视觉是深度学习技术最早实现突破性成就的领域。

 

 

 

 

2020-03-02 10:53:06 dengkane 阅读数 395
  • 深度学习--RNN与LSTM实战项目-唐诗生成视频教学

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 课程讲解深度学习中RNN与LSTM网络结构特点,实例演示如何使用Tensorflow构造网络模型。并且讲解了如何基于唐诗数据集去建立LSTM模型进行序列预测。代码示例演示如何使用Tensorflow从零开始训练唐诗生成网络模型。 专属会员卡更超值:http://edu.csdn.net/lecturer/1079

    3642 人正在学习 去看看 唐宇迪

最近研究了一下用深度学习算法来预测股票未来的走势,看了网上不少别人分享的案例,也实际进行了测试,感觉用 LSTM 算法比较适用。长短期记忆网络(LSTM,Long Short-Term Memory)是一种时间循环神经网络,是为了解决一般的RNN(循环神经网络)存在的长期依赖问题而专门设计出来的,

看上面图感觉 LSTM 很深奥,其实简单理解是把过往基于时间序列的数据集跟预测目标数据做规律探索,LSTM 会结合比较久以前的数据(long)和最近的数据(short-term)做出综合判断,发现内在规律,形成预测模型。

拿预测股票价格为例,我们可以把某只股票今天的收盘价作为预测目标,昨天开始一直往前 60 个交易日的收盘价格作为输入数据,也就是把前面 60 个收盘价作为机器学习的 X 输入,今天的收盘价是 y 输出。按这样的规律依次往前准备 X 和 y 数据,例如昨天的收盘价是一个新的 y,昨天之前 60 个交易日的收盘价作为一个新的 X。根据你能收集到的价格数据,可以准备出大量的 X 和 y,作为训练 LSTM 算法的数据。

下面结合程序做详细解释。

1.引入需要的包

1
2
3
4
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import tushare as ts   #我们是使用 tushare 来下载股票数据

 

2.下载股票数据

1
2
3
4
5
6
7
ts.set_token('xxx')   #需要在 tushare 官网申请一个账号,然后得到 token 后才能通过数据接口获取数据
pro = ts.pro_api()

#这里是用 000001 平安银行为例,下载从 2015-1-1 到最近某一天的股价数据
df = pro.daily(ts_code=‘000001.SZ’, start_date=‘2015-01-01’, end_date=‘2020-02-25’)

df.head()   #用 df.head() 可以查看一下下载下来的股票价格数据,显示数据如下:

 

3.做数据准备

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#把数据按时间调转顺序,最新的放后面,从 tushare 下载的数据是最新的在前面,为了后面准备 X,y 数据方便
df = df.iloc[::-1]
df.reset_index(inplace=True)

#只用数据里面的收盘价字段的数据,也可以测试用更多价格字段作为预测输入数据
training_set = df.loc[:, ['close']]

#只取价格数据,不要表头等内容
training_set = training_set.values

#对数据做规则化处理,都按比例转成 0 到 1 之间的数据,这是为了避免真实数据过大或过小影响模型判断
from sklearn.preprocessing import MinMaxScaler
sc = MinMaxScaler(feature_range = (0, 1))
training_set_scaled = sc.fit_transform(training_set)

#准备 X 和 y 数据,就类似前面解释的,先用最近一个交易日的收盘价作为第一个 y,然后这个交易日以前的 60 个交易日的收盘价作为 X。
#这样依次往前推,例如最近第二个收盘价是第二个 y,而最新第二个收盘价以前的 60 个交易日收盘价作为第二个 X,依次往前准备出大量的 X 和 y,用于后面的训练。
X_train = []
y_train = []
for i in range(60, len(training_set_scaled)):
    X_train.append(training_set_scaled[i-60:i])
    y_train.append(training_set_scaled[i, training_set_scaled.shape[1] - 1])
X_train, y_train = np.array(X_train), np.array(y_train)

 

4.创建 LSTM 模型并训练

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#这里是使用 Keras,Keras 大大简化了模型创建工作,背后的真正算法实现是用 TensorFlow 或其他。

from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
from keras.layers import Dropout

regressor = Sequential()
 
regressor.add(LSTM(units = 50, return_sequences = True, input_shape = (X_train.shape[1], X_train.shape[2])))
regressor.add(Dropout(0.2))
 
regressor.add(LSTM(units = 50, return_sequences = True))
regressor.add(Dropout(0.2))
 
regressor.add(LSTM(units = 50, return_sequences = True))
regressor.add(Dropout(0.2))

regressor.add(LSTM(units = 50))
regressor.add(Dropout(0.2))

regressor.add(Dense(units = 1))

regressor.compile(optimizer = 'adam', loss = 'mean_squared_error')

regressor.fit(X_train, y_train, epochs = 100, batch_size = 32)

 

整个训练过程需要持续一段时间,根据数据量的大小需要的训练时间也不同,界面输出大致如下:

 

5.预测未来的价格

我们先获取用于预测的数据,比如拿到今天的收盘价后,再跟前面 59 个交易日的收盘价组成一个 X,然后用上面训练出来的模型进行预测 y 值,这个 y 值就是明天的预测股票价格。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import tushare as ts

ts.set_token('xxx')
pro = ts.pro_api()

df_test = pro.index_daily(ts_code='000001.SZ', start_date='2020-02-26', end_date='2020-02-26')

#也是把数据调转顺序,最新的放后面
df_test = df_test.iloc[::-1]
df_test.reset_index(inplace=True)

#只用 close 收盘价这个字段
dataset_test = df_test.loc[:, ['close']]

#然后把测试数据和前面的训练数据整合到一起
dataset_total = pd.concat( (df_test[['close']],df[['close']]), axis = 0)

#也是只取具体数值,去掉表头等信息
inputs = dataset_total[len(dataset_total) - len(dataset_test) - 60:].values

#这里要按照特定的格式要求做一个数组变形,Keras 对数据格式有特定要求
inputs = inputs.reshape(-1, dataset_test.shape[1])

#对数据也要做一次规则化处理
inputs = sc.transform(inputs)

predicted_stock_price = []

#准备测试数据,就是把要测试的数据和以前训练的数据结合起来组装出要测试的 X,因为是要利用过去 60 个交易日的数据,只靠一个交易日的收盘价是不够的
X_test = []

for i in range(60, 60 + len(dataset_test)):
    X_test.append(inputs[i-60:i])
X_test = np.array(X_test)

#对预测数据也做一次数组变形处理
X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], dataset_test.shape[1]))

#用前面训练的模型预测价格,得出来的是从 0 到 1 之间的规则化数值
predicted_stock_price = regressor.predict(X_test)

#再把规则化数据转回成正常的价格数据,现在就可以得出预测的下个交易日收盘价格
predicted_stock_price = sc1.inverse_transform(predicted_stock_price)

 

如果把上面的预测过程再循环往未来做几次(把预测出来的下个交易日数据作为新的输入去预测再下一个交易日价格),可以预测出未来几天的股票价格,下面图可以示意出来。

深度强化学习

阅读数 706

没有更多推荐了,返回首页