«上一篇 下一篇»
  计算机工程  2019, Vol. 45 Issue (7): 229-236, 241  DOI: 10.19678/j.issn.1000-3428.0051574
0

引用本文  

俞庆英, 李倩, 陈传明, 等. 基于BP神经网络的异常轨迹检测方法[J]. 计算机工程, 2019, 45(7), 229-236, 241. DOI: 10.19678/j.issn.1000-3428.0051574.
YU Qingying, LI Qian, CHEN Chuanming, et al. Abnormal Trajectory Detection MethodBased on BP Neural Network[J]. Computer Engineering, 2019, 45(7), 229-236, 241. DOI: 10.19678/j.issn.1000-3428.0051574.

基金项目

国家自然科学基金(61702010,61672039);安徽省高校自然科学研究重点项目(KJ2017A327);芜湖市科技计划项目(2016cxy04)

作者简介

俞庆英(1980-), 女, 副教授、博士研究生, 主研方向为空间数据处理、信息安全, E-mail:ahnuyuq@ahnu.edu.cn;
李倩, 本科生;
陈传明, 副教授、博士研究生;
林文诗, 硕士研究生

文章历史

收稿日期:2018-05-17
修回日期:2018-06-20
基于BP神经网络的异常轨迹检测方法
俞庆英a,b , 李倩a,b , 陈传明a,b , 林文诗a,b     
a. 安徽师范大学 计算机与信息学院, 安徽 芜湖 241002;
b. 安徽师范大学 网络与信息安全安徽省重点实验室, 安徽 芜湖 241002
摘要:为有效利用轨迹内外部属性进行异常检测,提出一种基于BP神经网络的异常轨迹识别方法。对原始轨迹数据进行去噪处理,存储至百度云的LBS云端,基于百度地图的轨迹数据可视化网站实现轨迹显示,并通过归一化数据计算轨迹属性值。同时,将轨迹内外部特征属性作为BP神经网络算法的输入层,轨迹相似度量值作为输出层,调整隐含层系数得到训练模型,从而识别用户异常轨迹。在2个用户数据集上的仿真结果表明,该方法的异常轨迹识别准确率分别达到92.3%和100%。
关键词轨迹数据集    BP神经网络    百度LBS云服务    轨迹属性    训练模型    异常轨迹检测    
Abnormal Trajectory Detection MethodBased on BP Neural Network
YU Qingyinga,b , LI Qiana,b , CHEN Chuanminga,b , LIN Wenshia,b     
a. School of Computer and Information, Anhui Normal University, Wuhu, Anhui 241002, China;
b. Anhui Provincial Key Laboratory of Network and Information Security, Anhui Normal University, Wuhu, Anhui 241002, China
Abstract: In order to effectively utilize the internal and external attributes of the trajectory for anomaly detection, an abnormal trajectory recognition method based on BP neural network is proposed.The original trajectory data is denoised and stored to the LBS cloud of Baidu Cloud.The trajectory data based on Baidu map is designed to visualize the trajectory of the website, and the trajectory attribute value is calculated by normalizing the data.At the same time, the internal and external feature attributes of the trajectory are used as the input layer of the BP neural network algorithm, the trajectory similarity measure is used as the output layer, and the hidden layer coefficient is adjusted to obtain the training model, thereby identifying the user's abnormal trajectory.Simulation results on two user datasets show that the accuracy of the anomaly trajectory identification of the proposed method is 92.3% and 100%, respectively.
Key words: trajectory dataset    BP neural network    Baidu LBS cloud service    trajectory attributes    training model    abnormal trajectory detection    
0 概述

随着移动通信技术、无线网络技术和全球定位系统的发展, 人们利用智能设备可以方便地获取移动对象的位置及轨迹数据[1-3]。移动轨迹数据是由带有时间标记的位置信息所组成的有序位置序列, 其包含丰富的时空信息[4-6], 其中, 异常轨迹检测是轨迹模式挖掘中的一个重要研究课题, 广泛应用于智能交通和用户行为分析等领域[7-9]。轨迹数据具有丰富的特征, 提取并分析各种属性特征是轨迹数据挖掘的基础。BP神经网络是一个基于经验知识的有自然倾向的并行分布处理器, 通过自身的训练, 学习某种规则, 在给定输入值时即可得到最接近期望输出值的结果[10]。本文提出一种基于BP神经网络的异常轨迹检测方法, 将轨迹自身的基本属性作为BP神经网络的输入层, 调整隐含层的权值和阈值得到轨迹异常判断模型, 利用训练好的模型判定用户轨迹是否异常, 从而得到用户的异常轨迹数据。

1 相关工作

