余弦相似度

文章目录

    • 1、余弦相似度
    • 2、理论推导
    • 3、一些特征情况分析

在机器学习算法中,有各种方式衡量用户或者物品的距离或者相似度,如曼哈顿距离、欧几里得距离、Pearson相关系数、Jaccard系数等(可参考http://blog.csdn.net/lin00jian/article/details/51209715),我们这里主要详细介绍一下余弦相似度。余弦相似度被广泛用于协同过滤算法中,尤其是Item-base的协同过滤。

1、余弦相似度

余弦相似度衡量的是2个向量间的夹角大小,通过夹角的余弦值表示结果,因此2个向量的余弦相似度为:

cos ⁡ θ = A ⋅ B ∣ ∣ A ∣ ∣ ∗ ∣ ∣ B ∣ ∣ ( 1 ) \cos\theta=\frac{A\cdot B}{||A|| *||B||} \qquad(1) cosθ=ABAB(1)
分子为向量A与向量B的点乘,分母为二者各自的L2相乘,即将所有维度值的平方相加后开方。
余弦相似度的取值为[-1,1],值越大表示越相似。

2、理论推导

我们以二维向量为例,计算向量 ( x 1 , y 1 ) (x_1,y_1) (x1,y1)与向量 ( x 2 , y 2 ) (x_2,y_2) (x2,y2)的余弦相似度。
先回顾一下初中的知识,一个三角形三条边的长度关系为:
c 2 = a 2 + b 2 − 2 a b cos ⁡ θ ( 2 ) c^2=a^2+b^2-2ab\cos\theta \qquad(2) c2=a2+b22abcosθ(2)
其中:
a 2 = x 1 2 + y 1 2 b 2 = x 2 2 + y 2 2 c 2 = ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 ( 3 ) \begin{aligned} a^2&=x_1^2+y_1^2 \\ b^2&=x_2^2+y_2^2 \\ c^2&=(x_1-x_2)^2+(y_1-y_2)^2 \end{aligned} \qquad(3) a2b2c2=x12+y12=x22+y22=(x1x2)2+(y1y2)2(3)
于是,我们可以得到:
cos ⁡ θ = a 2 + b 2 − c 2 2 a b = 2 ( x 1 x 2 + y 1 y 2 ) 2 x 1 2 + y 1 2 x 2 2 + y 2 2 = A ⋅ B ∣ ∣ A ∣ ∣ ∗ ∣ ∣ B ∣ ∣ ( 4 ) \begin{aligned} \cos\theta &=\frac{a^2+b^2-c^2}{2ab}\\ &=\frac{2(x_1x_2+y_1y_2)}{2\sqrt{x_1^2+y_1^2}\sqrt{x_2^2+y_2^2}}\\ &=\frac{A\cdot B}{||A|| *||B||} \qquad(4) \end{aligned} cosθ=2aba2+b2c2=2x12+y12 x22+y22 2(x1x2+y1y2)=ABAB(4)
其中A与B表达向量 ( x 1 , y 1 ) (x_1,y_1) (x1,y1)与向量 ( x 2 , y 2 ) (x_2,y_2) (x2,y2)
分子为A与B的点乘,分母为二者各自的L2相乘,即将所有维度值的平方相加后开方。

3、一些特征情况分析

(1)夹角为0度
此时向量A与向量B应该是最相似的,余弦相似度应该为1。按照公式(4),我们计算很容易计算出来 cos ⁡ θ = 1 \cos \theta = 1 cosθ=1

(2)夹角为90度
此时余弦相似度为0。

(3)夹角为180度
此时余弦相似度为-1,2个向量的方向完全相反。

你可能感兴趣的:(1.5,机器学习)