基于TensorFlow的犯罪时间序列预测

2020-06-11 09:26雷阳
电子技术与软件工程 2020年1期
关键词:定义神经网络深度

文/雷阳

(1.福建警察学院侦查系 福建省福州市 350003 2.福建警察学院犯罪学研究所 福建省福州市 350003)

人工智能(AI)的高速发展离不开数据“质”和“量”的提升,也离不开高性能计算平台的发展,更离不开算法的不断进步,深度学习则成为了推动算法进步的主力军之一。Tensorflow 作为谷歌开源的深度学习框架,其中包含了谷歌近十年间对人工智能的探索及成功的商业应用。

深度学习带来的技术革命影响深远,学术界早也从中受益,将深度学习广泛应用于各个科学领域。深度学习来源于神经网络技术,这不仅标志着传统神经网络的再次发扬光大,也借助AlphaGo 在围棋的对战中战胜人类,揭开了AI 迅速发展的幕布。机器学习为人工智能指明方向,而深度学习则让机器学习稳扎稳打的进行下去。在近年来国内外互联网大亨对未来的展望中能看出,伴随着深度学习的人工智能将是下一个时代的顶梁柱。

在对一个未知文件做分析的时候,会使用到逻辑回归算法。大部分情况下,当训练数据达到一定数据之前,越多的训练数据可以让逻辑回归算法分析得越准确。换句话说,逻辑回归算法可以根据训练数据提高在文件分析问题上的正确率。深度学习受神经科学的启发,使得机器学习的研究者们常常会使用不同的算法完成不同的任务设计。而深度学习的通用性可以使研究者们跨越多个研究方向甚至在所有研究方向都有所进展。如今的深度学习已经发展到超越了神经科学的观点,可以更广泛地应用于各种不是从神经系统启发而来的机器学习框架。深度学习领域更注重于搭建智能计算机系统,解决人工智能的问题。

在短短的几年内,深度学习从最开始的图像识别,推广到了机器学习的各个领域,而且有着特别出色的表现,例如语音和图像识别、音频和自然语言的处理、化学和生物信息的处理、机器人、电脑游戏、搜索引擎、医学、金融等各大领域。

Tensorflow 是由Jeff Dean 为主要开发者的谷歌团队基于谷歌内部第一代深度学习系统DistBelief 改进而来的通用计算框架,在2011年开发的BistBelief 深度学习工具已经在Google 内部获得巨大成功,但DistBelief 依赖于Google 内部系统框架,为了使深度学习软件拥有较强的通用性,增加其计算速度和稳定性,也为了使其支持更多的计算平台和更多的深度学习算法,2015年11月Google 发布了新的深度学习计算框架TensorFlow,到目前为止已经得到了广泛的应用。

1 TensorFlow开发平台

TensorFlow 借助数学运算和节点之间传递的多维数组(张量)的结构,通过API 将计算工作部署到桌面设备、服务器或者移动设备中的一个或者多个CPU 或GPU。Time Series 分析是统计学中动态数据处理的方法之一。通过使用Python 语言编程,将观测到的Time Series 数据用图线拟合的方式客观地描述系统。在发布的TensorFlow 新版本中,引入了Time Series 模块,现在可以用自回归模型、Anomaly Mixture AR、LSTM三种模型对时间序列进行预测。对于时间序列可简单的看成由观测时间点和观测值所组成。先通过NumPy 或者CSV 读取数据,再通过已经建立的模型进行训练、验证和对时间序列的预测。

图1:程序编写步骤

图2:LSTM 单元结构示意图

通过Anaconda 安装Python 语言与Jupyter 编译器的交互环境,再安装好TensorFlow,打开Jupyter 编译器进行编程,步骤如图1所示。

如图1 中,编程要先通过import 导入各种程序包。例如一般会用“import tensorflow as tf”的形式载入TensorFlow,这样在程序中就可以使用“tf”来代替“tensorflow”来作为模块名称,使得程序更简洁。导入TensorFlow 是赋予Python 访问TensorFlow 类、方法、符号的权限,导入NumPy 主要用于提取处理数据和进行计算,matplotlib 主要用于绘制结果图。同样也会使用“import numpy as np”和“import matplotlib.pyplot as plt”来简化程序。

