夹角余弦(Cosine)
几何中夹角余弦可用来衡量两个向量方向的差异,机器学习中借用这一概念来衡量样本向量之间的差异。
(1)在二维空间中向量A(x1,y1)与向量B(x2,y2)的夹角余弦公式:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL1QzNzIzNwATM2EjNwMTMwIzLcZTM2AzLcNTMwIzLcVGbpZGZh9GbwV3Lc12bj5yYlNHchZnL3d3dvw1LcpDc0RHaiojIsJye.png)
(2) 两个n维样本点a(x11,x12,…,x1n)和b(x21,x22,…,x2n)的夹角余弦。类似的,对于两个n维样本点a(x11,x12,…,x1n)和b(x21,x22,…,x2n),可以使用类似于夹角余弦的概念来衡量它们间的相似程度。
即:
夹角余弦取值范围为[-1,1]。夹角余弦越大表示两个向量的夹角越小,夹角余弦越小表示两向量的夹角越大。当两个向量的方向重合时夹角余弦取最大值1,当两个向量的方向完全相反夹角余弦取最小值-1。
夹角余弦的具体应用可以参阅参考文献[吴军. 数学之美 系列 12 - 余弦定理和新闻的分类.]。
(3)Matlab计算夹角余弦
例子:计算(1,0)、( 1,1.732)、( -1,0)两两间的夹角余弦
X = [1 0 ; 1 1.732 ; -1 0]
D = 1- pdist(X, 'cosine') % Matlab中的pdist(X, 'cosine')得到的是1减夹角余弦的值
结果:
D =
0.5000 -1.0000 -0.5000
pdist的函数的详解,见博客点击打开链接
这里我们还要用到一个函数 squareform,把行向量,变为举证D ,其中D(i,j) D(j,i)代表 i 和j 的相似度/距离。
上源码
clear
>> X = [1 0 ; 1 1.732 ; -1 0]
X =
1.0000 0
1.0000 1.7320
-1.0000 0
>> D = 1- pdist(X, 'cosine')
D =
0.5000 -1.0000 -0.5000
>> squareform(D)
ans =
0 0.5000 -1.0000
0.5000 0 -0.5000
-1.0000 -0.5000 0
参考文章:点击打开链接