为检测出用户的异常轨迹, 国内外学者进行大量的研究。文献[11]使用基于R-Tree的高效异常轨迹检测算法, 根据轨迹间的距离特征矩阵来计算轨迹之间的距离。文献[12]提出基于核主成分分析(KPCA)的异常轨迹检测方法, 采用KPCA对轨迹进行空间转换, 将非线性空间转换成线性空间, 利用一类支持向量机对轨迹特征数据进行无监督学习和预测, 最终检测出具有异常行为的轨迹。文献[13]提出依赖时间的异常轨迹检测算法TPRO, 将每条轨迹与其相关的常规路线进行比较, 找出历史轨迹数据集中所有的异常轨迹。文献[14]提出基于轨迹多特征的在线异常检测方法, 通过高斯模型学习监控场景的轨迹起点位置分布模式, 依据该模式建立一个轨迹起点分布模型, 然后将移动窗当作基本比较单元, 建立一个基于位置距离及方向距离的分类器, 通过在线多特征异常检测算法从起点分布、空间位置和运动方向3个层次来衡量待测轨迹和正常轨迹模式之间的差异, 判断轨迹是否异常, 并利用滑动窗口实现对动态递增轨迹数据的在线检测。文献[15]提取相同起止点的轨迹集, 再基于轨迹间的相似性聚类实现出租车异常轨迹的检测。文献[16]总结了现有轨迹异常检测技术的研究成果, 根据轨迹异常检测方法的不足, 提出一种轨迹大数据异常检测的系统架构, 研究了轨迹异常的演化分析、在线轨迹流的异常检测、轨迹异常检测系统的基准评测、异常检测结果语义分析的数据融合以及轨迹异常检测的可视化技术。

上述研究虽取得一定成果, 但在检测异常轨迹时没有充分利用轨迹内部各个特征之间的联系。另外, 目前没有一套完备的研究体系判断个人轨迹分类、异常检测中的用户轨迹是否属于异常。因此, 本文研究基于BP神经网络的异常轨迹检测方法。

2 问题描述及相关定义 2.1 问题描述

目前, 轨迹异常检测主要以轨迹空间特征为主, 较少使用轨迹自身的属性。通过对非线性轨迹属性数据进行分类, 从而检测轨迹数据是否属于异常, 是一个切实可行的轨迹分类方法。BP神经网络能够较好地对非线性数据进行分类, 主要分为2个阶段。第1阶段是信号的前向传播, 以一定的学习原则进行学习, 主要利用一些观测样本来训练网络, 首先设定各节点传递函数的参数、形式以及各边权重的初始值, 对每个输入值, BP神经网络依据边的权重及各节点的函数计算输出结果。第2阶段是误差的反向传播, 把输出结果和实际结果相比较, 计算输出误差, 以误差的方向和大小为依据, 逆向调整各边的权重, 使BP神经网络的输出结果逐渐向实际的观测结果靠近。

BP神经网络是一种单向传播、多层前向网络。除输入、输出节点外, 还有一层或多层隐含节点, 其上下层节点之间全连接, 每层神经元之间无连接。假设输入层有n个神经元, 可接受输入向量 X = (x1, x2, …, xn), 输入值从输入层节点依次经各隐含层节点, 然后到达输出节点, 产生输出向量 Y = (y1, y2, …), 每个节点代表单个神经元, 其中对应的传递函数为Sigmoid型函数。

2.1.1 传递函数设计

传递函数使用非线性函数logsig(), 该对数S形函数的曲线如图 1所示。

Download:
图 1 对数S形函数的曲线图

其中, $\log {\mathop{\rm sig}\nolimits} (x) = \frac{1}{{1 + {{\rm{e}}^{ - x}}}}$, 产生0~1之间的输出。本文实验将轨迹分为2个类别, 因此采用此函数作为传递函数得到0和1这2个输出, 0代表异常轨迹, 1代表正常轨迹。

2.1.2 训练函数设计

网络的训练使用OSS算法[17], 其主要函数是trainoss。权值按照W=W+f×dX进行修正, 其中dX为搜索方向, f是沿着搜索方向的最小化性能函数。一开始的搜索沿着梯度负方向进行, 然后在迭代中按照dX=gX+Ac×Xstep+Bc×dgX来修改, 其中, gX表示梯度, Xstep表示前次迭代权值的变化, dgX代表最近一次迭代梯度的变化, AcBc代表新搜索方向的调整参数。该算法具有较快的收敛速度, 且网络性能好, 因此本文实验训练函数采用trainoss。

2.1.3 网络结构设计

本文中使用多输入、多隐含神经元和单输出的单层BP神经网络。其网络结构如图 2所示。

Download:
图 2 单层BP神经网络结构

