本文将介绍数据分析、数据挖掘、机器学习等领域中常用的相似性度量(Similarity Measurement)方法。
我们知道曼哈顿街区有一个个方块构成,从一个十字路口(0,0)到另一个十字路口(3,3)的最短路程,不是两点的连线距离,而是两条垂直线的距离和,也就是“曼哈顿距离”。假设有两个 N N N维的向量 x , y x,y x,y, x x x和 y y y可以分别表示为 x = ( x 1 , x 2 , ⋯ , x N ) x=(x_1,x_2,\cdots,x_N) x=(x1,x2,⋯,xN)和 y = ( y 1 , y 2 , ⋯ , y N ) y=(y_1,y_2,\cdots,y_N) y=(y1,y2,⋯,yN),那么 x x x和 y y y的曼哈顿距离可以用 L 1 L_1 L1范式表示,即
d ( x , y ) = ∑ i = 1 N ∣ x i − y i ∣ d(x,y)=\sum_{i=1}^{N}|x_i-y_i| d(x,y)=i=1∑N∣xi−yi∣
假设有两个 N N N维的向量 x , y x,y x,y, x x x和 y y y可以分别表示为 x = ( x 1 , x 2 , ⋯ , x N ) x=(x_1,x_2,\cdots,x_N) x=(x1,x2,⋯,xN)和 y = ( y 1 , y 2 , ⋯ , y N ) y=(y_1,y_2,\cdots,y_N) y=(y1,y2,⋯,yN),那么 x x x和 y y y的欧式距离可以用 L 2 L_2 L2范式表示,即
d ( x , y ) = ∑ i = 1 N ( x i − y i ) 2 d(x,y)=\sqrt{\sum_{i=1}^{N}(x_i-y_i)^2} d(x,y)=i=1∑N(xi−yi)2
假设有两个 N N N维的向量 x , y x,y x,y, x x x和 y y y可以分别表示为 x = ( x 1 , x 2 , ⋯ , x N ) x=(x_1,x_2,\cdots,x_N) x=(x1,x2,⋯,xN)和 y = ( y 1 , y 2 , ⋯ , y N ) y=(y_1,y_2,\cdots,y_N) y=(y1,y2,⋯,yN),那么 x x x和 y y y的闵可夫斯基距离可以用 L p L_p Lp范式表示,即
d ( x , y ) = ∑ i = 1 N ( x i − y i ) p p d(x,y)=\sqrt[^p]{\sum_{i=1}^{N}(x_i-y_i)^p} d(x,y)=pi=1∑N(xi−yi)p
其中, p ∈ R p\in R p∈R。可见,闵可夫斯基距离是曼哈顿距离与欧氏距离的一般情形,或者说曼哈顿距离与欧氏距离是闵可夫斯基距离的2种特殊情形。
Distance | Norm | Formula |
---|---|---|
Manhattan Distance | L 1 L_1 L1 | d ( x , y ) = ∑ i = 1 i = N ∥ x i − y i ∥ 1 d(x,y)=\sum_{i=1}^{i=N} \|x_i-y_i \|_1 d(x,y)=∑i=1i=N∥xi−yi∥1 |
Euclidean Distance | L 2 L_2 L2 | d ( x , y ) = ∑ i = 1 i = N ( x i − y i ) 2 d(x,y)=\sqrt{\sum_{i=1}^{i=N}(x_i-y_i)^2} d(x,y)=∑i=1i=N(xi−yi)2 |
Minkowsk Distance | L p L_p Lp | d ( x , y ) = ∑ i = 1 i = N ( x i − y i ) p p d(x,y)=\sqrt[^p]{\sum_{i=1}^{i=N}(x_i-y_i)^p} d(x,y)=p∑i=1i=N(xi−yi)p |
我们知道,在国际象棋游戏规则中,国王走一步,能够移动到相邻8个方格中任意一个,那么国王从格子 ( 2 , 3 ) (2,3) (2,3)走到格子 ( 4 , 4 ) (4,4) (4,4)最少需要多少步?从格子 ( 2 , 3 ) (2,3) (2,3)走到格子 ( 7 , 9 ) (7,9) (7,9)呢?从格子 ( x i , y i ) (x_i,y_i) (xi,yi)走到格子 ( x j , y j ) (x_j,y_j) (xj,yj)呢?
不难发现,从格子 ( 2 , 3 ) (2,3) (2,3)走到格子 ( 4 , 4 ) (4,4) (4,4)最少需要2步;从 ( 2 , 3 ) (2,3) (2,3)走到格子 ( 7 , 9 ) (7,9) (7,9),最少需要走6步,事实上,从格子 ( x 1 , y 1 ) (x_1,y_1) (x1,y1)走到格子 ( x 2 , y 2 ) (x_2,y_2) (x2,y2)需要的步数为 m a x ( ∣ x 1 - x 2 ∣ , ∣ y 1 - y 2 ∣ ) max(| x_1-x_2 | , |y_1-y_2|) max(∣x1-x2∣,∣y1-y2∣),这就是2维向量的切比雪夫距离。
假设有两个 N N N维的向量 x , y x,y x,y, x x x和 y y y可以分别表示为 x = ( x 1 , x 2 , ⋯ , x N ) x=(x_1,x_2,\cdots,x_N) x=(x1,x2,⋯,xN)和 y = ( y 1 , y 2 , ⋯ , y N ) y=(y_1,y_2,\cdots,y_N) y=(y1,y2,⋯,yN),那么 x x x和 y y y的闵可夫斯基距离可以用 L p L_p Lp范式表示,即
d ( x , y ) = max i = 1 N ( ∣ x i − y i ∣ ) d(x,y) = \max_{i=1}^N(|x_i - y_i|) d(x,y)=i=1maxN(∣xi−yi∣)
上式也可以表示为
d ( x , y ) = lim p → ∞ ( ∑ i = 1 N ∣ x i − y i ∣ p ) 1 / p d(x,y) = \lim \limits_{p\rightarrow \infty}(\sum_{i=1}^N|x_i - y_i|^{p})^{1/p} d(x,y)=p→∞lim(i=1∑N∣xi−yi∣p)1/p
对于两个二进制串,它们对应的位上有几个不一样,那么海明距离就是几,值越小越相似。例如有两个二进制串 x = 1001 , y = 1011 x=1001,y=1011 x=1001,y=1011,它们对应位上,除了第二位不一样之外,其他位上都一样,那么我们称二者的海明距离为1。同理,两个二进制串 x = 1111 , y = 1010 x=1111,y=1010 x=1111,y=1010的海明距离为 H = 2 H=2 H=2。
Jaccard 系数一般用来度量两个集合的相似度。假设有两个集合 S 1 S_1 S1和 S 2 S_2 S2,它们的Jaccard 系数定义为
J ( S 1 , S 2 ) = ∣ S 1 ∩ S 2 ∣ ∣ S 1 ∪ S 2 ∣ J(S_1,S_2) = \frac{|S_1 \cap S_2|}{|S_1 \cup S_2|} J(S1,S2)=∣S1∪S2∣∣S1∩S2∣
其中, d d d的值越大,表示 S 1 S_1 S1和 S 2 S_2 S2越相似。例如集合 S 1 = { A , B , C , D } , S 2 = { A , B , D , E } S_1=\{ A,B,C,D\}, S_2 = \{ A,B,D,E\} S1={A,B,C,D},S2={A,B,D,E},则
J ( S 1 , S 2 ) = 3 5 J(S_1,S_2) = \frac{3}{5} J(S1,S2)=53
其中 J J J值越大,表示相似度越高,当 J = 1 J=1 J=1时表示 S 1 = S 2 S_1=S_2 S1=S2。
假设有两个 N N N维的向量 x , y x,y x,y, x x x和 y y y可以分别表示为 x = ( x 1 , x 2 , ⋯ , x N ) x=(x_1,x_2,\cdots,x_N) x=(x1,x2,⋯,xN)和 y = ( y 1 , y 2 , ⋯ , y N ) y=(y_1,y_2,\cdots,y_N) y=(y1,y2,⋯,yN),那么 x x x和 y y y的Pearson相关系数为
r = ∑ i = 1 N ( x i − x ˉ ) ( y i − y ˉ ) ∑ i = 1 N ( x i − x ˉ ) 2 ∑ i = 1 N ( y i − y ˉ ) r=\frac{\sum\limits_{i=1}^{N}(x_i-\bar{x})(y_i - \bar{y})}{\sqrt{\sum\limits_{i=1}^{N}(x_i-\bar{x})^2}\sqrt{\sum\limits_{i=1}^{N}(y_i-\bar{y})}} r=i=1∑N(xi−xˉ)2i=1∑N(yi−yˉ)i=1∑N(xi−xˉ)(yi−yˉ)
其中 r r r的值越大,表示相关性越高。
假设有两个 N N N维的向量 x , y x,y x,y, x x x和 y y y可以分别表示为 x = ( x 1 , x 2 , ⋯ , x N ) x=(x_1,x_2,\cdots,x_N) x=(x1,x2,⋯,xN)和 y = ( y 1 , y 2 , ⋯ , y N ) y=(y_1,y_2,\cdots,y_N) y=(y1,y2,⋯,yN),那么 x x x和 y y y的余弦相似度为
s i m = x ⋅ y ∣ x ∣ ∣ y ∣ sim = \frac{x \cdot y}{|x||y|} sim=∣x∣∣y∣x⋅y
其中 r r r的值越大,表示 x x x与 y y y越相似。
假设有两个 N N N维的向量 x , y x,y x,y, x x x和 y y y可以分别表示为 x = ( x 1 , x 2 , ⋯ , x N ) x=(x_1,x_2,\cdots,x_N) x=(x1,x2,⋯,xN)和 y = ( y 1 , y 2 , ⋯ , y N ) y=(y_1,y_2,\cdots,y_N) y=(y1,y2,⋯,yN),那么 x x x和 y y y的马氏距离为
d ( x , y ) = ( x − y ) T S − 1 ( x − y ) d(x,y) = \sqrt{(x-y)^TS^{-1}(x-y)} d(x,y)=(x−y)TS−1(x−y)
其中 S − 1 S^{-1} S−1为 x x x与 y y y的协方差矩阵, d ( x , y ) d(x,y) d(x,y)越小表示 x x x与 y y y相似度越高。
KL散度用来度量两个分布 P P P与 Q Q Q之间的距离。分布P的集合 X = { X 1 , X 2 , ⋯ , X N } X=\{X_1,X_2,\cdots,X_N\} X={X1,X2,⋯,XN}和分布Q的集合 Y = { Y 1 , Y 2 , ⋯ , Y N } Y=\{Y_1,Y_2,\cdots,Y_N\} Y={Y1,Y2,⋯,YN}的KL散度定义为
D ( P ∣ ∣ Q ) = ∑ i = 1 N P ( i ) l o g P ( i ) Q ( i ) D(P||Q) =\sum\limits_{i=1}^{N} P(i) log \frac{P(i)}{Q(i)} D(P∣∣Q)=i=1∑NP(i)logQ(i)P(i)
其中, D ( P ∣ ∣ Q ) D(P||Q) D(P∣∣Q)越小,表示两个分布越相似。
PMI利用co-occurance来衡量两个东西 x x x和 y y y的相似度,定义为
P M I ( x , y ) = l o g p ( x , y ) p ( x ) p ( y ) PMI(x,y) = log \frac{p(x,y)}{p(x)p(y)} PMI(x,y)=logp(x)p(y)p(x,y)
其中, p ( x , y ) p(x,y) p(x,y)表示 x x x与 y y y同时出现的概率, p ( x ) p(x) p(x)和 p ( y ) p(y) p(y)分别表示 x x x出现的概率, y y y出现的概率。 P M I PMI PMI值越大, x x x与 y y y的相似度越高。
NGD可以用来度量两个东西 x x x和 y y y之间的相关性,作用和PMI有点类似,定义为
N G D ( x , y ) = m a x { l o g f ( x ) , l o g f ( y ) } − l o g f ( x , y ) l o g M − m i n { l o g f ( x ) , l o g f ( y ) } NGD(x,y) = \frac{max\{ log f(x),log f(y)\}-log f(x,y)}{log M - min\{ log f(x),log f(y)\}} NGD(x,y)=logM−min{logf(x),logf(y)}max{logf(x),logf(y)}−logf(x,y)
其中 f ( x ) f(x) f(x)是 x x x在文档集中出现的频率, f ( y ) f(y) f(y)是 y y y在文档集中出现的频率, f ( x , y ) f(x,y) f(x,y)是 x , y x,y x,y在文档集中一起出现的频率, M M M是文档集的大小。 N G D ( x , y ) NGD(x,y) NGD(x,y)值越大,相关性越高。