一种面向大规模过车数据的伴随车辆识别方法

文档序号:10655253阅读:1353来源:国知局
一种面向大规模过车数据的伴随车辆识别方法
【专利摘要】本发明涉及数据挖掘技术领域,公开了一种面向大规模过车数据的伴随车辆的识别方法。本发明中,包括将过车数据转换为伴随数据,并将伴随数据上传至HDFS;运用基于Spark的矩阵剪枝并行频繁项集挖掘算法对伴随数据进行挖掘,以得到伴随车辆组合。本发明相对于现有技术而言,使得伴随车辆识别的效率得到提高,并可降低伴随车辆识别的成本。
【专利说明】
-种面向大规模过车数据的伴随车辆识别方法
技术领域
[0001] 本发明设及数据挖掘技术领域,特别设及一种面向大规模过车数据的伴随车辆的 识别方法。
【背景技术】
[0002] 伴随车辆识别是公安部口对卡口系统中海量过往车辆数据信息检索的一种业务 需求,其主要目的是在交通路网中找出具有结伴作案可能的车辆组合。一般而言,伴随车辆 主要是指,在预先给定车牌号的情况下,从卡口过车数据库中挖掘与该牌号车辆经过同一 卡口的时间差小于一定时间阔值并且出现的次数至少大于预先给定阔值次数的其他车辆; 或者在预先不给定车牌号的情况下,针对卡口过车数据库中每辆车辆,从数据库中挖掘与 其经过同一卡口的时间差小于一定时间阔值并且一起出现的次数至少大于预先给定阔值 次数的其他车辆。
[0003] 由于我国机动车保有量的不断高速增长,此外,各个城市正不断推进智能交通信 息系统的建设,导致越来越多的交通管理设备得到投入,尤其是道路卡口装置的安装数量 的快速增长,使得交通卡口采集的过车数据规模得到极大的膨胀。据统计,对于北京、上海、 广州和深圳等大型城市,一些重要路段的交通卡口每小时平均可通过3000辆,假设每天W 10小时计(夜晚过车量很小),则每个卡口一天的过车数据约有3万条。据估算,目前一线城 市的卡口数量平均在500个左右,每天大约可产生1500万条过车数据,一年下来总共可产生 超过50亿条记录。卡口过车数据已经进入大数据时代。一般来说,对于拥有几十亿条过车数 据的卡口数据库系统,受限于卡口数据库系统计算能力,传统的数据库技术已经无法支持 数据量大、计算复杂的伴随车辆识别业务。虽然通过系统硬件升级方式可W暂时提高计算 能力满足业务需求,但是系统升级开销往往十分昂贵,而且由于卡口过车数据量增长十分 迅速,导致平均每隔1-3年就需对系统硬件整体升级一次,可W看出W运种方式来满足伴随 车辆业务需求的性价比极低。

【发明内容】

