1

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

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]

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

4

1 回答 1

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上面的函数不是很有用,因为知道两个向量的相似程度V并不能告诉我们它们彼此的相似程度。


所以,你可以做什么?我认为您的问题的一个简单解决方案是k 最近邻算法的变体。它允许您找到接近给定向量的向量(或者,如果您更喜欢在不指定给定向量的情况下查找向量簇,请查找clustering

编辑:来自 Yahya 回答的灵感:如果您的向量非常大并且 knn 或聚类太难,请考虑主成分分析或其他一些将它们缩小到大小的方法(减少维度的数量) - 无论您做什么,请记住很可能是有损的

于 2018-10-09T22:17:55.203 回答