向量(文本)相似度(或点的距离)的计算方案汇总

       鉴于日常学习中常遇到将文本数据等转为向量,然后计算向量相似度的问题,现将常用方案进行初步汇总,如统计不足敬请留言提示补充:

1、余弦相似度(cosine

        公式:

                        

        即:以向量的夹角为考量角度,以向量的内积(各对应元素相乘求和)比两个向量的模的积为计算结果。

        由于余弦相似度表示方向上的差异,对距离不敏感,所以有时候也关心距离上的差异会先对每个值都减去一个均值,这样称为调整余弦相似度。

2、欧氏距离(Euclidean

        公式:

              

        即:基本上考虑的是点的空间距离,各对应元素做差取平方求和后开方。  

        欧式距离能够体现个体数值的绝对差异,更多用于需要从维度的数值大小中体现差异的分析,如利用用户行为指标评价用户相似度和差异度;余弦相似度从方向上区分差异,对绝对数值不敏感,更多用于根据评论评价用户兴趣的相似度和差异度,此外可修整用户间可能存在的度量标准不一致的问题(对绝对数值不敏感)。

3、曼哈顿距离(Manhattan distance

        公式:

                                                                    d(i,j)=|X1-X2|+|Y1-Y2|.

        即:向量各对应坐标间做差求绝对值后求和。

        曼哈顿距离的由来是在规划为方形建筑区块的城市(曼哈顿)内,计算最短的行车路径。从某一地点到另一地点,必须走固定的n个区块,没有其它捷径。为了便于理解,如下:

                                                               

4、皮尔逊相关系数(PC:Pearson correlation coefficient

        公式:

                                                     

        即:上面所提到的调整的余弦相似度,向量内各对应元素减去均值求积后求和,记为结果1;各对应元素减去均值平方求和再求积,记为结果2;结果1比结果2.    

        针对线性相关情况,可用于比较因变量和自变量间相关性如何

5、斯皮尔曼(等级)相关系数(SRC :Spearman Rank Correlation

        公式:

                                                            

        即:和上述类似,不同的是将对于样本中的原始数据Xi,Yi转换成等级数据xi,yi,即xi等级和yi等级。并非考虑原始数据值,而是按照一定方式(通常按照大小)对数据进行排名,取数据的不同排名结果代入公式。

        实际上,可通过简单的方式进行计算,n表示样本容量,di表示两向量X和Y内对应元素的等级的差值,等级di = xi - yi,则:

                                                                    

         例如( 维基百科):

智商, XiXi每周花在电视上的小时数, YiYi等级xi等级yididi2
8601100
972026-416
992838-525
1002747-39
10150510-525
1032969-39
106773416
110178539
112692749
11312104636

n = 10,di2的和为194,则可代入公式计算出结果为:-0.17575757...,Xi和Yi几乎不相关。

6、杰卡德相似系数(Jaccard距离)

        公式:

                                                                   

        即:用来衡量两个集合差异性的一个指标,交集除以并集,向量(文本)相似度用共同出现的元素(词语、短语等特征)除以两者的总量。

7、SimHash+汉明距离(Hamming Distance)

        Simhash:谷歌发明,根据文本转为64位的字节,计算汉明距离判断相似性。

        汉明距离:在信息论中,两个等长字符串的汉明距离是两者间对应位置的不同字符的个数。换句话说,它就是将一个字符串变换成另外一个字符串所需要替换的字符个数。例如:

        “10110110”和“10011111”的汉明距离为3;            “abcde”和“adcaf”的汉明距离为3.

8、等......(待你补充得意




  • 12
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中可以使用向量相似度计算来衡量两个向量之间的相似程度。常用的向量相似度计算方法有余弦相似度和欧氏距离。 1. 余弦相似度(Cosine Similarity):余弦相似度是通过计算两个向量的夹角来衡量它们之间的相似程度。具体计算公式如下: ![cosine_similarity](https://img-blog.csdnimg.cn/20210709103605134.png) 其中,A和B分别表示两个向量,|A|和|B|分别表示两个向量的模,A·B表示两个向量的点积。 2. 欧氏距离(Euclidean Distance):欧氏距离是通过计算两个向量之间的距离来衡量它们之间的相似程度。具体计算公式如下: ![euclidean_distance](https://img-blog.csdnimg.cn/20210709103605135.png) 其中,A和B分别表示两个向量,n表示向量的维度。 在Java中,可以使用Apache Commons Math库来进行向量相似度计算。以下是使用Apache Commons Math库计算余弦相似度和欧氏距离的示例代码: ```java import org.apache.commons.math3.linear.ArrayRealVector; import org.apache.commons.math3.linear.RealVector; import org.apache.commons.math3.linear.VectorUtil; public class VectorSimilarity { public static void main(String[] args) { double[] vectorA = {1, 2, 3}; double[] vectorB = {4, 5, 6}; RealVector a = new ArrayRealVector(vectorA); RealVector b = new ArrayRealVector(vectorB); // 计算余弦相似度 double cosineSimilarity = VectorUtil.cosineDistance(a, b); System.out.println("Cosine Similarity: " + cosineSimilarity); // 计算欧氏距离 double euclideanDistance = a.getDistance(b); System.out.println("Euclidean Distance: " + euclideanDistance); } } ``` 注意:在使用示例代码之前,需要先引入Apache Commons Math库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值