假设我有一组用户、一组歌曲和一组对每首歌曲的投票:
=========== =========== =======
User Song Vote
=========== =========== =======
user1 song1 [score]
user1 song2 [score]
user1 song3 [score]
user2 song1 [score]
user2 song2 [score]
user2 song3 [score]
user3 song1 [score]
user3 song2 [score]
user3 song3 [score]
user-n song-n [score]
=========== =========== =======
根据歌曲投票计算用户相似度的最有效方法是什么?有没有比迭代每个用户和每首歌曲的每个投票更好的方法?
最佳答案
有两个常用指标可用于查找用户之间的相似性:
欧几里得距离,这正是您的想法:想象一个 n 维图,每个轴都有一首歌曲,由两个相关用户评论 (u1 和 *u2) 并且其轴上的值是分数。您可以使用以下公式轻松计算相似度:
对于 u1 和 u2 评价的每首歌曲,计算
pow(u1.song.score - u2.song.score, 2)
并将所有内容加到sum_of_powers
中.然后由1 / 1 + (sqrt(sum_of_powers))
给出相似系数.Pearson Correlation(或相关系数):这是一种更好的方法,可以确定两个数据集之间的相关程度。此方法使用更复杂的公式和一些统计背景,请在此处查看:wiki .您将为每对用户创建一个图表,然后您根据分数绘制点.. 例如,如果
aSong
已投2
来自 u1 和4
从 u2 开始,它将绘制点(2,4)
(假设user1为x轴,u2为y轴)。
澄清一下,您使用线性回归 找到两个系数 A
和 B
,它描述了最小化与图形所有点的距离的线。这一行有这个公式:y = Ax + B
.如果两组相似点应该靠近主对角线所以A
B
应该趋向于 1到 0。不要认为这个解释是完整的或作为引用,因为它缺乏可靠性和典型的数学形式,它只是给你一个想法。
编辑: 就像其他人写的那样,存在更复杂的聚类数据算法,例如 k-means,但我建议您从简单的算法开始(实际上,当您意识到结果还不够时,您应该需要一些更难的算法)。
关于python - 基于投票的用户之间的相似性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1836352/