LCSS最长公共子序列算法

LCSS最长公共子序列算法

0、论文基本介绍以及相关内容

  • 分析移动用户位置的相似性,提取移动用户的相似路径在出行路径预测、兴趣区域发现、轨迹聚类、个性化路径推荐等领域具有广泛的应用。
  • 重点:利用移动用户定位数据找到合适轨迹的表示方法,如何高效计算移动用户轨迹间的相似性成为热点。
本文---基于改进LCSS的移动用户轨迹相似性查询算法研究:
(1)移动用户原始轨迹数据->抽取位置序列->映射为具有时间和地理位置信息的序列。
解决移动用户轨迹数据的稀疏性导致相似度算法效率低下的问题。
(2)FP-tree频繁模式树的加权频繁模式挖掘移动用户轨迹的频繁序列。
解决由于用户轨迹随机性和繁杂性而导致的算法效率低下的问题。
(3)通过改进LCSS算法
结合时间和地理因素衡量用户轨迹的相似性。
  • 衡量相似度的方法有很多:欧式距离,动态时间规划DTW,编辑距离EDR,最长公共子序列,最大时间出现法MCT,余弦相似性,Hausdorff距离。其中基于轨迹数据衡量相似度的算法有三种:欧式距离,DTW算法,LCSS算法。

1、欧式距离(关键输入:时间,位置,用户)

  • 欧氏距离是指通过计算每个时间点上轨迹所对应的两个点的欧式距离,然后再对所有点的欧式距离进行综合处理,包括取平均值、求和、取中位数等。

\[dist(p_{k}^{A}, p_{k}^{B}) = \sqrt{(p_{k,x}^{A} - p_{k,x}^{B})^{2} + (p_{k,y}^{A} - p_{k,y}^{B})^{2}}
\]

其中\(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维度上的位置。因此欧式距离为:

\[EU = \sum\limits_{k=1}^{n} dist(p_{k}^{A}, p_{k}^{B})
\]
  • 欧式距离的缺点:容易受到噪音的影响,尤其是现实中两个移动用户的轨迹在时间和个数上都存在很大差异(缺失,异常),因此需要提前对移动用户的轨迹进行预处理才能使用欧氏距离。

2、动态时间规划DTW算法(关键输入:两个时间序列,包含时间、位置)

  • 动态时间规划采用重复点之前的记录点填补对应空缺的方式,以求出的最小距离最为轨迹的相似度量,解决了欧式距离对采样过于苛刻的要求。假设有两个轨迹空间域的离散采样P=<p_{1}, p_{2}, ..., p_{m}>Q=<q_{1}, q_{2}, ..., q_{m}>,基于DTW对两条轨迹的采样点数量没有任何的要求,那么两条轨迹之间每两个点的相似度公式为:

\[D(i, j) = ||p_{i}, q_{j}|| + \min \{D{i-1,j}, D{i,j-1}, D{i-1, j-1}\}
\]

其中\(||.||\)为两点坐标的二范数,也就是两点之间的欧式距离。\(D(i,j)\)一般也采用欧氏距离,或者其他路径函数也行。因此两条轨迹之间的相似度为:

\[DTW(P,Q) = f(m,n)
\]

3、最长公共子序列LCSS(两个时间序列,包含:时间,位置)

  • 来源:DTW和欧式距离对轨迹的个别点差异性非常敏感,如果两个时间序列在大多数时间段具有相似的形态,仅仅在很短的时间具有一定的差异,(即很小的差异也会对相似度衡量产生影响)欧式距离和DTW无法准确衡量这两个时间序列的相似度。LCSS能处理这种问题。
  • 原理:假设现在有两个长度分别为n何m的时间序列数据A和B,那么最长公共子序列的长度为:

\[LCSS(A,B) = \left\{ \begin{array}{l}
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\)。基于上述公式,最长公共子序列的相似度公式为:

\[D_{LCSS} = 1 - (LCSS(A,B)) / min(len_{A}, len_{B})
\]
  • 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的三个步骤:
    1. 抽取位置序列:将位置序列映射为具有时间和地理位置信息的序列,以发生时间的序列表示移动用户的轨迹。
    2. 采用FP-Growth算法挖掘移动用户轨迹的频繁序列。
    3. 结合时间和地理因素,采用改进LCSS方法衡量用户轨迹的相似性

4.1 抽取位置序列

  • 移动用户时间序列为:

\[Tr_{i} = \{(L_{1}, t_{1}), (L_{2}, t_{2}), ..., (L_{i}, t_{i}), ..., (L_{n}, t_{n})\}
\]

其中\((L_{i}, t_{i})\)表示用户出现在某个基站的位置\(L_{i}\)对应的时间\(t_{i}\)。

  • 移动用户轨迹为:

\[Tr_{i} = \{(L_{1}, L_{2}, t_{1}, t_{2}), (L_{2}, L_{3}, t_{2}, t_{3}), ..., (L_{i}, L_{i+1}, t_{i}, t_{i+1}), ..., (L_{n-1}, L_{n}, t_{n-1}, t_{n})\}
\]

其中序列\((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}\)
  • 移动用户频繁轨迹提取是从移动用户移动轨迹数据集中提取支持度大于最小支持度阈值的集合。移动用户频繁模式反映了移动用户群体在移动行为上具有相同特征或是规律。
  • 通过引入闭合频繁项集保证了移动用户行为信息量最全面且数据规模最小。具体过程如下:
    1. 首先,以基站平均逗留时间作为项目权重,以各项目count值降序依次为头结点和其他节点,生成条件模式基;
    2. 然后,采用条件模式基构造对应的加权条件FP树;
    3. 最后按照设定加权支持度的阈值判断相应的频繁模式。

4.3 基于改进LCSS的移动用户轨迹相似性查询算法

  • TP树获得用户常驻区域模式后,以时间系数来反映所有用户在邻近时间相同地理位置的比例。时间相似性系数公式为:

\[COL = \frac{\sum\limits_{i=1}^{n(u)} \sum\limits_{j=1}^{n(v)} (\Delta T - |T_{i}(u) - T_{j}(v)|) \delta (L_{i}(u), L_{j}(v))}{\sum\limits_{i=1}^{n(u)} \sum\limits_{j=1}^{n(v)} (\Delta T - |T_{i}(u) - T_{j}(v)|)}
\]
其中,$\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个网站的独立用户数,则重合度计算公式为:

\[用户重合度 = A \cap B / A \cup B *100%
\]
  • 结合时间因素,改进的LCSS相似度算法为:

\[D_{LCSS} = \frac{1 - (LCSS(u,v))}{\min(len_{u}, len_{v})} \times COL
\]

\[D_{LCSS} = \frac{1 - (LCSS(u,v))}{\min(len_{u}, len_{v})} \times \frac{\sum\limits_{i=1}^{n(u)} \sum\limits_{j=1}^{n(v)} (\Delta T - |T_{i}(u) - T_{j}(v)|) \delta (L_{i}(u), L_{j}(v))}{\sum\limits_{i=1}^{n(u)} \sum\limits_{j=1}^{n(v)} (\Delta T - |T_{i}(u) - T_{j}(v)|)}
\]

其中,公式的第一部分表示用户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

上一篇:Visual Studio 2015 插件开发入门


下一篇:node.js之内存机制特性