向量空间:如何实现一个简单的音乐推荐系统?
不仅可以选歌听,还可以根据你的听歌的口味偏好,推荐你可能喜欢的歌曲
算法解析
- 找到跟你口味偏好类似的用户,把他们爱听的歌曲推荐给你
- 找出跟你喜爱的歌曲特征相似的歌曲,把这些歌曲推荐给你
1.基于相似用户做推荐
把听类似歌曲的人看做口味相似的用户,跟谁共同喜爱的歌曲多,就说跟谁口味相似。只需要遍历所有用户,对比每个用户跟你共同喜爱的歌曲个数,并设置一个阈值,如果你和某个用户共同喜爱的歌曲个数超过这个阈值,把这个用户喜爱但你没听过的歌曲推荐给你
如何定义用户对某首歌曲的喜爱程度?
通过用户的行为来定义喜爱程度,给每个行为定义一个得分,得分越高表示喜爱程度越高
单曲循环 | 分享 | 收藏 | 搜索 | 听完 | 没听过 | 跳过 |
---|---|---|---|---|---|---|
5 | 4 | 3 | 2 | 1 | 0 | -1 |
有了用户对歌曲喜爱程度的对应表之后如何判断两个用户是否口味相似呢?
对于两个用户之间的相似度可以使用另外一个距离,就是欧几里得距离,欧几里得距离就是用来计算两个向量之间距离的。
向量和距离:
一维是一条线,用1,2,3等单个数表示一维空间的某个位置;二维是一个面,用(1,3)等表示二维空间某个位置;三维空间是个立体空间,用(1,3,5)等表示,K维空间的某个位置可以用(x1,x2,…,xk)表示,这种表示方法就是向量,怎么计算两个向量之间的距离呢?
把每个用户对所有歌曲的喜爱程度用一个向量表示,计算出两个向量之间的欧几里得距离,作为两个用户的口味相似程度的度量,如果小明与你的欧几里得距离最小,说明跟你的口味最相似
你:(5,3……)
小明:(4,5……)
小王:(1,0……)
小红:(3,0……)
小白:(0,0……)
你与小明、小王、小红、小白的欧几里得距离分别是:
、 、 、 所以跟小明口味最相似
2 基于相似歌曲做推荐
如果这是一个新用户,没有收集到足够多的行为数据,可以基于相似歌曲推荐,如果某歌曲跟你喜爱的歌曲相似,就把它推荐给你
如何量化两个歌曲之间的相似程度?
两首歌,如果喜欢听的人群都是差不多的,侧面反映出两首歌比较相似,使用基于用户中的标准来定义喜爱程度,每个用户对歌曲有不同的喜爱程度,来定义喜爱程度,基于相似用户的推荐方法中,针对每个用户,将对各个歌曲的喜爱程度作为向量,基于相似歌曲的推荐思路中,针对每个歌曲,将每个用户的打分作为向量,有了每个歌曲的向量表示,通过计算向量之间的欧几里得距离,距离越小,表示两个歌曲越相似,就在用户已经听过的歌曲中找出他喜爱程度较高的歌曲,在找出与这些歌曲很相似的其他歌曲推荐
总结引申
是推荐系统中最典型的问题