我们平常都会听音乐。以网易云音乐为例,根据我们喜欢的音乐的风格,给我们每日推送音乐。相当多的时候,它推送的音乐正好是我们喜欢听的音乐。下面我们就总结这样一个只能推荐系统,是如何实现的。
算法分析
要解决这个问题,满足以下两点就可:
1:找到跟你口味偏好相似的人,将他们喜欢的音乐推送给你。
2:找到你喜欢的音乐相似的类型,把这些音乐推送给你。
下面就根据上面两个思路实现算法。
- 基于相似用户的推荐
基于上面的图标,我们将用户对歌曲的喜欢程度用 0,1 来表示。1 代表用户喜欢,0 代表用户不喜欢。根据上面的图标,我们可以统计出每个用户喜欢的音乐有哪些。然后,遍历这些用户,找到一个跟你喜欢的音乐相同数量最大的那个用户,把他喜欢的音乐推送给你就可以了。
上述的过程虽然也实现了推荐功能,但是粒度太过粗糙,推荐的质量并不高。接下来,对上面的过程进行优化。我们将用户对歌曲的喜欢,细化为程度,通过用户的行为,定义用户对音乐的喜欢程度。
上图将用户行为量化为喜欢的程度分值。
将用户行为量化为分值后,再次计算两个用户的相似程度的时候,我们用欧几里得距离来表示。下图表示欧几里得距离计算公式:
我们把每个用户对所有歌曲的喜爱程度,都用一个向量表示,计算出两个向量之间的欧几里得距离,作为两个用户的口味相似程度的度量。由下图计算过程,得出小明与你的口味最相似。
- 基于相似歌曲的推荐
基于相似歌曲的推荐其实与上述的基于相似用户的推荐几乎一样。相似用户推荐中,我们基于用户的行为,对歌曲进行打分。在相似歌曲推荐中,我们基于歌曲的标签,由用户来评分。
对一首歌,定义多种标签,然后由用户对该歌曲归属于那一类标签进行分数的评估。最后,将用户的打分作为向量,求出欧几里得距离作为歌曲的相似度。如图所示:
总结
黑名单过滤方法中,用到了布隆过滤器,但是布隆过滤器会有误判的情况。为了减少误判带来的错误估计,我们可以采用上述三种方法一同验证骚扰电话和垃圾短信,降低误判带来的风险。
本文创作灵感来源于 极客时间 王争老师的《数据结构与算法之美》课程,通过课后反思以及借鉴各位学友的发言总结,现整理出自己的知识架构,以便日后温故知新,查漏补缺。
初入算法学习,必是步履蹒跚,一路磕磕绊绊跌跌撞撞。看不懂别慌,也别忙着总结,先读五遍文章先,无他,唯手熟尔~
与诸君共勉