https://blog.csdn.net/qq_34873710/article/details/83544608
相关性和相似度的区别
X=(1,2,3)跟Y=(4,5,6)的皮尔森相关系数等于1,说明X和Y是严格线性相关的(事实上Y=X+3)。
但是X和Y的相似度却不是1,如果用余弦距离来度量,X和Y之间的距离明显大于0。
1、分布相似性
KL散度(相对熵)
从熵的角度考量距离的一个量。但是并不是距离,因为不满足距离的第四个条件,所以叫做散度。
距离的定义
- d(x,x) = 0 反身性
- d(x,y) >= 0 非负性
- d(x,y) = d(y,x) 对称性
- d(x,k)+ d(k,y) >= d(x,y) 三角形法则
离散公式为:
D
(
P
∣
∣
Q
)
=
∑
P
(
x
)
l
o
g
P
(
x
)
Q
(
x
)
D(P||Q) = \sum P(x)log\frac{P(x)}{Q(x)}
D(P∣∣Q)=∑P(x)logQ(x)P(x)
x是观测值,而P(x)、Q(x)是不同的分布中出现x的概率。
连续值?就是积分啦!
D
(
f
∣
∣
g
)
=
∫
I
D
f
(
x
)
l
o
g
f
(
x
)
g
(
x
)
d
x
D(f||g) = \int_{ID} f(x)log\frac{f(x)}{g(x)} {\rm d}x
D(f∣∣g)=∫IDf(x)logg(x)f(x)dx
从公式中我们也可看出:KL散度是不对称的。即
D
(
P
∣
∣
Q
)
≠
D
(
Q
∣
∣
P
)
D(P||Q) ≠ D(Q||P)
D(P∣∣Q)̸=D(Q∣∣P)。
在信息论中,
D
(
P
∣
∣
Q
)
D(P||Q)
D(P∣∣Q)表示当用概率分布
Q
Q
Q来拟合真实分布
P
P
P时,产生的信息损耗,其中P表示真实分布,
Q
Q
Q表示
P
P
P的拟合分布。
但是KL散度有一点不好的地方, 就是要求数据是对齐的。
比如下面这个例子:
结果为0,说明是相似,越大越不相似。
import scipy.stats
x = [10,1,8,2.3,5,2,5.7,7.01,8,3,4.9,7.1,9,2.1]
y1 = [i+0.5 for i in x]
print('x与y1的KL散度', scipy.stats.entropy(x,y1))
'''数据不对齐,看下结果'''
x = [10, 1,8,2.3,5,2,5.7,7.01,8,3,4.9,7.1,9,2.1]
y2 = [1,8,2.3,5,2,5.7,7.01,8,3,4.9,7.1,9,2.1, 6]
print('x与y2的KL散度', scipy.stats.entropy(x,y2))
'''结果输出为:'''
'''x与y1的散度为: 0.0017978371619292344'''
'''-----------------------------------'''
'''x与y2的散度为: 0.5215110277317547'''
'''结果显示y1和x更贴合,但事实是x和y2只差一个相对位置'''
y
1
y_1
y1是将x数据每一项加0.5,
y
2
y_2
y2是将x观测数据偏移了一个。
按我的真实需求是
y
2
y_2
y2更符合原分布的。
但是结果显示
y
1
y_1
y1更符合。
适用场景前提:需要数据对齐!
https://blog.csdn.net/u011333734/article/details/80930600
2、轨迹相似性
方法主要有:
区别 | 方法 |
---|---|
基于点方法 | EDR,LCSS,DTW等 |
基于形状的方法 | Frechet, Hausdorff |
基于分段的方法 | One Way Distance, LIP distance |
基于特定任务的方法 | TRACLUS, Road Network,grid等 |
Shapelet
LCSS
看名字发现,和动态规划之最长公共子序列LCS差个S,确实只差一个S
DTW(动态时间规整)
计算两个长度为n和m的时间序列,得到距离的值。
A
=
[
1
,
2
,
3
,
7
,
4
,
7
]
A = [1, 2, 3, 7, 4, 7]
A=[1,2,3,7,4,7]
B
=
[
1
,
6
,
9
,
1
,
2
]
B = [1, 6, 9, 1, 2]
B=[1,6,9,1,2]
1 | 2 | 3 | 4 | 5 | 6 | |
---|---|---|---|---|---|---|
1 | 0 | 1 | 2 | 6 | 3 | 6 |
2 | 5 | 4 | 3 | 1 | 2 | 1 |
3 | 8 | 7 | 6 | 2 | 4 | 2 |
4 | 0 | 1 | 2 | 6 | 3 | 6 |
5 | 1 | 0 | 1 | 5 | 2 | 5 |
O
(
n
m
)
O(nm)
O(nm)的时间复杂度循环
比如距离矩阵为:
https://zhuanlan.zhihu.com/p/73292069(如果只是轨迹呢?大小范围不涉及相似性)
DTW改进 Fast DTW
因为DTW时间复杂度为
O
(
N
2
)
O(N^2)
O(N2),所以有了改进,Fast DTW时间复杂度为
O
(
N
)
O(N)
O(N)
比如
(
N
∗
M
)
(N * M)
(N∗M) 的格式。
-
粗粒度化:首先对原始的时间序列进行数据抽象,数据抽象可以迭代执行多次1/1->1/2->1/4->1/16,粗粒度数据点是其对应的多个细粒度数据点的平均值(类似卷积操作,用均值代替特征值)。
-
投影:在较粗粒度上对时间序列运行DTW算法。
-
细粒度化:将在较粗粒度上得到的归整路径经过的方格进一步细粒度化到较细粒度的时间序列上。除了进行细粒度化之外,我们还额外的在较细粒度的空间内额外向外(横向,竖向,斜向)扩展K个粒度,K为半径参数,一般取为1或者2。
FastDTW算法的具体执行流程如下图所示:
第一个图表示在较粗粒度空间(1/8)内执行DTW算法。第二个图表示将较粗粒度空间(1/8)内求得的归整路径经过的方格细粒度化,并且向外(横向,竖向,斜向)扩展一个(由半径参数确定)细粒度单位后,再执行DTW得到的归整路径。第三个图和第四个图也是这样。由于采取了减少搜索空间的策略,FastDTW并不一定能够求得准确的DTW距离,但是FastDTW算法的时间复杂度比较低,为O(N)。
EDR (编辑距离之路径匹配)
编辑距离,在NLP上的应用较多。
比如计算单词A通过删除、插入、替换、交换4种方法,使得和B相同的最短更改次数。
但是在路径匹配上应用是?(本人好奇,向网友求教)
HMM计算相似度
伪代码
s1 = HMM(m1)
s2 = HMM(m2)
ans1 = P(s1|m2)
ans2 = P(s2|m1)
还不太懂原理是什么