R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大。 R语言作为统计学一门语言,一直在小众领域闪耀着光芒。直到大数据的爆发,R语言变成了一门炙手可热的数据分析的利器。随着越来越多的工程背景的人的加入,R语言的社区在迅速扩大成长。现在已不仅仅是统计领域,教育,银行,电商,互联网….都在使用R语言。 要成为有理想的极客,我们不能停留在语法上,要掌握牢固的数学,概率,统计知识,同时还要有创新精神,把R语言发挥到各个领域。让我们一起动起来吧,开始R的极客理想。 关于作者: 张丹,分析师/程序员/Quant: R,Java,Nodejs blog: http://blog.fens.me email: bsspirit@gmail.com 转载请注明出处: http://blog.fens.me/r-cosine-similarity/ 前言 在文字处理时,我们经常需要判断两段文字是否相似,如果这两段文字的用词越相似,它们的内容就应该越相似。这个场景下,我们就可以考虑先把文字转换成词频向量,然后用余弦相似度来判断是否相似。 目录 余弦相似度介绍 R语言实现余弦相似度 计算2个文本的相似度 1. 余弦相似度介绍 余弦相似度,通过测量两个向量的夹角的余弦值来度量它们之间的相似性。例如,将两篇文章向量化,余弦距离可以避免因为文章的长度不同而导致距离偏大,余弦距离只考虑两篇文章生成的向量的夹角。 余弦相似度被大量用于对比:如人脸对比、声音对比,来快速判断两个图片或者两段声音的相似度,进而判断是不是来自同一个人。当一个图像或者声音样本具有n维的特征,我们就可以把他认为是n维向量,两个样本使用余弦相似度比对时,就是对两个n维向量的夹角余弦值,其大小进行衡量。 余弦相似度的取值范围是[-1,1],相同两个向量的之间的相似度为1。余弦距离的取值范围是[0,2]。 当夹角为0,两个向量同向,相当于相似度最高,余弦值为1,表示完全正相关。 当夹角90°,两个向量垂直,余弦为0,表示不相关。 当夹角180°,两个向量反向,余弦为-1,表示完全负相关。 计算公式: 相比其他的距离度量,余弦相似度更加注重两个向量在方向上的差异,而非距离或长度上。 欧式距离与余弦距离的对比: 欧式距离的数值受到维度的影响,余弦相似度在高维的情况下也依然保持低维完全相同时相似度为1等性质。 欧式距离体现的是距离上的绝对差异,余弦距离体现的是方向上的相对差异。 不同情况不同选择: 两个人分别取了蓝球(1,0)与红球(0,1),这两个向量的欧式距离较小,可是事实是这两个球是不同的,而余弦距离为2表示的是完全不同的意思。所以在这种情况下选择余弦距离更具合理性。 两个人对APP的使用次数与使用时长分别表示为(1,10),(10,100),可知余弦相似度较小,说明这两个人的行为时相同的,可是,事实是不同的,两个人的活跃度有着极大的差异,第二个人的活跃度更高。 2. R语言实现余弦相似度 我们可以安装lsa包,使用cosine()函数,计算2个向量的余弦相似度。 lsa(Latent Semantic Analysis 潜在语义分析)包基本思想是,文本确实具有高阶(=潜在语义)结构,但这种结构会被词语用法(如通过使用同义词或多义词)所掩盖。通过对给定的文档-术语矩阵进行截断奇异值分解(双模式因子分析),以统计方式得出概念指数,从而克服了这一可变性问题。 lsa包的安装过程比较简单。 > install.packages(lsa) > library(lsa> 计算2个向量的余弦相似度。 > vec1 = c( 1, 1, 1, 0, 0, …
Read more →