在设置参数时,通常会设置一些运算函数时需要使用的循环次数等的参数,还可能会定义一个或多个placeholder。Placeholder(占位符)是作为一个计算图可以参数化的接受外部的输入,它是允许程序后面再提供一个数值。

在定义函数、创建训练集和神经网络的时候需要根据不同情况进行编写程序。例如比较常见的,在创建完一个模型之后需要对其进行训练评估,这时候就会需要定义一个比较常用的函数——损失函数loss,这个函数度量当前模型和提供数据的距离,之后可以用梯度下降法等方法来减小损失函数,从而使得建立出来的模型与真实模型越来越接近。

最后的创建会话Session,循环迭代完成目标要求,用matplotlib 对结果进行画图。

图3:LSTM 模型对sin 函数的拟合和预测结果

2 时间序列预测的LSTM模型

假设需要预测一个句子,这个句子的模型的所有信息都需要被考虑进去才能得出最后的结论,不能仅仅靠着最后的一个词或几个词来完成这个预测。这也是对于循环神经网络的一个很大的技术挑战——长期依赖问题。LSTM 的诞生就是为了解决这个问题。这使得LSTM 在这些问题上比普通的循环神经网络更加有优势,也表现得更好。LSTM 还有一个重要的特点就是对序列的处理方式,LSTM 可以收集更多的信息和语境从而完成远距离的信息处理问题和在复杂语言场景里循环神经网络性能受到限制的问题。

与单一的tanh 循环体结构不同的,LSTM 拥有着三个“门”结构,如图2 所示。

LSTM 靠着这些“门”结构让信息有选择性地影响循环神经网络中每个时刻的状态。将使用sigmoid 神经网络作为激活函数的会输出一个0 或1 的数值的全连接神经网络层和按位乘法组合起来形成一个门结构。门打开时(sigmoid 神经网络层输出位1 时)所有信息都可以正常通过,反之,门关闭时(sigmoid 神经网络层输出位0 时)所有信息都无法通过。

LSTM 结构两种门作为核心的存在,那就是“遗忘门”和“输入门”。

遗忘门的公式定义为:

遗忘门的作用就是让循环神经网络忘记之前没有用的信息。它根据当前的输入值xt和上一个时刻的输入值ht-1决定哪些信息需要被遗忘。

输出门的公式定义为:

在遗忘门工作之后,循环神经网络需要从当前的输入中补充新的信息进入系统中。同理,它根据当前的输入值xt和上一个时刻的输入值ht-1决定哪些信息需要被补充进入循环神经网络中。

3 基于TensorFlow的犯罪时间序列预测

首先,对sin 函数进行时间序列建模和测试:

定义的LSTM 模型为:

图4:LSTM 模型对犯罪走势的预测结果

每个时间点的观测值都是一个单独的数值,建立隐藏层大小为128 的LSTM。对前500 个观测值进行输入,向后预测200 个长度后,可以得到最后的预测如图3。

对某地区犯罪时间序列进行预测。在预测前需要使用CSV 文件来读取数据,使用“f=open(‘crime_dataset.csv’)”语句读入犯罪数据,将数据按照日期先后排序后展示数据,如图4 中蓝线所示。先创建训练集,设置步长为20,每次训练60 个数据,输入层及输出层的维度取1。其次定义神经网络变量weights 和biases 作为输入层、输出层的权重和偏置。定义LSTM 网络,将二维张量运算结果作为隐藏层的输入。最后再定义训练模型和损失函数,设置训练次数为10000,预测结果如图4 红线所示,获得了较好的预测效果。

猜你喜欢
定义神经网络深度
深度理解一元一次方程
神经网络抑制无线通信干扰探究
深度观察
深度观察
深度观察
基于神经网络的拉矫机控制模型建立
复数神经网络在基于WiFi的室内LBS应用
基于支持向量机回归和RBF神经网络的PID整定
修辞学的重大定义
山的定义