在工作中一直使用余弦相似度算法计算两段文本的相似度和两个用户的相似度。一直弄不明白多维的余弦相似度公式是怎么推导来的。今天终于花费时间把公式推导出来,其实很简单,都是高中学过的知识,只是很多年没用了,都还给老师了。本文还通过一个例子演示如果使用余弦相似度计算两段文本的相似度。
介绍一个书,吴军老师的数学之美,当时我花了一个通宵的时间看完这本书。书中使用余弦定理准确的进行新闻分类、拼音输入法的数学原理文章,让我脑洞大开,原来数学是如此的重要,能解决IT行业如此多的问题。
余弦函数在三角形中的计算公式为:
![6ea7c0b03592991a065519300bd1d7c4.png](https://i-blog.csdnimg.cn/blog_migrate/d9c90bf24711af0725a8dfe8c310fe94.png)
在直角坐标系中,向量表示的三角形的余弦函数是怎么样的呢?下图中向量a用坐标(x1,y1)表示,向量b用坐标(x2,y2)表示。
![9c4ee292492ca407a8395f911b44abd4.png](https://i-blog.csdnimg.cn/blog_migrate/0434dfc0f9122e9e08386fe12178690b.jpeg)
向量a和向量b在直角坐标中的长度为
![3c8705e06fb6862b314b488c17c570d0.png](https://i-blog.csdnimg.cn/blog_migrate/ade15429d97ca8318ca15d05fb61895a.png)
,向量a和向量b之间的距离我们用向量c表示,就是上图中的黄色直线,那么向量c在直角坐标系中的长度为
![746085914b40a8dbc9408cb6bbbbea99.png](https://i-blog.csdnimg.cn/blog_migrate/7bd3dce5c6de7b7484c7af4d16682897.png)
,将a,b,c带入三角函数的公式中得到如下的公式: