余弦相似度原理

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

1、余弦相似度

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

cosθ=AB||A||||B||(1)

分子为向量A与向量B的点乘,分母为二者各自的L2相乘,即将所有维度值的平方相加后开方。
余弦相似度的取值为[-1,1],值越大表示越相似。

2、理论推导

我们以二维向量为例,计算向量(x1,y1)的余弦相似度。
先回顾一下初中的知识,看下图:

image

我们可以得到公式:

c2=a2+b22abcosθ(2)

其中:
a2b2c2=x21+y21=x22+y22=(x1x2)2+(y1y2)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\tag{3}
\end{aligned}
\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\tag{3}\end{aligned}

于是,我们可以得到:
cosθ=a2+b2c22ab=2(x1x2+y1y2)2x21+y21‾‾‾‾‾‾‾√x22+y22‾‾‾‾‾‾‾√=AB||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||} \tag{4}
\end{aligned}
\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||} \tag{4}\end{aligned}

其中A与B表达向量 (x1,y1)
分子为A与B的点乘,分母为二者各自的L2相乘,即将所有维度值的平方相加后开方。

3、一些特征情况分析

(1)夹角为0度
此时向量A与向量B应该是最相似的,余弦相似度应该为1。按照公式(4),我们计算很容易计算出来cosθ=1
(2)夹角为90度
此时余弦相似度为0。
(3)夹角为180度
此时余弦相似度为-1,2个向量的方向完全相反。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值