网络学习公式推导[18]通过对网络权值(wi, j, Tj)与阈值(θ)进行修正, 使误差函数(E)沿梯度方向下降。其中, xi代表BP神经网络的输入节点, yj代表隐节点, Ol为输出节点。输入节点与隐节点的网络权值为wi, j, 隐节点与输出节点间的网络权值为Tj

本文输入节点xi(1≤i≤4)的值分别为轨迹的4个属性值, 网络权值和阈值使用Matlab中BP神经网络工具箱中的初始值。具体分析如下:

1) 输入-隐层神经元

输出计算如式(1)所示。

$ {y_j} = f\left( {\sum\limits_i {{w_{i,j}}} {x_i} - {\theta _i}} \right) = f\left( {ne{t_j}} \right) $ (1)

隐节点层(输入节点到隐节点)的误差公式如式(2)所示。

$ \delta_{j}^{\prime}=y_{j}\left(1-y_{j}\right) \sum\limits_{l} \delta_{l} T_{j} $ (2)

隐节点层的权值修正公式为:

$ w_{i, j}(k+1)=w_{i, j}(k)+\eta^{\prime} \delta_{j}^{\prime} x_{i} $ (3)

其中, k为迭代次数, η′∈(0, 1)为学习率, 其值由算法确定。

隐节点层阈值修正公式如式(4)所示。

$ \theta_{j}(k+1)=\theta_{j}(k)+\eta^{\prime} \delta_{j}^{\prime} $ (4)

2) 隐层-输出层神经元

输出计算如式(5)所示。

$ {O_l} = f\left( {\sum\limits_j {{T_j}} {y_j} - {\theta _l}} \right) = f\left( {{\rm{ne}}{{\rm{t}}_l}} \right) $ (5)

其中, $ne{t_l} = \sum\limits_j {{T_j}} {y_j} - {\theta _l}$

设输出节点的期望输出为tl, 输出层(隐节点到输出节点)的误差计算如式(6)所示。

$ {\delta _l} = \left( {{t_l} - {O_l}} \right) \cdot {O_l} \cdot \left( {1 - {O_l}} \right) $ (6)

输出层权修正值计算如式(7)所示。

$ {T_j}\left( {k + 1} \right) = {T_j}\left( k \right) + \eta {\delta _l}{y_j} $ (7)

其中, η∈(0, 1)为学习率, 本文η=0.1。

输出层阈值修正如式(8)所示。

$ {\theta _l}\left( {k + 1} \right) = {\theta _l}\left( k \right) + \eta '{\delta '_l} $ (8)

其中, δ′ l表示δl的导数, 且对于传递函数$f{\rm{(}}x{\rm{) = }}\frac{1}{{1 + {{\rm{e}}^{ - x}}}}$, 存在关系${f^\prime }(x) = f(x) \cdot [1 - f(x)]$

所有样本的总误差E如式(9)所示。

$ E=\sum\limits_{i=1}^{p} e_{i}<\varepsilon $ (9)

一个样本的误差ei如式(10)所示。

$ e_{i}=\frac{1}{2} \sum\limits_{l=1}^{n}\left(t_{l}-O_{l}\right)^{2} $ (10)

其中, ε为总误差, 本文设置其值为10-15, p为样本数, n为输出节点数。本文实验中60条轨迹样本用作训练, 输出节点仅有一个。因此p的值为60, n的值为1。

2.2 相关定义

轨迹是一个有序位置点构成的数据集, 它具有多种属性, 本节对有关的轨迹及其属性进行定义。

定义1   (轨迹)轨迹是一个由时空三元组所构成的有序集合, 其形式如式(11)所示。

$ T=\left\{\left(t_{1}, x_{1}, y_{1}\right),\left(t_{2}, x_{2}, y_{2}\right), \cdots,\left(t_{n}, x_{n}, y_{n}\right)\right\} $ (11)

其中, 时空三元组(ti, xi, yi)为轨迹T中的第i个位置点, ti表示此位置点的采样时刻, (xi, yi)表示在ti时刻所处的GPS坐标(一般是经度和纬度值)(1≤in)。

定义2   (轨迹段)设有形如式(11)所示的一条轨迹T, 定义其连续两点形成的路径为一个轨迹段, T中第i个轨迹段记为[(xi, yi), (xi+1, yi+1)], 其长度li的计算方法如式(12)所示。

$ l_{i}=\sqrt{\left(x_{i+1}-x_{i}\right)^{2}+\left(y_{i+1}-y_{i}\right)^{2}} $ (12)

定义3   (轨迹长度)设有形如式(11)所示的一条轨迹T, 定义其包含的所有轨迹段长度之和为轨迹T的长度, 计算方法如式(13)所示。

