LCSS最长公共子序列算法
0、论文基本介绍以及相关内容
- 分析移动用户位置的相似性,提取移动用户的相似路径在出行路径预测、兴趣区域发现、轨迹聚类、个性化路径推荐等领域具有广泛的应用。
- 重点:利用移动用户定位数据找到合适轨迹的表示方法,如何高效计算移动用户轨迹间的相似性成为热点。
本文---基于改进LCSS的移动用户轨迹相似性查询算法研究:
(1)移动用户原始轨迹数据->抽取位置序列->映射为具有时间和地理位置信息的序列。
解决移动用户轨迹数据的稀疏性导致相似度算法效率低下的问题。
(2)FP-tree频繁模式树的加权频繁模式挖掘移动用户轨迹的频繁序列。
解决由于用户轨迹随机性和繁杂性而导致的算法效率低下的问题。
(3)通过改进LCSS算法
结合时间和地理因素衡量用户轨迹的相似性。
- 衡量相似度的方法有很多:欧式距离,动态时间规划DTW,编辑距离EDR,最长公共子序列,最大时间出现法MCT,余弦相似性,Hausdorff距离。其中基于轨迹数据衡量相似度的算法有三种:欧式距离,DTW算法,LCSS算法。
1、欧式距离(关键输入:时间,位置,用户)
- 欧氏距离是指通过计算每个时间点上轨迹所对应的两个点的欧式距离,然后再对所有点的欧式距离进行综合处理,包括取平均值、求和、取中位数等。
\]
其中\(dist(p_{k}^{A}, p_{k}^{B})\)表示用户A和B在某时间段内的距离,\(p_{k}^{A}, p_{k}^{B}\)表示A和B在k时刻的位置,\(p_{k,x}^{A} - p_{k,x}^{B}\)表示用户A和用户B在x维度的位置,同理,\(p_{k,y}^{A} - p_{k,y}^{B}\)表示用户A和B在y维度上的位置。因此欧式距离为:
\]
- 欧式距离的缺点:容易受到噪音的影响,尤其是现实中两个移动用户的轨迹在时间和个数上都存在很大差异(缺失,异常),因此需要提前对移动用户的轨迹进行预处理才能使用欧氏距离。
2、动态时间规划DTW算法(关键输入:两个时间序列,包含时间、位置)
- 动态时间规划采用重复点之前的记录点填补对应空缺的方式,以求出的最小距离最为轨迹的相似度量,解决了欧式距离对采样过于苛刻的要求。假设有两个轨迹空间域的离散采样
P=<p_{1}, p_{2}, ..., p_{m}>
和Q=<q_{1}, q_{2}, ..., q_{m}>
,基于DTW对两条轨迹的采样点数量没有任何的要求,那么两条轨迹之间每两个点的相似度公式为:
\]
其中\(||.||\)为两点坐标的二范数,也就是两点之间的欧式距离。\(D(i,j)\)一般也采用欧氏距离,或者其他路径函数也行。因此两条轨迹之间的相似度为:
\]
3、最长公共子序列LCSS(两个时间序列,包含:时间,位置)
- 来源:DTW和欧式距离对轨迹的个别点差异性非常敏感,如果两个时间序列在大多数时间段具有相似的形态,仅仅在很短的时间具有一定的差异,(即很小的差异也会对相似度衡量产生影响)欧式距离和DTW无法准确衡量这两个时间序列的相似度。LCSS能处理这种问题。
- 原理:假设现在有两个长度分别为n何m的时间序列数据A和B,那么最长公共子序列的长度为:
0 & \textrm{if $A = \varnothing \ or \ B = \varnothing$}\\
1+LCSS(a_{t-1}, b_{i-1}) & \textrm{if $dist(a_{t}, b_{i}) < \gamma$}\\
\max(LCSS(a_{t-1}, b_{i}), LCSS(a_{t}, b_{i-1})) & \textrm{otherwise}
\end{array} \right.
\]
其中,\(\gamma\)为一个成员相似阈值,\(t=1,2,...,n\);\(i=1,2,...,m\)。基于上述公式,最长公共子序列的相似度公式为:
\]
- LCSS算法可以计算两个子序列之间的最长公共子序列。(子序列是有序的,但不一定是连续的,作用对象是序列)
- 例如:序列X= <B,C,D,B>是序列Y = <A,B,C,B,D,A,B>的子序列,对应的下标序列为<2,3,5,7>。
- 匹配:
L(<AGGTAB>, <GXTXAYB>) = 1 + L(<AGGTA>, <GXTXAY>)
- 不匹配:
L(<ABCDGH>, <AEDFHR>) = MAX ( L(<ABCDG>, <AEDFHR>), L(<ABCDGH>, <AEDFH>) )
- 匹配:
4、改进的LCSS算法(关键输入:两个时间序列,包含时间、位置)
- 改进LCSS的三个步骤:
- 抽取位置序列:将位置序列映射为具有时间和地理位置信息的序列,以发生时间的序列表示移动用户的轨迹。
- 采用FP-Growth算法挖掘移动用户轨迹的频繁序列。
- 结合时间和地理因素,采用改进LCSS方法衡量用户轨迹的相似性。
4.1 抽取位置序列
- 移动用户时间序列为:
\]
其中\((L_{i}, t_{i})\)表示用户出现在某个基站的位置\(L_{i}\)对应的时间\(t_{i}\)。
- 移动用户轨迹为:
\]
其中序列\((L_{1}, L_{2}, t_{1}, t_{2})\)表示移动用户在时刻\(t_{1}\)出现在基站\(L_{1}\),然后在时刻\(t_{2}\)离开基站\(L_{1}\)前往基站\(L_{2}\)。
4.2 采用FP-Growth算法挖掘移动用户轨迹的频繁序列
- 移动轨迹的数据的频繁模式定义:\(L_{i} \to L_{j}\)
- 移动用户频繁轨迹提取是从移动用户移动轨迹数据集中提取支持度大于最小支持度阈值的集合。移动用户频繁模式反映了移动用户群体在移动行为上具有相同特征或是规律。
- 通过引入闭合频繁项集保证了移动用户行为信息量最全面且数据规模最小。具体过程如下:
- 首先,以基站平均逗留时间作为项目权重,以各项目count值降序依次为头结点和其他节点,生成条件模式基;
- 然后,采用条件模式基构造对应的加权条件FP树;
- 最后按照设定加权支持度的阈值判断相应的频繁模式。
4.3 基于改进LCSS的移动用户轨迹相似性查询算法
- TP树获得用户常驻区域模式后,以时间系数来反映所有用户在邻近时间相同地理位置的比例。时间相似性系数公式为:
\]
其中,$\Delta T$为精度(一般设为1个小时),$T_{i}(u)$表示移动用户u在某一个时间精度内到达某一个基站$L_{i}(u)$的时刻,$T_{j}(v)$表示移动用户v在某一个时间精度内到达某一个基站$L_{j}(v)$的时刻,$\delta (L_{i}(u), L_{j}(v))$是一个重合性公式,当两个用户的基站重合时,值为1,否则为0。
- 用户重合度:指一个网站内的多少访问者同时浏览器了其他网站。即同时访问两个网站的用户中有多大比例是重合的。假设A和B分别为需要计算用户重合度的2个网站的独立用户数,则重合度计算公式为:
\]
- 结合时间因素,改进的LCSS相似度算法为:
\]
即
\]
其中,公式的第一部分表示用户u和用户v一天的最长公共子序列,第二部分表示在每一个时间精度下,两位用户在邻近时间相同的地理位置的比例。
4.4 改进LCSS算法与LCSS算法的优缺点
- 优点:结合了时间和地理因素,衡量用户轨迹的相似性,因此提高了相似度计算的准确性。
- 缺点:改进之后,需要抽取时间序列、构造用户轨迹的频繁序列,然后才能用改进的LCSS相似度算法计算用户轨迹的相似度,因此算法模型过程相对比较复杂。
参考:
1、LCSS论文:http://www.cs.bu.edu/groups/dblab/pub_pdfs/icde02.pdf
2、基于改进LCSS的移动用户轨迹相似性查询算法研究:https://www.sohu.com/a/133750116_354885
3、简书:LCSS实现:https://www.jianshu.com/p/d7b8db280a01
4、博客之用户重合度:https://blog.csdn.net/zyy160alex5/article/details/8791864
LCSS最长公共子序列算法的更多相关文章
- [Data Structure] LCSs——最长公共子序列和最长公共子串
1. 什么是 LCSs? 什么是 LCSs? 好多博友看到这几个字母可能比较困惑,因为这是我自己对两个常见问题的统称,它们分别为最长公共子序列问题(Longest-Common-Subsequence ...
- 用python实现最长公共子序列算法(找到所有最长公共子串)
软件安全的一个小实验,正好复习一下LCS的写法. 实现LCS的算法和算法导论上的方式基本一致,都是先建好两个表,一个存储在(i,j)处当前最长公共子序列长度,另一个存储在(i,j)处的回溯方向. 相对 ...
- 【科技】位运算(bitset)优化最长公共子序列算法
最长公共子序列(LCS)问题 你有两个字符串 \(A,B\),字符集为 \(\Sigma\),求 \(A, B\) 的最长公共子序列. 简单动态规划 首先有一个广为人知的 dp:\(f_{i,j}\) ...
- 程序员的算法课(6)-最长公共子序列(LCS)
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/m0_37609579/article/de ...
- HDU 1159 Common Subsequence 【最长公共子序列】模板题
题目链接:https://vjudge.net/contest/124428#problem/A 题目大意:给出两个字符串,求其最长公共子序列的长度. 最长公共子序列算法详解:https://blog ...
- ACM/ICPC 之 最长公共子序列计数及其回溯算法(51Nod-1006(最长公共子序列))
这道题被51Nod定为基础题(这要求有点高啊),我感觉应该可以算作一级或者二级题目,主要原因不是动态规划的状态转移方程的问题,而是需要理解最后的回溯算法. 题目大意:找到两个字符串中最长的子序列,子序 ...
- 算法设计 - LCS 最长公共子序列&&最长公共子串 &&LIS 最长递增子序列
出处 http://segmentfault.com/blog/exploring/ 本章讲解:1. LCS(最长公共子序列)O(n^2)的时间复杂度,O(n^2)的空间复杂度:2. 与之类似但不同的 ...
- 【算法】最长公共子序列(nlogn)
转载注明出处:http://blog.csdn.net/wdq347/article/details/9001005 (修正了一些错误,并自己重写了代码) 最长公共子序列(LCS)最常见的算法是时间复 ...
- 《算法导论》读书笔记之动态规划—最长公共子序列 & 最长公共子串(LCS)
From:http://my.oschina.net/leejun2005/blog/117167 1.先科普下最长公共子序列 & 最长公共子串的区别: 找两个字符串的最长公共子串,这个子串要 ...
随机推荐
- 搭建apache本地服务器·Mac
1. 打开终端,开启Apache: //开启apache: sudo apachectl start //重启apache: sudo apachectl restart //关闭apache: su ...
- Go 初体验 - 并发与锁.3 - 竞态
竞态,就是多个协程同时访问临界区,由并发而产生的数据不同步的状态. 这个说的有点low,没办法,我就是这么表达的,官方的请度娘. 先上代码: 输出: 为何不是1000?就是因为竞态,发生竞态后,最终的 ...
- Sublime text 替换成对标签 首尾匹配的HTML 标签
按Cmd-Shift-K (Win: Ctrl-Shift-') 就能选中这组标签
- 旧调重弹Hibernate与Ibatis区别——深入架构设计
对于一个粗学者而言一言概况就是:ibatis非常简单易学,hibernate相对较复杂,门槛较高. 但是,hibernate对数据库结构提供了较为完整的封装,hibernate的o/r mappin ...
- day19 python之re模块正则练习
1.匹配标签 import re ret = re.search("<(?P<tag_name>\w+)>\w+</(?P=tag_name)>" ...
- sql where 里面判定要加 ' '
WHERE year>=2010 and year<=2017 and indicator_code = 'SE.XPD.TOTL.GD.ZS'
- px和em的区别, css权重
PX特点:px像素(Pixel).相对长度单位.像素px是相对于显示器屏幕分辨率而言的. EM特点 1. em的值并不是固定的:2. em会继承父级元素的字体大小. 优先级:!important> ...
- JavaScript中的转译符
转译字符 含义 \o NUL字符(\u0000) \b 退格符(\u0008) \t 水平制表符(\u0009) \n 换行符(\u000A) \v 垂直制表符(\u000B) \f 换页符( ...
- liunx驱动----异步通知
查询:消耗资源 中断:read 一直要去读 poll :指定起始时间 异步通知 signal 测试程序 include <stdio.h> include <signal.h> ...
- js encode方法
js对文字进行编码涉及3个函数:escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent 1 ...