线段聚类LINE SEGMENT CLUSTERING
这篇博客将说明TRACLUS算法的归组聚类阶段。首先,先讨论线段的密度属性;其次,介绍基于密度的聚类算法DBSCAN;然后,介绍计算线段聚类中代表性轨迹的方法;最后,介绍一中基于启发式的算法确定基于密度聚类算法的相关参数。
1、线段密度
1.1、距离函数回顾
距离函数是三种距离的加权和。首先,垂直距离主要测量从不同轨迹中提取的线段之间的位置差。其次,平行距离主要测量从同一轨迹中提取的线段之间的位置差。在一个轨迹中,两个相邻的线段之间的平行距离始终为零。第三,角度距离测量线段之间的方向差。
1.2、基于密度聚类的概念
通过下面六个定义总结基于密度的聚类。
D
D
D代表所有线段的集合。这里将DBSCAN中关于点的聚类扩展为关于线段的聚类。
ε
\varepsilon
ε:两个线段的距离函数的值。
M
i
n
L
n
s
MinLns
MinLns:聚类集合的最小线段数量。
定义1:线段
L
i
∈
D
L_i\in{D}
Li∈D的
ε
\varepsilon
ε领域:
N
ε
(
L
i
)
=
{
L
j
∈
D
∣
d
i
s
t
(
L
i
,
L
j
)
≤
ε
}
N_{\varepsilon}(L_i) = \{L_j\in{D}|dist(L_i,L_j)\le{\varepsilon}\}
Nε(Li)={Lj∈D∣dist(Li,Lj)≤ε}
定义2:当
∣
N
ε
(
L
i
)
∣
≥
M
i
n
L
n
s
|N_{\varepsilon}(L_i)|\ge{MinLns}
∣Nε(Li)∣≥MinLns时,线段
L
i
∈
D
L_i\in{D}
Li∈D被称为核心线段。
定义3:当
L
i
∈
N
ε
(
L
j
)
L_i\in{N_{\varepsilon}(L_j)}
Li∈Nε(Lj)且
∣
N
ε
(
L
j
)
∣
≥
M
i
n
L
n
s
|N_{\varepsilon}(L_j)|\ge{MinLns}
∣Nε(Lj)∣≥MinLns时,线段
L
i
∈
D
L_i\in{D}
Li∈D直接密度可达线段
L
j
∈
D
L_j\in{D}
Lj∈D。
定义4:当存在一组线段
L
j
,
L
j
−
1
,
⋯
,
L
i
+
1
,
L
i
∈
D
L_j,L_{j-1},\cdots,L_{i+1},L_i\in{D}
Lj,Lj−1,⋯,Li+1,Li∈D,其中
L
k
L_k
Lk是直接密度可达
L
k
+
1
L_{k+1}
Lk+1,则线段
L
i
∈
D
L_i\in{D}
Li∈D密度可达线段
L
j
∈
D
L_j\in{D}
Lj∈D。
定义5:当存在一个线段
L
k
∈
D
L_k\in{D}
Lk∈D使得线段
L
i
L_i
Li和线段
L
j
L_j
Lj都密度可达
L
k
L_k
Lk,则线段
L
i
∈
D
L_i\in{D}
Li∈D密度连接线段
L
j
∈
D
L_j\in{D}
Lj∈D。
定义6:当一个非空子集
C
⊆
D
C\subseteq{D}
C⊆D满足以下两个条件:
- 连接性: ∀ L i , L j ∈ C \forall{L_i,L_j}\in{C} ∀Li,Lj∈C, L i L_i Li密度连接 L j L_j Lj;
- 最大化性: ∀ L i , L j ∈ D \forall{L_i,L_j}\in{D} ∀Li,Lj∈D,如果 L i ∈ C L_i\in{C} Li∈C且 L j L_j Lj密度可达 L i L_i Li,那么 L j ∈ C L_j\in{C} Lj∈C。
则
C
C
C被称作密度连接集。
密度可达性是直接密度可达性的传递闭环,而这种关系是不对称的。只有核心线段是相互密度可达的。然而,密度连接性是一种对称的关系。
考虑上图。令
M
i
n
L
n
s
=
3
MinLns = 3
MinLns=3。粗线段表示核心线段。不规则椭圆表示
ε
\varepsilon
ε领域。基于上述定义:
- L 1 , L 2 , L 3 , L 4 , L_1,L_2,L_3,L_4, L1,L2,L3,L4,和 L 5 L_5 L5都是粗线段,即是核心线段;
- L 2 L_2 L2(或 L 3 L_3 L3)是直接密度可达 L 1 L_1 L1,因为二者都在 L 1 L_1 L1的椭圆内;
- L 6 L_6 L6是密度可达 L 1 L_1 L1,但 L 1 L_1 L1并不是密度可达 L 6 L_6 L6。因为 L 3 L_3 L3直接密度达于 L 1 L_1 L1,而 L 6 L_6 L6直接密度可达于 L 3 L_3 L3,因此 L 6 L_6 L6密度可达于 L 1 L_1 L1,但由于 L 6 L_6 L6不是核心线段,因此这种密度可达关系不具有对称性。
- L 1 , L 4 L_1,L_4 L1,L4和 L 5 L_5 L5都是密度连接的。
2、聚类算法
这里介绍基于密度的线段聚类算法。给定一组线段集合
D
D
D,算法求解一组聚类
O
O
O,它要求指定两个参数
ε
\varepsilon
ε和
M
i
n
L
n
s
MinLns
MinLns。这里一个聚类是指一个密度连接集。该算法与DBSCAN有很多相似的特征。
然而不像DBSCAN,并非所有的密度连接集都是一个线段聚类。需要考虑被提取线段的轨迹的数量,该数量值明显小于线段的数量。比如极端情况,所有的线段都是从一个轨迹中提取出来的。这样的聚类肯定是不合理的,因为它并不能解释足够数量轨迹的行为。这里,就需要校验轨迹的基数。
一个聚类
C
i
C_i
Ci中的分段轨迹集被表示为
P
T
R
(
C
i
)
=
{
T
R
(
L
j
)
∣
∀
L
j
∈
C
i
}
PTR(C_i)=\{TR(L_j)|\forall{L_j\in{C_i}}\}
PTR(Ci)={TR(Lj)∣∀Lj∈Ci}。这里,
T
R
(
L
j
)
TR(L_j)
TR(Lj)表示
L
j
L_j
Lj被提取所在的轨迹。那么
∣
P
T
R
(
C
i
)
∣
|PTR(C_i)|
∣PTR(Ci)∣被称作聚类
C
i
C_i
Ci的轨迹基数。
下图展示了线段聚类的算法流程。
一开始,假设所有的线段都没有被分类。随着算法计算,最终它们都将被分类成一个聚类或者噪声。这个算法包括三个步骤:
- 计算出每一个未被分类的线段 L L L的 ε \varepsilon ε领域 N ε ( L ) N_{\varepsilon}(L) Nε(L)(1-12行)。如果 L L L被确定为一个核心线段(7-10行),则执行第二步去扩大一个聚类(9行)。这个聚类当前只包含 N ε ( L ) N_{\varepsilon}(L) Nε(L)。
- 计算一个核心线段的密度连接集(17-18行)。函数 E x p a n d C l u s t e r ( ) ExpandCluster() ExpandCluster()计算了直接密度可达的线段(19-21行)并添加到当前的聚类中(22-24行)。如果一个新添加的线段是未被分类的,那么它将被添加到队列 Q Q Q中进一步处理因为它可能会是一个核心线段(25-26行);否则,不会添加到队列 Q Q Q中。
- 检查每一个聚类的轨迹基数(13-16行)。如果它的轨迹基数小于阈值,则从关联的聚类中剔除出。
该算法可以很容易地进行扩展,以支持具有权重的轨迹。这个扩展在许多应用中都非常有用。例如,一个更强的飓风自然会有更高的权重 。为了实现这一点,我们需要修改确定一个 ε \varepsilon ε邻域的基数(即 ∣ N ε ( L ) ∣ |N_{\varepsilon}(L)| ∣Nε(L)∣)的方法。不是简单地计算线段的数量,而是通过综合计算线段的权重来计算加权计数。
3、一个聚类的代表性轨迹
一个聚类的代表性轨迹可以表达这个聚类中轨迹分段的整体行为。可以看作是一个线段聚类的数据模型。下图说明了如何生成一个代表性轨迹。
一个代表性轨迹是一组点的队列
R
T
R
i
=
p
1
p
2
p
3
⋯
p
j
⋯
p
l
e
n
i
(
1
≤
i
≤
n
u
m
c
l
u
s
)
RTR_i=p_1p_2p_3\cdots{p_j}\cdots{p_{len_i}}(1\le{i}\le{num_{clus}})
RTRi=p1p2p3⋯pj⋯pleni(1≤i≤numclus)。通过一种扫描线的方法可以确定这些点。
- 用一条垂线沿着线段聚类主轴方向进行扫描,可以计算出与这条扫描线(即垂线)相交的线段的数量。
- 只有当扫描线经过一个线段的起点或终点时,这个数量才会被考虑计算。
- 如果这个数字大于或等于 M i n L n s MinLns MinLns时,则计算聚类中的线段与扫描线的交点相对于主轴的平均值;否则,不考虑这些点(例如,第5和第6时的扫描线的位置情况就不考虑)。
- 此外,如果一个上一个点的位置太近(例如,第3时的位置),将忽略该点以平滑代表性轨迹。
为了计算出一个线段聚类的主轴,下面定义了平均方向向量:
定义:假设一组向量 V = { v 1 ⃗ , v 2 ⃗ , v 3 ⃗ , ⋯ , v n ⃗ } V=\{\vec{v_1},\vec{v_2},\vec{v_3},\cdots,\vec{v_n}\} V={v1,v2,v3,⋯,vn}。那么这个向量集合的平均方向向量为:
其中, ∣ V ∣ |V| ∣V∣是 V V V的基数,即集合的变量总数量。
有了平均方向向量,就要计算相对于它的交点的平均坐标。为了便于计算,旋转坐标轴以使 X X X轴平行于平均方向向量。旋转矩阵计算可以使用如下公式:
其中,角度 ϕ \phi ϕ可以通过计算平均方向向量与单位向量 x ^ \hat{x} x^的内积得到。
在计算得出 X ′ Y ′ X^{'}Y^{'} X′Y′坐标系下的平均值后,再转换回 X Y XY XY坐标系下的值。
上图描述了计算代表性轨迹的方法:
首先,计算平均方向向量和暂时旋转坐标轴(1-2行)。
然后,根据旋转坐标系下的坐标对起点和终点排序(3-4行)。
最后,在按照排序顺序扫描起点和终点时,计算出线段的数量,并计算出扫描线与这些线段的交点的平均值(5-12行)。
4、关于参数 ϵ \epsilon ϵ和 M i n L n s MinLns MinLns选取的启发式方法
在聚类过程中,有两个重要参数会影响到聚类结果,距离阈值
ϵ
\epsilon
ϵ和每个簇中的线段数量阈值
M
i
n
L
n
s
MinLns
MinLns。
首先讨论参数
ϵ
\epsilon
ϵ的选取方法,这里采用熵理论解决这个问题。在信息理论中,熵指的是一个有确定概率分布的事件的不确定性。如果所有输出都一样,那么熵最大。启发式方法可以基于下面这样的观察来讨论。在最差的聚类结果中,
∣
N
ϵ
(
L
)
∣
|N_\epsilon{(L)}|
∣Nϵ(L)∣趋于统一。也就是说,当
ϵ
\epsilon
ϵ很小时,那么所有线段的
∣
N
ϵ
(
L
)
∣
|N_\epsilon{(L)}|
∣Nϵ(L)∣将等于1;当
ϵ
\epsilon
ϵ很大时,那么所有线段的
∣
N
ϵ
(
L
)
∣
|N_\epsilon{(L)}|
∣Nϵ(L)∣等于
n
u
m
l
n
num_{ln}
numln(线段总数量)。这样,熵就是最大值。相对的,在一个好的聚类中,熵应该更小。
用下面公司来表达熵,依据公式确定参数
ϵ
\epsilon
ϵ使得
H
(
X
)
H(X)
H(X)最小。最优解可以通过一种模拟退火算法得到
H
(
X
)
=
∑
i
=
1
n
p
(
x
i
)
l
o
g
2
1
p
(
x
i
)
=
−
∑
i
=
1
n
p
(
x
i
)
l
o
g
2
p
(
x
i
)
H(X)=\sum_{i=1}^np(x_i)log_2{1\over{p(x_i)}}=-\sum_{i=1}^np(x_i)log_2{p(x_i)}
H(X)=i=1∑np(xi)log2p(xi)1=−i=1∑np(xi)log2p(xi),其中
p
(
x
i
)
=
∣
N
ϵ
(
x
i
)
∣
∑
j
=
1
n
∣
N
ϵ
(
x
j
)
∣
p(x_i)={|N_\epsilon{(x_i)}|\over{\sum_{j=1}^n|N_\epsilon(x_j)|}}
p(xi)=∑j=1n∣Nϵ(xj)∣∣Nϵ(xi)∣,
n
=
n
u
m
l
n
n=num_{ln}
n=numln
接下来,讨论参数
M
i
n
L
n
s
MinLns
MinLns的选取方法。当确定了最优
ϵ
\epsilon
ϵ后,计算每个线段的
∣
N
ϵ
(
L
)
∣
|N_\epsilon{(L)}|
∣Nϵ(L)∣,并求解平均值
a
v
g
∣
N
ϵ
(
L
)
∣
avg_{|N_\epsilon(L)|}
avg∣Nϵ(L)∣。这样选取
M
i
n
L
n
s
=
a
v
g
∣
N
ϵ
(
L
)
∣
+
1
∽
3
MinLns = avg_{|N_\epsilon(L)|} + 1\backsim3
MinLns=avg∣Nϵ(L)∣+1∽3,这样做是因为
M
i
n
L
n
s
MinLns
MinLns要略大于
a
v
g
∣
N
ϵ
(
L
)
∣
avg_{|N_\epsilon(L)|}
avg∣Nϵ(L)∣以发现更有意义的聚类簇。