之前相似度计算很模糊,趁着休息总结一下,以便使用时更针对业务需要。
余弦相似度
公式中p和q是两个向量。
余弦相似度需要对两个向量的长度做归一化,然后度量两个向量的方向,与向量的长度无关。也就是说,两个向量只要方向一致,无论长度、程度如何,都视作“相似”。即“余弦相似度对具体数值的绝对值大小不敏感”
这会产生一个问题,如果A用户对两个商品打分是1,2,B是4,5。由于余弦相似度只关注方向的差异,忽略具体数值的大小,故他们两个的余弦相似度达到0.98,这和实际的情况不符,用户A明显不喜欢这两个商品。即,传统的余弦相似度对行为矩阵判别比较好,但是对打分矩阵经常有不好的效果。
可以使用:
调整的余弦相似度(Adjusted Cosine Similarity)。调整的方法很简单,就是先计算向量每个维度上的均值,然后每个向量在各个维度上都减去均值后,再计算余弦相似度。
前面这个小例子,用调整的余弦相似度计算得到的相似度是 -0.1,呈现出两个用户口味相反,
和直觉相符。
欧式距离:
只关注具体数值特征的绝对差异,从个体向量不同维度的数值大小中体现差异。如使用用户行为指标分析用户价值的相似度或差异。
举个例子:
歌手大赛,三个评委给三个歌手打分,第一个评委的打分(10,8,9), 第二个评委的打分(4,2,3),第三个评委的打分(8,10,9),如果采用余弦相似度来看每个评委的差异,虽然每个评委对同一个选手的评分不一样,但第一、第二两个评委对这三位歌手实力的排序是一样的,只是第二个评委对满分有更高的评判标准,说明第一、第二个评委对音乐的品味上是一致的。
因此,如果只考虑相对大小的排序,那么用余弦相似度来看,第一、第二个评委为一类人,第三个评委为另外一类。
如果采用欧氏距离, 第一和第三个评委的欧氏距离更近,就分成一类人了,但其实不太合理,因为他们对于三位选手的排名都是完全颠倒的。
如果考虑具体数值的大小,那么第二个评委打分都很低,其实反应的是对三个歌手都不喜欢,那么就要用修正的余弦相似度。
故:具体的业务场景具体分析。
主要参考:https://blog.csdn.net/zz_dd_yy/article/details/51926305