前两篇博客对TRACLUS算法进行了综述和概要说明了该框架有两个阶段,分段和归组。这篇博客将详细对轨迹分段这一阶段进行说明。
轨迹分段TRAJECTORY PARTITIONING
1、相关属性
轨迹分段的首要目标是找到轨迹行为迅速变化的点(直观地说,就是角度变化大的点),称之为特征点。从轨迹
T
R
i
=
p
1
p
2
p
3
⋯
p
j
⋯
p
l
e
n
i
TR_i = p_1p_2p_3\cdots{p_j}\cdots{p_{len_i}}
TRi=p1p2p3⋯pj⋯pleni中确定了一组特征点
{
p
c
1
,
p
c
2
,
p
c
3
,
⋯
,
p
c
p
a
r
i
}
(
c
1
<
c
2
<
c
3
<
⋯
<
c
p
a
r
i
)
\{p_{c_1},p_{c_2},p_{c_3},\cdots,p_{c_{par_{i}}}\}(c_1<c_2<c_3<\cdots<c_{par_i})
{pc1,pc2,pc3,⋯,pcpari}(c1<c2<c3<⋯<cpari)。然后,轨迹
T
R
i
TR_i
TRi被每个特征点分段,每个分段用两个连续特征点之间的一条线段表示。也就是说,
T
R
i
TR_i
TRi被划分为一组
(
p
a
r
i
−
1
)
(par_i-1)
(pari−1)个线段
{
p
c
1
p
c
2
,
p
c
2
p
c
3
,
⋯
,
p
c
p
a
r
i
−
1
p
c
p
a
r
i
}
\{p_{c_1}p_{c_2},p_{c_2}p_{c_3},\cdots,p_{c_{par_{i-1}}}p_{c_{par_i}}\}
{pc1pc2,pc2pc3,⋯,pcpari−1pcpari}。把这样的线段称为轨迹分段。下图显示了一个轨迹及其轨迹分段的示例。
一个轨迹的最优分段要具有两个属性:准确性和简洁性。
准确性是指轨迹与其一组轨迹分段之间的差异应该尽可能小,这就要求特征点不能太少。
简洁性是指轨迹分段的数量应该尽可能少。
这两个属性在确定特征点数目时相互矛盾的,这就需要调整算法以达到平衡。
2、最小描述长度原则(Minimum Description Length,MDL)
在确定轨迹特征点时,提出了一种寻找精确和简洁之间最优权衡的方法,在信息论中广泛使用的最小描述长度(MDL)原理。
最小描述长度( MDL) 原理是 Rissane 在研究通用编码时提出的。其基本原理是对于一组给定的实例数据 D , 如果要对其进行保存 ,为了节省存储空间, 一般采用某种模型对其进行编码压缩,然后再保存压缩后的数据。同时, 为了以后正确恢复这些实例数据,将所用的模型也保存起来。所以需要保存的数据长度( 比特数) 等于这些实例数据进行编码压缩后的长度加上保存模型所需的数据长度,将该数据长度称为总描述长度。最小描述长度( MDL) 原理就是要求选择总描述长度最小的模型。
MDL的代价有两部分:
L
(
H
)
L(H)
L(H)和
L
(
D
∣
H
)
L(D|H)
L(D∣H)。这里,
H
H
H代表压缩模型,
D
D
D代表数据。这两个代价的表述如下:
L
(
H
)
L(H)
L(H)是描述压缩模型(或编码方式)所需要的长度,以位表示;
L
(
D
∣
H
)
L(D|H)
L(D∣H)是描述利用压缩模型所编码的数据所需要的长度,以位表示。
在轨迹分段问题中,一个压缩模型对应于一组特定的轨迹分段。因此,找到最优分段可以转化为使用MDL原则找到最佳假设。
上图表示了两个代价
L
(
H
)
L(H)
L(H)和
L
(
D
∣
H
)
L(D|H)
L(D∣H)的公式。假定有一个轨迹
T
R
i
=
p
1
p
2
p
3
⋯
p
j
⋯
p
l
e
n
i
TR_i = p_1p_2p_3\cdots{p_j}\cdots{p_{len_i}}
TRi=p1p2p3⋯pj⋯pleni,和一组特征点
{
p
c
1
,
p
c
2
,
p
c
3
,
⋯
,
p
p
a
r
i
}
\{p_{c_1},p_{c_2},p_{c_3},\cdots,p_{par_i}\}
{pc1,pc2,pc3,⋯,ppari}。那么,
L
(
H
)
L(H)
L(H)可表示为
其中,
l
e
n
(
p
c
j
p
c
j
+
1
)
len(p_{c_j}p_{c_{j+1}})
len(pcjpcj+1)表示一个线段
p
c
j
p
c
j
+
1
p_{c_j}p_{c_{j+1}}
pcjpcj+1的长度,即两点的欧式距离。因此
L
(
H
)
L(H)
L(H)表示所有轨迹分段长度的总和。
另一方面,
L
(
D
∣
H
)
L(D|H)
L(D∣H)可表示为
L
(
D
∣
H
)
L(D|H)
L(D∣H)表示一条轨迹和它的一组轨迹分段的差值之和。对每一个轨迹分段
p
c
j
p
c
j
+
1
p_{c_j}p_{c_{j+1}}
pcjpcj+1,将这条轨迹分段与其包含的线段
p
k
p
k
+
1
(
c
j
≤
k
≤
c
j
+
1
−
1
)
p_kp_{k+1}(c_j\le{k}\le{c_{j+1}-1})
pkpk+1(cj≤k≤cj+1−1)的差值进行累加。对于这个差值的计算,使用垂直距离和角度距离的和。因为这条轨迹包含轨迹分段,所以不考虑平行距离。
L
(
H
)
L(H)
L(H)衡量的是简洁性,它随着轨迹分段数量的增加而增加;
L
(
D
∣
H
)
L(D|H)
L(D∣H)衡量的是准确性,它随着一组轨迹分段偏离轨迹的偏离度增加而增加。
因此,要得到最优的分段策略,那就是要最小化
L
(
H
)
+
L
(
D
∣
H
)
L(H)+L(D|H)
L(H)+L(D∣H),这能够准确平衡简洁性和准确性。但是因为要考虑到轨迹点的每一个子集,那计算量是非常大,所以下面要介绍一个近似计算的方法。
3、近似计算方法
近似方法的关键思想是将局部最优的集合视为全局最优。
M
D
L
p
a
r
(
p
i
,
p
j
)
MDL_{par}(p_i,p_j)
MDLpar(pi,pj)代表
p
i
p_i
pi和
p
j
p_j
pj只是特征点时二者之间轨迹的
M
D
L
(
=
L
(
H
)
+
L
(
D
∣
H
)
)
MDL(=L(H)+L(D|H))
MDL(=L(H)+L(D∣H))代价。
M
D
L
n
o
p
a
r
(
p
i
,
p
j
)
MDL_{nopar}(p_i,p_j)
MDLnopar(pi,pj)代表
p
i
p_i
pi和
p
j
p_j
pj之间没有特征点时的
M
D
L
MDL
MDL代价,即保留原始轨迹。
M
D
L
n
o
p
a
r
(
p
i
,
p
j
)
MDL_{nopar}(p_i,p_j)
MDLnopar(pi,pj)中的
L
(
D
∣
H
)
)
L(D|H))
L(D∣H))是零。那么局部最优解就是当满足对于任意
k
(
i
<
k
≤
j
)
k(i<k\le{j})
k(i<k≤j)都有
M
D
L
p
a
r
(
p
i
,
p
k
)
≤
M
D
L
n
o
p
a
r
(
p
i
,
p
k
)
MDL_{par}(p_i,p_k)\le{MDL_{nopar}(p_i,p_k)}
MDLpar(pi,pk)≤MDLnopar(pi,pk)时最长的轨迹
p
i
p
j
p_ip_j
pipj。如果前者小于后者,可以知道选择
p
k
p_k
pk作为特征点的
M
D
L
MDL
MDL代价要比不作为特征点时更小。更进一步的说,为了简洁起见,我们尽可能地增加了这个轨迹分段的长度。
上图表达了轨迹分段的近似算法。计算一条轨迹上每一个点的
M
D
L
p
a
r
MDL_{par}
MDLpar和
M
D
L
n
o
p
a
r
MDL_{nopar}
MDLnopar(5~6行)。如果前者更大,则立即将上一个点
p
c
u
r
r
I
n
d
e
x
−
1
p_{currIndex-1}
pcurrIndex−1插入到特征点的集合
C
P
i
CP_i
CPi(8行)。然后将从这个点开始重复上述步骤(9行)。否则,增加候选轨迹分段的长度(11行)。
当然,该算法可能无法找到最优的分段。在下图中举一个简单的例子。假设
M
D
L
MDL
MDL代价最小的最优分段为
{
p
1
p
5
}
\{p_1p_5\}
{p1p5}。该算法无法找到精确的解,因为在
p
4
p_4
p4处,
M
D
L
p
a
r
MDL_{par}
MDLpar大于
M
D
L
n
o
p
a
r
MDL_{nopar}
MDLnopar,因此会停止扫描。然而,该算法的精度却相当高。我们的经验表明,其精度平均约为80%,这意味着80%的近似解也出现在精确解中。