【问题标题】:Cosine similarity for user recommendations用户推荐的余弦相似度
【发布时间】:2018-01-23 02:19:12
【问题描述】:
余弦相似度是根据对问题的回答来确定 2 个用户是否相似的好方法吗?
我试图让用户回答 10 个问题并将这些回答解析为 10 维整数向量。然后我打算使用余弦相似度来寻找相似的用户。
我考虑将每个问题解析为一个整数并将整数相加以将每个用户解析为一个整数,但这种方法的问题在于相似性度量不是特定于问题的:换句话说,如果用户给出一个对问题 1 的回答为 5,对问题 2 的回答为 0,另一个用户对问题 1 的回答为 0,对问题 2 的回答为 5,两个用户“总和为 5”,但对每个问题的回答根本不同。
那么余弦相似度会根据每个属性给出一个好的相似度度量吗?
【问题讨论】:
标签:
recommendation-engine
cosine-similarity
【解决方案1】:
将所有整数相加以解析为每个用户的单个整数似乎不正确。
我认为余弦相似度实际上有助于作为相似度度量,您可以尝试其他方法,例如 Jaccard、Euclidean、Mahalanobis 等。
余弦相似度背后的直觉可能会有所帮助。这个想法是,一旦你创建了 10 维向量,你就在 10 维空间中工作。每一行都是该空间中的一个向量,因此每个分量中的数字很重要,两个向量之间的余弦可以说明这些向量对齐的好坏程度,如果它们平行且角度为 0,则表示它们到达相同的方向,意味着组件都是成比例的,在这种情况下相似度最大,(例如两个用户在所有问题中回答的数字完全相同)。如果组件开始不同,就像在您的示例中,用户给一个问题 5,而其他给 0,则向量填充有不同的方向,答案之间的差异越大,向量分离得越多,它们之间的角度越大,这导致较低的余弦和相似度。
正如我上面提到的,还有其他相似性度量,人们通常尝试的一件事是这些度量中的几个与测试集相比,看看哪一个表现更好。