基于相似度的向量系数

时间:2018-10-09 18:50:03

标签: machine-learning vector similarity recommender-systems

我一直在寻找一种基于向量相似度创建推荐系统的解决方案。 基本上,我每个用户都有一些矢量,例如:

User1: [0,3,7,8,5] , [3,5,8,2,4] , [1,5,3,9,4]
User2: [3,1,6,7,9] , [2,4,1,3,8] , [7,8,3,3,1]

对于每个向量,我需要计算一个系数,并根据该系数将一个向量与另一个向量区分开。我已经找到了可以根据两个向量的相似性来计算系数的公式,而我并不是真的想要。我需要一个可以计算每个向量的系数的公式,然后使用这些系数进行其他一些计算。公式吗? 谢谢

1 个答案:

答案 0 :(得分:2)

因此,请根据您对我的评论的回应:我认为没有相似性系数度量可以满足您的要求。让我解释一下为什么...

相似系数是函数f(x, y) -> c,其中xy是向量,c是标量。请注意,f具有两个参数。 f(x,y) = f(y,x),但f(x)毫无意义-它要求x相对于……没有什么相似之处。

那又怎样?我们可以只使用函数g(x) = f(x, V),其中V是固定向量。例如。让V = [1, 1, ..., 1]。现在,我们有一个单子函数,它为每个向量提供相似值。但是...

了解f(x,y) = cf(x,z) = c'并不能告诉您很多有关f(y,z)的知识。取2个空间中的向量x = [1, 1], y = [0, 1], z = [1,0]。在两个维度上对称的相似性函数会说f(x,y) = f(x,z),但希望不会= f(y,z),所以上面的g函数不是很有用,因为知道两个向量与{{1}有多么相似}并没有告诉我们他们彼此之间有多相似。


那你该怎么办?我认为对您的问题的简单解决方案是k nearest neighbors算法的一种变体。它使您可以找到与给定向量接近的向量(或者,如果您更喜欢在不指定给定向量的情况下找到向量簇,请查找clustering

编辑:Yahya的答案的启发:如果向量过大且knn或聚类太困难,请考虑进行主成分分析或其他将其缩小至一定尺寸(减少维数)的方法-请记住您所做的任何事情都可能会造成损失