$ L=\sum\limits_{i=1}^{n-1} l_{i} $ (13)

定义4   (轨迹角度)设有形如式(11)所示的一条轨迹T, 定义其连续三点(xi-1, yi-1)、(xi, yi)、(xi+1, yi+1)之间的角度之和为轨迹自身的角度, 计算方法如式(14)所示。

$ A=\sum\limits_{i=2}^{n-1} \cos ^{-1} \frac{\left(x_{i}-x_{i-1}, y_{i}-y_{i-1}\right) \times\left(x_{i+1}-x_{i}, y_{i+1}-y_{i}\right)}{\left|\left(x_{i}-x_{i-1}, y_{i}-y_{i-1}\right)\right| \cdot\left|\left(x_{i+1}-x_{i}, y_{i+1}-y_{i}\right)\right|} $ (14)

定义5   (轨迹所用时间)设有形如式(11)所示的一条轨迹T, 定义该轨迹从开始时刻ts到结束时刻te之间的时长为本条轨迹所用时间Δt, 计算方法如式(15)所示。

$ \Delta t=t_{e}-t_{s} $ (15)

定义6   (轨迹平均速度)设有形如式(11)所示的一条轨迹T, 定义其轨迹长度L与其轨迹所用时间Δt的商为此轨迹的平均速度v, 计算方法如式(16)所示。

$ v=L / \Delta t $ (16)
3 异常轨迹检测

本文以BP神经网络为工具训练得到轨迹异常检测模型, 根据轨迹4个自身属性检测出用户轨迹是否异常。图 3所示为基于BP神经网络的异常轨迹检测方法。具体步骤分析如下:

Download:
图 3 基于BP神经网络的异常轨迹检测方法

步骤1  轨迹预处理。对原始轨迹数据集进行去噪处理, 根据本文所提轨迹模型, 完成轨迹的形式化及预处理工作。

步骤2  轨迹可视化及属性值提取。利用百度地图的LBS云服务, 将所获得的轨迹点上传到百度地图LBS云服务下的云端服务器存储, 然后完成轨迹可视化工作。调用轨迹属性提取算法, 计算所需轨迹属性, 获得轨迹属性集。

步骤3  基于BP神经网络的轨迹聚类模型训练。将得到的轨迹属性集作为BP神经网络的输入, 经过训练, 调整隐含层系数, 直至网络总误差小于给定误差值, 得到轨迹聚类模型。

步骤4  基于训练模型, 检测用户异常轨迹。调用轨迹属性计算算法, 得到待检测用户轨迹的4个属性值, 将属性值作为训练好的轨迹异常判断模型的输入层, 通过模型输出判断给定用户轨迹所属类别。

3.1 轨迹数据集获取

实验所用轨迹数据源自微软研究院GeoLift项目的GeoLife GPS Trajectories数据集。该项目从2007年4月—2012年8月收集了182个用户的轨迹数据, 包含17 621条轨迹, 总距离120多万公里, 总时间48 000多小时。每条轨迹含有一系列以时间为序的点, 每个轨迹点都有经度、纬度、海拔等信息。这些轨迹数据不但记录了用户在家和在工作地点的时空轨迹, 而且还有大范围的户外活动轨迹, 例如购物、远足、旅游、骑自行车[19]

本文选取GeoLife GPS Trajectories中2个用户的轨迹数据集作为实验源数据, 记为TS, 该数据集包含了用户的轨迹信息及其分类标签。通过对TS进行噪音去除及坐标转换处理, 得到可用轨迹集TS′, 将用户轨迹显示在百度地图上。

基于百度地图的LBS云服务技术的轨迹可视化具体步骤描述如下:

步骤1  将轨迹集上传到百度地图LBS云服务下的云端服务器存储。

步骤2  使用JavaScript API, 创建用户窗口类形成类型麻点图形式的用户轨迹数据图层, 将其叠加在百度地图上, 可在百度地图上实时显示轨迹数据。图 4所示为某个用户在2008-10-25 23:48—2008-10-26 00:48的一条轨迹。

Download:
图 4 轨迹显示界面
3.2 轨迹属性值提取 3.2.1 轨迹坐标处理

由于轨迹用经纬度表示, 且坐标点采样时间间隔为5 s, 因此两点间的经纬度值差别微小, 为方便计算, 且不丢失轨迹自身特征, 本文采用直接将轨迹坐标点分别乘以一个适当系数的方法。具体操作方法为:设有形如式(11)所示的一条轨迹T, 将轨迹集中的xiyi分别乘一个系数λ, 此系数值的选取视实际情况而定, 以便于计算为原则, 本文实验中λ=1 000, 处理后得到的轨迹为T′={(x1, y1), (x2, y2), …, (x′n, y′n)}, 对轨迹数据集TS处理后得到的数据集记为TS′