[0004] 本发明的目的在于提供一种面向大规模过车数据的伴随车辆的识别方法,使得伴 随车辆识别的效率得到提高,并可降低伴随车辆识别的成本。
[0005] 为解决上述技术问题,本发明的实施方式提供了一种面向大规模过车数据的伴随 车辆的识别方法,包括:将过车数据转换为伴随数据,并将所述伴随数据上传至化doop分布 式文件系统HDFS;运用基于Spark的矩阵剪枝并行频繁项集挖掘算法对所述伴随数据进行 挖掘,W得到伴随车辆组合。
[0006] 本发明实施方式相对于现有技术而言,通过将过车数据转换为伴随数据,并将伴 随数据上传至HDFS,并且运用基于Spark的矩阵剪枝并行频繁项集挖掘算法对伴随数据进 行挖掘,W得到伴随车辆组合。由于Spark是一种高效的分布式计算框架,且通过在Spark上 实现矩阵剪枝并行频繁项集挖掘算法对伴随数据进行挖掘,由于矩阵剪枝并行频繁项集算 法能够进一步减少候选频繁项集的数量,所W可W进一步提高挖掘效率,满足基于大规模 伴随数据中伴随车辆识别的性能要求。
[0007] 优选地,所述运用基于Spark的矩阵剪枝并行频繁项集挖掘算法对所述伴随数据 进行挖掘,W得到伴随车辆组合具体包括:计算得到候选频繁1-项集集合及该候选频繁1- 项集的支持数,根据伴随车辆组合的支持数S,从所述计算得到的候选频繁1-项集集合中筛 选出支持数大于或者等于所述S的频繁1-项集;并将所述筛选出的频繁1-项集集合保存于 Spark集群中;根据筛选出的频繁k-项集集合迭代地计算出候选频繁化+1)-项集集合及该 候选频繁化+1)-项集的支持数,并根据所述S,从所述计算出的候选频繁化+1)-项集集合中 筛选出支持数大于或者等于所述S的频繁化+1)-项集,直到所述迭代算法停止;其中,k为大 于等于1的自然数;获取所述筛选出的频繁化+1)-项集集合作为伴随车辆组合。
[0008] 优选地,在所述计算得到候选频繁1-项集集合及该候选频繁1-项集的支持数中, 具体包括:采用布尔向量统计所述候选频繁1-项集的支持数;在根据筛选出的频繁k-项集 集合迭代地计算出候选频繁化+1)-项集集合及该候选频繁化+1)-项集的支持数中,具体包 括:采用布尔向量统计所述候选频繁化+1)-项集的支持数。由于本实施方式采用布尔向量 的方法对支持度计数进行统计计算,从而可W减少重复读取原始伴随数据的负载,提高运 算执行效率,有效节约伴随车辆识别的时间。
[0009] 优选地,在采用布尔向量统计所述候选频繁1-项集的支持数中,具体包括:将所述 候选频繁1-项集的支持数保存为位组BitSet数据结构;在所述采用布尔向量统计所述候选 频繁化+1)-项集的支持数中,具体包括:将所述候选频繁化+1)-项集的支持数保存为位组 BitSet数据结构。采用BitSet位组数据结构表示频繁项集的支持数,有利于减少频繁项集 占用的存储空间。
[0010] 优选地,在所述根据筛选出的频繁k-项集集合迭代地计算出候选频繁(k+1)-项集 集合及该候选频繁化+1)-项集的支持数的步骤中,具体包括:根据所述筛选出的频繁1-项 集的支持数计算得到候选频繁2-项集矩阵M;并根据伴随车辆的支持数S从所述候选频繁2- 项集矩阵M中筛选出支持数大于或者等于所述S的频繁2-项集;根据筛选出的频繁2-项集集 合迭代地计算出频繁化+1)-项集集合及该频繁化+1)-项集的支持数,并根据所述S对所述 候选频繁化+1)-项集集合的支持数进行筛选,直到算法停止。由于采用矩阵表示候选频繁 项集,因此可W利用矩阵的特性进行预判断,从而可减少候选频繁项集集合的数量,有效提 局算法的运行效率。
[00川优选地,所述候选频繁2-项集矩阵保存为化ShMap数据结构。采用化ShMap的数据 结构保存候选频繁项集矩阵,有利于节省内存空间。
[0012]优选地,所述将该过车信息中的车牌号码W及与该过车信息中的过车时间间隔小 于或者等于Uax的所有其他过车信息组成一条伴随数据,具体包括:从所述过车数据中过滤 掉无效车牌的记录;其中,所述过车数据中每条车辆信息包含:车牌号码、道路方向和过车 时间;预先将所述过车数据上传至所述皿FS,从所述皿FS中读取出过车数据,得到一个过车 事务RDD;其中所述过车事务R孤中的每个元素为一个3元组(id,v,t);其中,所述id对应于 所述车牌号码,所述V对应于所述道路方向,所述t对应于所述过车时间;对所述过车事务 RDD进行转换处理,得到一个行驶路向RDD;其中,所述转换处理将所述过车事务RDD中的每 个3元组元素转换为一个<key3,value3>键值对,该键值对中key3的值对应于所述3元组中 的道路方向v,value3的值为所述车牌号码id与所述过车时间t组成的二元组(id, t),所述 行驶路向R孤为一个每个存储元素为<key3,value3>键值对的RDD;对所述行驶路向R孤进行 归类处理,将所述行驶路向RDD中相同道路方向上的过车数据进行合并并存储得到归类的 道行驶路向RDD;对所述归类的行驶路向RDD进行分区处理,并根据所述伴随数据的生成原 则计算得到伴随数据RDD,并将所述伴随数据RDD上传至所述HDFS。通过将过车数据中无效 的车辆信息过滤掉可W提高伴随车辆识别的准确率和效率。
【附图说明】
[0013] 图1是根据本发明第一实施方式面向大规模过车数据的伴随车辆的识别方法的流 程图;
[0014] 图2是根据本发明第一实施方式面向大规模过车数据的伴随车辆的识别方法中根 据频繁k-项集迭代地计算候选频繁化+1)-项集集合的流程图。
【具体实施方式】
[0015] 为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明的各实 施方式进行详细的阐述。然而,本领域的普通技术人员可W理解,在本发明各实施方式中, 为了使读者更好地理解本申请而提出了许多技术细节。但是,即使没有运些技术细节和基 于W下各实施方式的种种变化和修改,也可W实现本申请各权利要求所要求保护的技术方 案。
[0016] 本发明的第一实施方式设及一种面向大规模过车数据的伴随车辆的识别方法,具 体流程如图1所示,包括:
[0017] 步骤10:将过车数据转换为伴随数据,并将伴随数据上传至化doop分布式文件系 统皿FS。
[0018] 本实施方式中,将过车数据转换为伴随数据中,具体包括W下子步骤:在相同卡口 和相同车道情况下,对任意一条过车信息,将该过车信息中的车牌号码W及与该过车信息 中的过车时间间隔小于或者等于Uax的所有其他过车信息组成一条伴随数据。过车信息包 含:车牌号码、道路方向和过车时间。
[0019] 作为优选,将该过车信息中的车牌号码W及与该过车信息中的过车时间间隔小于 或者等于Uax的所有其他过车信息组成一条伴随数据的步骤中,从过车数据中过滤掉无效 车牌的记录。其中,过车数据中每条过车信息包含:车牌号码、道路方向和过车时间。由于车 牌识别技术无法保证在任何天气或者光线条件下均保持100%正确识别车辆车牌号码,此 外偶尔会存在某些车辆车牌安装不规范、被遮挡和被污损等现象发生,因此卡口数据库中 过车信息表中的车牌号码字段偶尔会出现一些无效的车牌号码。而本实施方式通过从卡口 数据库中过滤掉所有包含有无效车牌号码的过车信息记录,提高了过车数据的可读性,有 利于快速、准确地识别伴随车辆组合。对于伴随车辆识别来说,只需利用过车信息表中的= 个字段,即车牌号码,道路方向和过车时间。因此本实施方式中从过车信息表抽取车牌号 码、道路方向和过车时间等S个字段,并W文本文件形式存储,然后上传至皿FS中。
[0020] 预先将过车数据上传至HDFS中,并从HDFS中读取出过车数据,创建一个过车事务 R孤。该过车事务R孤中的每个元素为一个3元组(id, V,t),其中,id对应于车牌号码,V对应 于道路方向,t对应于过车时间。本实施方式中,可W调用textfile函数读取HDFS中的过车 数据,从而创建一个过车事务畑D。
[0021] 对过车事务R孤进行转换处理,得到一个行驶路向R孤。该转换处理将过车事务RDD 中的每个3元组元素转换为一个<key0,value0>键值对,该键值对中keyO的值对应于3元组 中的道路方向v,value0的值为车牌号码id与过车时间t组成的二元组(id, t),因此,行驶路 向畑D为一个每个存储元素为<4日7〇,¥日111日0〉键值对的R孤。在Spark计算框架下,可W通过 对过车事务RDD调用map函数,利用该map函数将过车事务畑D数据集中的每个3元组元素转 换为一个键值对,使得键值对中keyO值对应于3元组中的道路方向V,valueO值为车牌号码 与过车时间组成的二元组(id,t),从而得到一个存储元素为化ey0,value0)键值对的行驶 路向畑D。
[0022] 对行驶路向RDD进行归类处理,将行驶路向RDD中相同道路方向上的过车数据进行 合并得到归类的行驶路向R孤。在Spark计算框架下,可W对行驶路向RDD调用grou地巧ey函 数,利用该groupB巧ey函数对行驶路向R孤按照keyO值进行分组,即将道路方向相同的过车 数据放在一起,得到归类的行驶路向R孤,归类的行驶路向R孤中的k巧值对应于道路方向V, valueO值为与该道路方向相对应的所有车牌号码与过车时间组成的二元组(id, t)。
[0023] 对归类的行驶路向RDD进行分区处理,并根据伴随数据的生成原则计算得到伴随 数据畑D,并将伴随数据R孤上传至HDFS。在Spark计算框架下,可W对归类的行驶路向RDD调 用mapPartitions函数,并结合前述伴随数据集生成原则,得到一个存储元素为伴随数据集 的畑D。将该伴随数据R孤上传至皿FS中,即可成功将卡口过车数据转换为伴随数据。
[0024] 步骤11:运用基于Spark的矩阵剪枝并行频繁项集挖掘算法对伴随数据进行挖掘, W得到伴随车辆组合。
[0025] 本实施方式中的矩阵剪枝频繁项的挖掘算法定义如下:
[0026] 定义1项集集合I中的项目IiQ = I,2......n),获得对应每条事务的布尔向量为Vi = (bi,b2,......bm)T,其中
,因此项目Ii的支持数为其对应布 尔向量Vi中"r的个数。其中,"i"表示项目的序号。
[0027] 定义2对于任意一个项集P= {Ia,Ib,......Iz },项集P的支持数为Va n Vb n...... n Vz中所包含"r的个数,即Su卵OTt_Coun
其中"n"是逻辑与 运算符。
[0028] 性质1频繁项集的非空子集均是频繁项集。因此当L是数据库的一个频繁化+1)-项 集,那么数据集中频繁k-项集的个数至少为k+1个。
[0029] 证明:设最小支持数为SI,如果X (XEI)表示事务数据库D中一个频繁项集, Su卵o;rt_Count(X大于等于S1。对于X的任意非空子集Y (YE.X.),根据Su卵o;rt_Count公 式的性质可知,存在S叫po;rt_Count(X)《Su卵o;rt_Count(Y)恒成立。因此Su卵o;rt_Count (Y杉SI,所WX的非空子集Y也是频繁项集。
[0030] 推理1由性质1可W推导出,频繁k-项集集合的个数不小于k+1,是计算频繁化+1)- 项集集合的前提条件。
[0031 ]基于上述定义,步骤11包含W下子步骤:
[0032] 子步骤110:计算得到候选频繁I-项集集合及该候选频繁I-项集的支持数。本实施 方式中,采用布尔向量统计所述候选频繁1-项集的支持数。
[0033] 具体而言,子步骤110中,扫描伴随数据R孤,计算得到候选频繁1-项集集合及该候 选频繁1-项集的支持数。
[0034] 子步骤111:根据伴随车辆组合的支持数S,从计算得到的候选频繁1-项集集合中 筛选出支持数大于或者等于S的频繁1-项集。
[0035] 子步骤112:并将筛选出的频繁1-项集集合保存于Spark集群中。
[0036] 子步骤113:根据筛选出的频繁k-项集集合迭代地计算出候选频繁化+1)-项集集 合及该候选频繁化+1)-项集的支持数,并根据S,从计算出的候选频繁化+1)-项集集合中筛 选出支持数大于或者等于S的频繁化+1)-项集,直到迭代算法停止。子步骤113中,采用布尔 向量统计频繁化+1)-项集的支持数。k为大于等于1的自然数。
[0037] 由于频繁项集的任何非空子集一定也是频繁项集,也就是说频繁k项集集合个数 Lk I必须大于或者等于k+1,因此迭代终止条件为I Lk I小于k+1。基于此,子步骤113中根据筛 选出的频繁k-项集迭代地计算出候选频繁化+1)-项集集合及该候选频繁化+1)-项集的支 持数中,如图2所示,每轮迭代过程具体包括W下步骤:
[0038] 步骤201:得到频繁k-项集集合Lk。
[0039] 步骤202:判断频繁k-项集集合的个数I Lk I是否大于或者等于化+1)。当I Lk I大于或 者等于k+1,则继续执行根据筛选出的频繁k-项集集合迭代地计算出候选频繁化+1)-项集 集合及该候选频繁化+1)-项集的支持数对应的迭代流程,当I Lk I小于k+1,则该迭代算法停 止。
[0040] 步骤203:计算得到候选频繁化+1)-项集集合及该候选频繁化+1)-项集的支持数。 具体而言,将所有候选频繁k-项集的支持数广播出去,使得集群中每个节点内存中都保存 一个用于存储所有候选频繁k-项集对应的支持数的只读变量,然后对存储候选频繁k-项集 集合Lk的RDD调用map函数,得到候选频繁化+1)-项集集合。与此同时,根据定义(当某个k+1 项集Y可从频繁k-项集集合Lk中找出两个已排序频繁k项集Ii和12,其中= 12 . .&&山比-l] = l2[k-l])且h山〉l2[k],且频繁k项集h和I2相应的布尔向量分别 为^1,和\,那么该(k + 1)项集Y的布尔向量为Vi, nVi。W及项集Y对应的支持数为
;若未找到,则项集Y不是频繁项集。),利用已被广播的候选频繁k-项 集的支持数来计算候选频繁化+1)项集的支持数,得到一个存储元素为<467,value〉键值对 的RDD,其中k巧为候选频繁化+1)-项集,value为候选频繁化+1)项集对应的支持数。
[0041] 步骤204:根据伴随车辆的支持数S从计算得到的候选频繁化+1)-项集集合中过滤 得到需要的频繁化+1)-项集。具体而言,对得到的候选频繁化+1)-项RDD调用filter函数, 统计候选频繁化+1)-项集对应的支持数中数字"r的个数,只保留大于或者等于最小支持 数S的化+1)-项集,得到存储元素为频繁化+1)-项集的R孤。至此,本轮迭代过程结束。
[0042] 步骤205:迭代算法停止。
[0043] 步骤12:获取筛选出的频繁化+1)-项集集合作为伴随车辆组合。
[0044] 作为优先,在Spark计算框架下,步骤11具体包括:
[0045] 读取存放于皿FS中的伴随数据,得到一伴随数据弹性分布式数据集RDD,伴随数据 R孤中的每行对应一条伴随数据,并将该伴随数据R孤保存于Spark集群的内存中。
[0046] 对伴随数据R孤进行转换,得到一个存储元素为项目的R孤。其中该项目RDD包含伴 随数据R孤中的全部伴随数据的项。
[0047] 对项目R孤进行转换,将项目R孤的每个元素转换为一个<keyl ,valuel〉的键值对。 其中,key 1为项目RDD中项目的编号,valuel为对应项目的支持数,且valuel的初始值均置 为1。
[004引对转换成键值对<1?571 ,valuel〉的R孤中每个项目的支持数进行统计,得到一个存 储元素为<1?572,乂日111日2〉的键值对的RDDeValue2的值为key2对应的项目的总的支持数。
[0049] 对统计出总的支持数的项目R孤进行筛选处理,过滤得到频繁1-项集。过滤得到的 频繁1-项集中每个项目的支持数大于或者等于支持数S。
[0050] 提取出键值对<key2,value2>中的key2的值,得到频繁1-项集,并将频繁1-项集保 存于Spark集群内存中。
[0051] 对频繁1-项集R孤进行处理,将频繁1-项集集合。返回给应用程序的驱动端。
[0052] 并将频繁1-项集的支持数广播给Spark机器工作节点,W用于后续步骤中计算候 选频繁项集的支持数。
[0053] 在实际应用中,可W通过调用textfile函数读取存放于HDFS的伴随数据,得到一 伴随数据RDD。伴随数据RDD的每行对应一条伴随数据,通过调用cache函数,将该伴随数据 R孤保存于Spark集群的内存中。
[0054] 对缓存于Spark集群内存中的伴随数据RDD调用flatMap函数,得到一个存储元素 为项目的畑D,该项目R孤包含伴随数据R孤数据集中全部伴随数据的项,
[0055] 对项目R抓调用map函数,将项目RDD的每个元素转换为一个存储元素为<k^l, valuel〉键值对的RDD,其中,某个键值对中key 1的值为某一个项目,valuel的值置为1。
[0056] 为了统计每个项目的支持数,对项目RDD调用reduceByK巧函数,得到一个存储元 素为<key2,value2>键值对的RDD,其中<key2,value2>键值对中value2的值为对应的key2 表示的项目的支持数。
[0057] 对统计出支出数的项目R孤调用filter函数,该函数用于保留value2的值大于或 者等于预设的支持数S的键值对<4672,value2>,同时还可按照<key2,value2>键值对中 value的值进行排序,保留下来的键值对<key2,value2>中key2的值均为所需的频繁1-项 集。同样地,通过调用cache函数将筛选出的频繁1-项集集合保存于Spark集群内存中。
[005引对保留下来的频繁1-项集RDD调用collect函数,将频繁1-项集集合^返回给应用 程序的化iver端。结合缓存在Spark中的伴随数据,计算得到每个候选频繁1-项集的支持 数,并将该些候选频繁1-项集的支持数广播给Spark机器工作节点,W用于后续步骤中计算 候选频繁项集的支持数。需要说明的是,本实施方式中候选频繁项集的支持数均采用布尔 向量。
[0059] 根据得到的所有频繁1-项集的支持数,计算得到候选频繁2-项集矩阵M。
[0060] 并根据伴随车辆的支持数S从频繁2-项集矩阵M中筛选出频繁2-项集矩阵M中支持 数大于或者等于S的频繁2-项集,筛选出的频繁2-项集合该频繁2-项集的支持数均缓存于 Spark集群的内存中,用于进一步产生候选频繁项集。
[0061] 本实施方式与现有技术相比,通过将海量过车数据转换成伴随数据并上传至 皿FS,然后基于Spark计算框架利用矩形剪枝并行频繁项挖掘算法挖掘伴随车辆组合,由于 本实施方式中采用布尔向量表示频繁项集的支持数,减少了重复读取原始伴随数据的负 载,并且,本实施方式方式在算法挖掘过程中,根据候选频繁1-项集的支持数得到候选频繁 2-项集矩阵,由于本实施方式中的候选频繁2-项集矩阵为对称矩阵,因此,可进一步减少候 选频繁项集的数量,进而可有效提高算法的运行效率。
[0062] 本发明的第二实施方式设及一种。第二实施方式在第一实施方式的基础上略有改 进,主要改进之处在于:在第二实施方式中,采用位组BitSet数据结构表示频繁项集的支持 数,从而可W进一步减少候选频繁项集对于内存空间的占用。此外,本实施方式对于候选频 繁2-项集矩阵M采用化ShMap数据结构进行保存,有利于简化候选频繁项集的运算,提高候 选频繁项集的运算效率。
[0063] 具体而言,本实施方式的运用基于Spark的矩阵剪枝并行频繁项集挖掘算法对所 述伴随数据进行挖掘步骤中,具体包括:
[0064] 计算得到候选频繁1-项集集合及该候选频繁1-项集对应的支持数,本实施方式 中,候选频繁1-项集的支持数采用BitSet数据结构保存,并构建一个对应于候选频繁2-项 集矩阵M的数据结构化shMap,将候选频繁1-项集的支持数和化ShMap全部缓存于Spark集群 内存中,大致步骤如下:
[0065] 1)读取存放于HDFS的伴随数据,得到一 RDD,R孤每行对应一条伴随数据,同时对该 R孤调用cache函数将事务数据库保存于Spark集群的内存。
[0066] 2)对1)中畑D调用flatMap函数,得到一个存储元素为项目的RDD,该畑D包含数据 集中全部事务的项。
[0067] 3)接下来对2)中RDD调用map函数,将RDD的每个元素转换为一个存储元素为< keyl ,valuel〉键值对的畑D,其中keyl值为某一项目,valuel值置为1。
[0068] 4)为了统计每个项目的支持数,对上面3)中的畑D调用reduceByK巧函数,得到一 个存储元素为<key2,value2>键值对的RDD,其中<key2,value2>中value2值为key2值所表 示项目的支持数。
[0069] 5)对4)中得到的键值对的RDD调用filter函数,该函数用来保留value2值大于等 于最小支持数S的<k^2,value2>键值对,同时按照<k^2,value2>键值对中value2进行排 序,最终得到存储元素为已排序的R孤,其中键值对的key2值均为频繁1项集的。
[0070] 6)只保留5)中<ke5y2,value2〉键值对R孤中的key2值,最终得到存储元素为频繁1- 项集的畑D,同样地,对该R孤调用cache函数将频繁1-项集畑D保存于Spark集群内存中。
[0071] 7)对6)中频繁1-项集畑D调用collect函数,将频繁10项集集合^返回给应用程序 的化iver(应用程序的驱动)端。结合已缓存的伴随数据事务数据库,计算得到每个频繁1- 项集的BitSet,并将运些频繁1-1项集BitSet广播给Spark机器工作节点,W用于后续步骤 中计算候选频繁项集的BitSet。
[0072] 8)利用7)中得到的所有频繁1-项集的BitSet,构建数据结构HashMap代替矩阵M。 该化3]11曰9的<4日74, value4>键值对中key4存放频繁1-项集,value4也为一个化shMap键值 对<4巧5, values〉(value4的化ShMap数据结构中的k巧5用于存放于能与前面的频繁1-项集 组成一个频繁2-项集的其他频繁1-项集,values为该频繁2项集的支持数)。然后,将该 化ShMap表示的频繁2-项矩阵广播给Spark集群工作节点,W用于后续步骤快速产生候选频 繁项集。
[0073] 每轮迭代过程如下:
[0074] 1)判断I Lk I是否满足大于等于k+1条件,如果满足运个条件则可W继续往下执行, 否则迭代过程结束,算法运行终止。
[0075] 2)将所有频繁k项集的BitSet广播出去,使得集群中每个节点内存中都保存一个 用于存储所有频繁k项集对应BitSet的只读变量,然后对存储频繁k项集集合Lk的RDD调用 map函数,该函数利用流程(1)中的数据结构化ShMap,获取候选频繁k+1项集;与此同时,根 据定义(当某个k+1项集Y可从频繁k项集集合Lk中找出两个已排序频繁k项集Ii和12,其中 (h[l] = l2[l])&&. . .&&(h比-l] = l2比-1])且h比]〉l2比],且频繁k项集h和b相应的布尔 向量分别为Xi和Vu,那么该k+1项集Y的布尔向量为\ nVi,W及项集Y对应的支持数为
:若未找到,则项集Y不是频繁项集。),利用已被广播的频繁k项集的 BitSet来计算候选频繁k+1项集的BitSet,得到一个存储元素为<key, value〉键值对的RDD, 其中k巧为候选频繁k+1项集,value为候选频繁k+1项集对应的BitSet。
[0076] 3)对2)中得到RDD调用filter函数,统计候选频繁k+1项集对应的BitSet中数字 "r的个数,只保留大于等于最小支持数S的k+1项集,最终得到存储元素为频繁k+1项集的 畑D。至此,本轮迭代过程结束。
[0077] 上面各种方法的步骤划分,只是为了描述清楚,实现时可W合并为一个步骤或者 对某些步骤进行拆分,分解为多个步骤,只要包含相同的逻辑关系,都在本专利的保护范围 内;对算法中或者流程中添加无关紧要的修改或者引入无关紧要的设计,但不改变其算法 和流程的核屯、设计都在该专利的保护范围内。
[0078] 本领域技术人员可W理解实现上述实施例方法中的全部或部分步骤是可W通过 程序来指令相关的硬件来完成,该程序存储在一个存储介质中,包括若干指令用W使得一 个设备(可W是单片机,忍片等)或处理器(processor)执行本申请各个实施例所述方法的 全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM, Read-Only Memo巧)、随机存取存储器(RAM,Random Access Memcxry)、磁碟或者光盘等各种可W存储程 序代码的介质。
[0079] 本领域的普通技术人员可W理解,上述各实施方式是实现本发明的具体实施例, 而在实际应用中,可W在形式上和细节上对其作各种改变,而不偏离本发明的精神和范围。
【主权项】
1. 一种面向大规模过车数据的伴随车辆的识别方法,其特征在于,包括: 将过车数据转换为伴随数据,并将所述伴随数据上传至Hadoop分布式文件系统HDFS; 运用基于Spark的矩阵剪枝并行频繁项集挖掘算法对所述伴随数据进行挖掘,以得到 伴随车辆组合。2. 根据权利要求1所述的面向大规模过车数据的伴随车辆的识别方法,其特征在于, 所述运用基于Spark的矩阵剪枝并行频繁项集挖掘算法对所述伴随数据进行挖掘,以 得到伴随车辆组合具体包括: 计算得到候选频繁1-项集集合及该候选频繁1-项集的支持数,根据伴随车辆组合的支 持数s,从所述计算得到的候选频繁1-项集集合中筛选出支持数大于或者等于所述s的频繁 1-项集; 并将所述筛选出的频繁1-项集集合保存于Spark集群中; 根据筛选出的频繁k-项集集合迭代地计算出候选频繁(k+l)_项集集合及该候选频繁 (k+l)_项集的支持数,并根据所述s,从所述计算出的候选频繁(k+l)_项集集合中筛选出支 持数大于或者等于所述s的频繁(k+l)_项集,直到所述迭代算法停止;其中,k为大于等于1 的自然数; 获取所述筛选出的频繁(k+l)_项集集合作为伴随车辆组合。3. 根据权利要求2所述的面向大规模过车数据的伴随车辆的识别方法,其特征在于, 在所述计算得到候选频繁1-项集集合及该候选频繁1-项集的支持数中,具体包括: 采用布尔向量统计所述候选频繁1-项集的支持数; 在根据筛选出的频繁k-项集集合迭代地计算出候选频繁(k+l)_项集集合及该候选频 繁(k+l)_项集的支持数中,具体包括: 采用布尔向量统计所述候选频繁(k+l)_项集的支持数。4. 根据权利要求3所述的面向大规模过车数据的伴随车辆的识别方法,其特征在于, 在采用布尔向量统计所述候选频繁1-项集的支持数中,具体包括: 将所述候选频繁1-项集的支持数保存为位组BitSet数据结构; 在所述采用布尔向量统计所述候选频繁(k+l)_项集的支持数中,具体包括: 将所述候选频繁(k+l)_项集的支持数保存为位组BitSet数据结构。5. 根据权利要求3所述的面向大规模过车数据的伴随车辆的识别方法,其特征在于, 在所述根据筛选出的频繁k-项集集合迭代地计算出候选频繁(k+l)_项集集合及该候 选频繁(k+l)_项集的支持数的步骤中,具体包括: 根据所述筛选出的频繁1-项集的支持数计算得到候选频繁2-项集矩阵M; 并根据伴随车辆的支持数s从所述候选频繁2-项集矩阵Μ中筛选出支持数大于或者等 于所述s的频繁2-项集; 根据筛选出的频繁2-项集集合迭代地计算出候选频繁(k+l)_项集集合及该候选频繁 (k+l)_项集的支持数,从所述计算得到的候选频繁(k+l)_项集集合中筛选出支持数大于或 者等于所述s的频繁(k+l)_项集,直到算法停止。6. 根据权利要求5所述的面向大规模过车数据的伴随车辆的识别方法,其特征在于, 所述候选频繁2-项集矩阵保存为HashMap数据结构。7. 根据权利要求2所述的面向大规模过车数据的伴随车辆的识别方法,其特征在于, 所述计算得到候选频繁1-项集集合及该候选频繁1-项集的支持数,根据伴随车辆组合 的支持数S,从所述计算得到的候选频繁1-项集集合中筛选出支持数大于或者等于所述8的 频繁1-项集中,具体包括: 读取存放于HDFS中的伴随数据,得到一伴随数据弹性分布式数据集RDD,所述伴随数据 RDD中的每行对应一条伴随数据,并将该伴随数据RDD保存于Spark集群的内存中; 对所述伴随数据RDD进行转换,得到一个存储元素为项目的RDD;其中该项目RDD包含所 述伴随数据RDD中的全部伴随数据的项; 对所述项目RDD进行转换,将所述项目RDD的每个元素转换为一个<keyl,Valuel>的键 值对;其中,所述keyl为所述项目RDD中项目的编号,所述valuel为对应项目的支持数,且所 述valuel的初始值均置为1; 对所述转换成键值对〈keyl,valuel〉的RDD中每个项目的支持数进行统计,得到一个存 储元素为<key2,value2>的键值对的RDD,其中,所述value2的值为所述key2对应的项目的 总的支持数; 对所述统计出总的支持数的项目RDD进行筛选处理,过滤得到频繁1-项集;其中,所述 过滤得到的频繁1-项集中每个项目的支持数大于或者等于所述支持数s; 提取出键值对<key2,Value2>中的key2的值,得到频繁1-项集,并将所有筛选出的频繁 1-项集集合保存于Spark集群内存中; 对所述频繁1-项集RDD进行处理,将所述频繁1-项集集合1^返回给应用程序的驱动端; 并将所述候选频繁1-项集的支持数广播给Spark机器工作节点,以用于后续步骤中计 算候选频繁项集的支持数。8. 根据权利要求2所述的面向大规模过车数据的伴随车辆的识别方法,其特征在于, 所述根据筛选出的频繁k-项集集合迭代地计算出候选频繁(k+l)_项集集合及该候选 频繁(k+l)_项集的支持数中,具体包括: 判断频繁k-项集集合的个数| Lk |是否大于或者等于k+1,当| Lk |大于或者等于k+1,则继 续执行所述根据筛选出的频繁k-项集集合迭代地计算出候选频繁(k+l)_项集集合及该候 选频繁(k+1)-项集的支持数;当| Lk |小于k+1,则所述迭代算法停止。9. 根据权利要求1所述的面向大规模过车数据的伴随车辆的识别方法,其特征在于,所 述将过车数据转换为伴随数据中,具体包括:在相同卡口和相同车道情况下,对任意一条过 车信息,将该过车信息中的车牌号码以及与该过车信息中的过车时间间隔小于或者等于 tmax的所有其他过车信息组成一条伴随数据;其中,所述过车信息包含:车牌号码、道路方向 和过车时间。10. 根据权利要求9所述的面向大规模过车数据的伴随车辆的识别方法,其特征在于, 所述将该过车信息中的车牌号码以及与该过车信息中的过车时间间隔小于或者等于 tmax的所有其他过车信息组成一条伴随数据,具体包括: 从所述过车数据中过滤掉无效车牌的记录;其中,所述过车数据中每条过车信息包含: 车牌号码、道路方向和过车时间; 预先将所述过车数据上传至所述HDFS,从所述HDFS中读取出过车数据,得到一个过车 事务RDD;其中所述过车事务RDD中的每个元素为一个3元组(id,v,t);其中,所述id对应于 所述车牌号码,所述v对应于所述道路方向,所述t对应于所述过车时间; 对所述过车事务RDD进行转换处理,得到一个行驶路向RDD;其中,所述转换处理将所述 过车事务RDD中的每个3元组元素转换为一个<keyO,valueO>键值对,该键值对中keyO的值 对应于所述3元组中的道路方向v,valueO的值为所述车牌号码id与所述过车时间t组成的 二元组(id,t),所述行驶路向RDD为一个每个存储元素为<keyO,valueO>键值对的RDD; 对所述行驶路向RDD进行归类处理,将所述行驶路向RDD中相同道路方向上的过车数据 进行合并得到归类的行驶路向RDD; 对所述归类的行驶路向RDD进行分区处理,并根据所述伴随数据的生成原则计算得到 伴随数据RDD,并将所述伴随数据RDD上传至所述HDFS。
【文档编号】G06F17/30GK106021412SQ201610318801
【公开日】2016年10月12日
【申请日】2016年5月13日
【发明人】陈瑶, 马云龙, 卢超, 孙源, 袁函, 王 华
【申请人】上海市计算技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1