我一直在寻找一种基于向量相似度创建推荐系统的解决方案。 基本上,我每个用户都有一些矢量,例如:
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]
对于每个向量,我需要计算一个系数,并根据该系数将一个向量与另一个向量区分开。我已经找到了可以根据两个向量的相似性来计算系数的公式,而我并不是真的想要。我需要一个可以计算每个向量的系数的公式,然后使用这些系数进行其他一些计算。公式吗? 谢谢
答案 0 :(得分:2)
因此,请根据您对我的评论的回应:我认为没有相似性系数度量可以满足您的要求。让我解释一下为什么...
相似系数是函数f(x, y) -> c
,其中x
和y
是向量,c
是标量。请注意,f
具有两个参数。 f(x,y) = f(y,x)
,但f(x)
毫无意义-它要求x
相对于……没有什么相似之处。
那又怎样?我们可以只使用函数g(x) = f(x, V)
,其中V
是固定向量。例如。让V = [1, 1, ..., 1]
。现在,我们有一个单子函数,它为每个向量提供相似值。但是...
了解f(x,y) = c
和f(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或聚类太困难,请考虑进行主成分分析或其他将其缩小至一定尺寸(减少维数)的方法-请记住您所做的任何事情都可能会造成损失