3.2.2 算法设计

对轨迹集TS′中每条轨迹, 将所有位置点之间的距离相加得到轨迹距离属性、将相邻3个位置点形成的角度相加得到轨迹的角度属性, 依据百度地图可视化的轨迹中显示的每个点采集时间, 得到轨迹起始时刻ts、轨迹结束时刻te、轨迹所用时间Δt, 最后用轨迹长度除以轨迹所用时间得到轨迹平均速度属性。根据定义6, 轨迹数据集的具体属性值提取如算法1所示。

算法1  轨迹属性值提取

输入  轨迹数据集TS′={T1, T2, …, T′ Tn }

输出  长度属性向量 Ls , 角度属性向量 As , 速度属性向量 Vs, 轨迹所用时间向量 Dts

1.Initialize Ls, As, Vs, Dts;

2.for i←1 to Tn do

3.L←0, A←0;

4.for i←2 to |Ti′|-1 do

5.${\rm{L}} \leftarrow {\rm{L}} + \sqrt {{{\left( {{\rm{x}}_{\rm{i}}^\prime - {\rm{x}}_{{\rm{i}} - 1}^\prime } \right)}^2} + {{\left( {{\rm{y}}_{\rm{i}}^\prime - {\rm{y}}_{{\rm{i}} - 1}^\prime } \right)}^2}} $;

6. ${\rm{A}} \leftarrow {\rm{A}} + {\cos ^{ - 1}}\frac{{\left( {{\rm{x}}_{\rm{i}}^\prime - {\rm{x}}_{{\rm{i}} - 1}^\prime ,{\rm{y}}_{\rm{i}}^\prime - {\rm{y}}_{{\rm{i}} - 1}^\prime } \right) \times \left( {{\rm{x}}_{{\rm{i}} + 1}^\prime - {\rm{x}}_{\rm{i}}^\prime ,{\rm{y}}_{{\rm{i}} + 1}^\prime - {\rm{y}}_{\rm{i}}^\prime } \right)}}{{\left| {\left( {{\rm{x}}_{\rm{i}}^\prime - {\rm{x}}_{{\rm{i}} - 1}^\prime ,{\rm{y}}_{\rm{i}}^\prime - {\rm{y}}_{{\rm{i}} - 1}^\prime } \right)} \right| \cdot \left| {\left( {{\rm{x}}_{{\rm{i}} + 1}^\prime - {\rm{x}}_{\rm{i}}^\prime ,{\rm{y}}_{{\rm{i}} + 1}^\prime - {\rm{y}}_{\rm{i}}^\prime } \right)} \right|}}$;

7.end for

8.Δt←te-ts;

9.V←L/Δt;

10.Ls←Ls∪LAs←As∪A;

11.As←As∪A;

12.Vs←Vs∪V;

13.Dts←Dts∪Δt;

14.end for

15.return Ls, As, Vs, Dts;

针对TS′中的每条轨迹, 算法1按照定义3~定义6分别计算轨迹长度(第5行)、轨迹角度(第6行)、轨迹所用时间(第8行)以及轨迹平均速度(第9行)4个轨迹属性值, 计算TS′中所有轨迹的长度属性向量 Ls 、角度属性向量 As 、速度属性向量 Vs 以及轨迹的所用时间向量 Dts (第10行~第13行)。轨迹数据集TS′中包含Tn条轨迹, 假设每条轨迹最多有n个位置点, 算法1的时间复杂度和空间复杂度均为O(Tn×n)。

3.3 基于BP神经网络算法的训练检测模型 3.3.1 异常轨迹检测算法流程

BP神经网络算法是基于梯度下降的学习算法, 学习过程可分为2个阶段, 一是信息的正向传递; 二是误差的反向传播, 其算法流程如图 5所示。

Download:
图 5 BP神经网络算法流程

BP神经网络算法具体步骤描述如下:

步骤1  确定网络参数。

在本文实验中, 输入层有4个神经元, 分别输入算法1提取的4个轨迹属性值。表 1所示为不同节点数网络训练误差对比结果。可以看出, 并非隐含节点数越多, 网络性能越好, 当隐含节点增大到11、12时误差反而增大。在隐含节点数为10时网络性能最好, 因此设定隐含节点数为10。同时将用户轨迹分为两类:正常轨迹和异常轨迹, 输出节点有2个输出1和0, 分别表示这两类轨迹, 因此输出层有一个神经元。

下载CSV 表 1 不同节点数网络训练误差对比

步骤2  初始化网络的权系数和阈值。

