缘由
上一次 离线计算失败了,简单说:我产生的推荐列表里没有我删除了原本用户收藏的歌曲。这是因为我单纯的以所有用户收藏的歌曲相似度来排序,只取前10个/20个/30个。考虑的太不全面了。详情请见博客:离线计算,验证推荐的准确性(失败)。改进的方案
- 我可以结合相似用户和相似歌。对于一个用户首先找到相似用户,再把相似用户里面没有被目标用户收藏的歌选出来,作为集合A。再拿到这个用户收藏的歌曲的相似歌,排序作为集合B。A与B用户求交集,再排序。
- 利用标签,先抓获那一万首歌曲的标签,利用一下。我暂时没有观察到网站有针对用户的标签,针对歌曲的标签到很全面。我可以找出统计用户收藏歌曲的标签,看是否能总结出用户标签。
- 如果用户收藏的歌曲中,有两首歌,他们的相似歌重复了,那么我应该把那首重复的相似歌的相似度相加,而不是选择一个最高的替代。
- 本来这整套相似度计算方式就是针对电影的评分系统的。那么我也可以把用户是否收藏这首歌的概率视为0和1,也就是收藏了这首歌的概率为100%或者0%。如果我换一种方式,我来算算我删除了的歌,他们的概率是多少呢?这样,我针对每一个用户就换了一种方式,原来是说产生的推荐列表中会有多少首我删除了的歌,但是现在我来算算我删除了的歌的概率是多少,那么其实这个概率就是相似度。因为相似度最高的歌不证明用户不喜欢,也许用户只是暂时没发现呢?所以我就算算我删除了的歌的概率,先算每首歌的,再算个平均值。
- 算一下某一个用户收藏的歌曲的歌手和标签的熵,这样就可以知道这两个属性对歌曲的影响,有没有什么规律可循。
- 对那本推荐系统的大书中,所有出现music词的地方作一个总结。
改进歌曲相似度的计算方式
如改进方案中第三点所说:
如果用户收藏的歌曲中,有两首歌,他们的相似歌重复了,那么我应该把那首重复的相似歌的相似度相加,而不是选择一个最高的替代。
所以我现在立刻改进这一点,看是否对产生的结果有所影响。
改动 前的代码: