Car*_*son 6 python mysql database information-retrieval similarity
假设每首歌都有一组用户,一组歌曲和一组投票:
=========== =========== =======
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]
=========== =========== =======
Run Code Online (Sandbox Code Playgroud)
什么是基于歌曲投票计算用户相似度的最有效方法?有没有比为每首歌重复每个用户和每次投票更好的方法?
Jac*_*ack 11
有两种常用指标可用于查找用户之间的相似性:
欧几里得距离,这正是你所想的:想象一个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应该倾向于1而B0为0.不要假设这个解释完整或作为参考,因为它缺乏稳健性和典型的数学形式,它只是为了给你一个想法.
编辑: 像其他人写的那样,存在更复杂的聚类数据算法,比如k-means,但我建议你从简单的算法开始(实际上,当你意识到结果不够时,你应该需要更困难的东西).