输入层-隐含层共有4×10=40个权系数, 隐含层-输出层有10×1=10个权系数, 数据量较大, 初始系数和阈值采用Matlab中BP神经网络工具箱的缺省权值和阈值。

步骤3 确定输入向量和目标输出向量。

输入向量为某用户的所有轨迹属性值, 目标输出向量为此用户的某条轨迹分类, 即异常和正常轨迹, 正常为1, 异常为0。

步骤4  计算实际输出值。

按照式(1)和式(5)分别计算隐节点和输出节点的输出值。

步骤5  根据实际输出和目标输出求误差值。

将实际输出和目标输出代入式(6), 求得输出层误差δl, 将δl代入式(2)求得隐节点层的误差δ′ j

步骤6  利用求出的误差值修改权系数。

δl代入式(7)修正权值, 根据式(8)修正阈值, 同理按照式(3)和式(4)修正隐节点层的权值和阈值。

步骤7  执行步骤3, 直到模型稳定为止。

当样本误差满足式(9)和式(10)时, 即当最小均方误差(Mean Squared Error, MSE)为10-15以下即可完成训练。

3.3.2 异常轨迹检测算法描述

本文实验建立一个三层的BP神经网络, 主要指令为:net = newff (PR, [S1 S2SN], {TF1 TF2TFN}, BTF, BLF, PF )。其中, PR表示输入向量的取值范围, Si表示第i(i=1, 2, …, N-1)层神经元的个数, 总共N层, TFi表示第i层的传递函数, 本文实验采用logsig函数、trainoss函数、learngdm函数, BTF表示BP神经网络的训练函数, BLF表示BP神经网络权值和阈值学习函数, PF表示性能函数。本文实验使用最小均方误差作为性能函数。

基于带分类标签的数据集, 利用现有轨迹对设计好的模型进行训练, 得到训练稳定的模型后将未知轨迹放入此模型进行检测, 判断该条轨迹是否为异常轨迹。算法描述如下:

算法2  基于BP神经网络的异常轨迹识别

输入  轨迹数据集TS′, 长度属性向量 Ls , 角度属性向量 As , 速度属性向量 Vs, 轨迹所用时间向量 Dts

输出  轨迹所属类别0或1

1.P←[Ls; As;Ts; Dts];

2.T←The vector of labels in TS′;

3.NodeNum←10;

4.TypeNum←1;

5.Epochs←10000;

6.TF1←logsig′;

7.TF2←logsig′;

8.net←newff(minmax(P), [NodeNum TypeNum], {TF1 TF2}, 'trainoss′, learngdm′);

9.net.trainParam.epochs←Epochs;

10.net.trainParam.goal←1e-15;

11.net.trainParam.time←Inf;

12.train(net, P, T);

13.x←sim(net, P_test);

14.return x;

其中, minmax( P )函数计算实际输入矩阵 P 的最大最小值, train(net, P, T )为训练函数, 输入的3个参数分别为创建的网络net、实际输入矩阵 P 和目标输出向量 T , 其作用是训练建立的BP神经网络, sim(net, P_test )为仿真函数, 其参数为训练完成的BP神经网络net、仿真实验的输入矩阵 P_test , 此函数返回仿真实验的实际输出, 并通过判决门限0.5区分正常和异常轨迹, Inf代表系统最长时间。

算法2首先根据用户轨迹的4个属性建立一个输入矩阵, 基于轨迹所属类别建立一个目标输出向量(第1行~第2行), 根据上文设置隐含层节点数、输出维数、训练次数以及各层传递函数, 设定好参数后创建BP神经网络net(第3行~第8行), 然后设置最大训练次数, 确定网络的最小均方误差和训练时间(第9行~第11行), 最后进行训练网络(第12行), 待模型稳定时进行网络仿真(第13行)。

本文实验采用一个3层BP神经网络, 每层神经元数量分别为4、10、1。使用一个样本(4×1, 即一组轨迹属性值)进行前馈计算, 要进行2次矩阵运算, 2次矩阵乘法(实际上是向量和矩阵相乘)分别要进行4×10和10×1次计算, 由于输入层和最终输出层结点数量(4和1)是确定的, 可以视为常量, 中间仅1个隐含层, 因此对一个样本的前馈计算次数为4×10+10×1=50, 时间复杂度是O(1)。反向传播的时间复杂度和前馈计算相同, 假设本文实验总共有m个训练样本, 每个样本只训练一次, 那么训练一个神经网络的时间复杂度则是O(m)。

4 实验结果与分析

本文所有算法均采用Matlab 2016a实现, 软硬件环境为Intel (R) Core (TM) 2 Duo 3.3 GHz CPU, 4 GB内存, Windows 10操作系统。本文性能指标具体分析如下:

1) 精度可以看作对精确性的度量, 即标记为正类的元组(异常轨迹元组)实际为正类所占的百分比, 可表示为:

$ precision = \frac{{TP}}{{TP + FP}} $ (17)

其中, TP是指被正确分类的异常轨迹的条数, FP是指被错误标记为异常轨迹的条数。

2) 召回率是对完全性的度量, 即正元组(异常轨迹元组)被标记为正类的百分比, 可表示为:

$ recall = \frac{{TP}}{{TP + FN}} $ (18)

其中, FN是指被错误标记为正常轨迹的异常轨迹条数。

3) F度量是将精度和召回率组合到一个度量中, 其表达式如式(19)所示。

$ F = \frac{{2 \times precision \times recall}}{{precision + recall}} $ (19)
4.1 数据集选取

实验数据来自GeoLife GPS Trajectories中的2个用户的轨迹数据集。轨迹集中采用的时间是格林尼治时间, 将格林尼治时间23:00—00:59, 9:00—10:59换算成北京时间是7:00—8:59和17:00—18:59此时正是上班和下班高峰时间段。因此本文采用的轨迹数据集是某2个用户在2008-9-23—2008-12-23间每天的23:00—00:59, 9:00—10:59时间段里的轨迹, 共180条。

4.2 结果分析

本文利用算法1提取该轨迹数据集的长度属性向量 Ls 、角度属性向量 As 、速度属性向量 Vs 以及轨迹所用时间向量 Dts , 利用算法2将轨迹数据集和每条轨迹的4个属性值作为输入数据集, 经过训练, 得到性能稳定的分类模型, 基于此模型, 将待识别轨迹数据集进行分类。

4.2.1 BP神经网络训练结果

本文实验将第一个用户90条轨迹的属性数据进行分组, 基于不同的分组结果, 制定以下5种训练方案。方案1将其中30条轨迹的属性数据用来训练, 余下60条轨迹的属性数据用来仿真; 方案2将其中40条轨迹的属性数据用来训练, 余下50条轨迹的属性数据用来仿真; 方案3将其中50条轨迹的属性数据用来训练, 余下40条轨迹的属性数据用来仿真; 方案4将其中60条轨迹的属性数据用来训练, 余下30条轨迹的属性数据用来仿真; 方案5将其中70条轨迹的属性数据用来训练, 余下20条轨迹的属性数据用来仿真。5种方案precision、recall、F度量值对比结果如图 6所示。

Download:
图 6 5种方案不同性能对比结果

图 6可以看出, 方案4性能最好, F度量值达到92.3%。因此采用方案4对第2个用户的轨迹数据集进行仿真实验, 即采用第2个用户的60条轨迹用于训练, 其余30条轨迹用于仿真实验。可以得到本文轨迹检测模型的输出类别和实际类别的对比结果, 如表 2所示。

下载CSV 表 2 输出类别与实际类别对比

表 2可以看出, 本次实验共用30个样本, 得到模拟结果如实际结果相比较无错误, 全部正确分类, 即precision、recall、F度量值均为100%。因此本文训练模型能够很好地检测用户轨迹是否异常。

4.2.2 网络性能分析

图 7所示为BP神经网络仿真训练性能分析结果。由图 7(a)可以看出, 本文实验使用3层神经网络, 第1层是输入层, 其输入节点个数为4, 第, 2层是隐含层, 隐节点个数为10, 第3层是输出层, 输出节点个数是1, 训练方法使用trainoss, 性能函数使用均方误差函数, 此模型的均方误差值为1.31e-24, 梯度为7.85e-24, 最大验证失败次数为0, 经过1 671次迭代, 用时5 min 9 s, 表明模型已经稳定, 并达到精度要求, 可以作为用户轨迹聚类、用户异常轨迹检测的模型。由图 7(b)可以看出, 最小均方差在10-11时缓慢下降, 但是在训练次数增到足够大时, 突然下降到10-24, 这是由于本实验采用的训练方法为trainoss, 这是一种快速训练方法。因此当网络性能达到一定精度时快速收敛。由图 7(c)可以看出, 该算法一直保持平稳的梯度下降, 验证失败次数一直为0, 在训练次数足够大时梯度呈直线下降。

Download:
图 7 BP神经网络性能
5 结束语

本文提出一种基于BP神经网络的异常轨迹检测方法。对数据进行去噪处理, 上传到百度云的LBS云端进行存储, 并将轨迹数据集显示在百度地图上。在此基础上, 对轨迹集进行预处理, 利用轨迹属性值提取算法得到轨迹的属性向量(轨迹长度属性、轨迹的角度属性、轨迹所用时间以及轨迹的平均速度), 将获得的轨迹特征属性作为BP神经网络算法的输入层, 轨迹相似度量值作为输出层, 训练异常轨迹检测模型, 进而判断用户轨迹是否异常, 以得到用户的异常轨迹数据。下一步将提取正常和异常轨迹数据中的时空特征和用户行为特征, 分析和预测用户行为, 并对用户进行个性化推荐。

参考文献
[1]
ZHENG Yu. Trajectory data mining:an overview[J]. ACM Transactions on Intelligent Systems and Technology, 2015, 6(3): 1-41. (0)
[2]
PRELIPCEAN A C, GIDOFALVI G, SUSILO Y O. Measures of transport mode segmentation of trajectories[J]. International Journal of Geographical Information Science, 2016, 30(9): 1-22. (0)
[3]
LÜ Mingqi, CHEN Ling, XU Zhenxing, et al. The discovery of personally semantic places based on trajectory data mining[J]. Neurocomputing, 2016, 173: 1142-1153. DOI:10.1016/j.neucom.2015.08.071 (0)
[4]
GIANNOTTI F, NANNI M, PEDRESCHI D, et al. Unveiling the complexity of human mobility by querying and mining massive trajectory data[J]. International Journal on Very Large Data Bases, 2011, 20(5): 695-719. DOI:10.1007/s00778-011-0244-8 (0)
[5]
GUPTA M, GAO Jing, AGGARWAL C, et al. Outlier detection for temporal data:a survey[J]. IEEE Transactions on Knowledge and Data Engineering, 2014, 25(1): 1-20. (0)
[6]
HU Weiming, LI Xi, TIAN Guodong, et al. An incremental DPMM-based method for trajectory clustering, modeling, and retrieval[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2013, 35(5): 1051-1065. DOI:10.1109/TPAMI.2012.188 (0)
[7]
CAI Yingfeng, WANG Hai, CHEN Xiaobo, et al. Trajectory-based anomalous behaviour detection for intelligent traffic surveillance[J]. IET Intelligent Transport Systems, 2015, 9(8): 810-816. DOI:10.1049/iet-its.2014.0238 (0)
[8]
LAXHAMMAR R, FALKMAN G. Online learning and sequential anomaly detection in trajectories[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2014, 36(6): 1158-1173. DOI:10.1109/TPAMI.2013.172 (0)
[9]
SHEN Minxin, LIU D R, SHANN S H. Outlier detection from vehicle trajectories to discover roaming events[J]. Information Sciences, 2015, 294: 242-254. DOI:10.1016/j.ins.2014.09.037 (0)
[10]
温文.基于改进BP神经网络的产品质量合格率预测研究[D].广州: 华南理工大学, 2014. http://cdmd.cnki.com.cn/Article/CDMD-10561-1014065006.htm (0)
[11]
刘良旭, 乔少杰, 刘宾, 等. 基于R-tree的高效异常轨迹检测算法[J]. 软件学报, 2009, 20(9): 2426-2435. (0)
[12]
鲍苏宁, 张磊, 杨光. 基于核主成分分析的异常轨迹检测方法[J]. 计算机应用, 2014, 34(7): 2107-2110. (0)
[13]
ZHU Jie, JIANG Wei, LIU An, et al.Time-dependent popular routes based trajectory outlier detection[C]//Proceedings of International Conference on Web Information Systems Engineering.Berlin, Germany: Springer, 2015: 16-30. (0)
[14]
韩旭.基于车辆轨迹多特征的聚类分析及异常检测方法的研究[D].哈尔滨: 哈尔滨工程大学, 2014. http://www.wanfangdata.com.cn/details/detail.do?_type=degree&id=D596404 (0)
[15]
朱燕, 李宏伟, 樊超, 等. 基于聚类的出租车异常轨迹检测[J]. 计算机工程, 2017, 43(2): 16-20. DOI:10.3969/j.issn.1000-3428.2017.02.003 (0)
[16]
毛嘉莉, 金澈清, 章志刚, 等. 轨迹大数据异常检测:研究进展及系统框架[J]. 软件学报, 2017, 28(1): 17-34. (0)
[17]
蒲春, 孙政顺, 赵世敏. Matlab神经网络工具箱BP算法比较[J]. 计算机仿真, 2006(5): 142-144. DOI:10.3969/j.issn.1006-9348.2006.05.041 (0)
[18]
闻新, 周璐, 李翔, 等. MATLAB神经网络仿真与应用[M]. 北京: 科学出版社, 2003. (0)
[19]
ZHENG Yu, XIE Xing, MA Weiying. GeoLife:a collaborative social networking service among user, location and trajectory[J]. Bulletin of the Technical Committee on Data Engineering, 2011, 33(2): 32-39. (0)