向量空间 Vector Space -- 推荐系统
发布日期:2021-07-01 03:40:23 浏览次数:3 分类:技术文章

本文共 1414 字,大约阅读时间需要 4 分钟。

文章目录

音乐App的功能越来越强大,不仅可以自己选歌听,还可以根据你听歌的口味偏好,
给你推荐可能会喜爱的音乐,有时候,推荐的还非常适合你的口味。

1. 算法解析

用两句话总结:

  • 找到跟你口味相似的用户,把他们爱听的歌曲推荐给你
  • 找出跟你喜爱的歌曲特征相似的歌曲,把这些歌曲推荐给你

2. 基于相似用户做推荐

把跟你听类似歌曲的人,看做口味相似的用户。用“1”表示“喜爱”,用“0”笼统地表示“不发表意见”。从图中看出,你and小明共同喜爱的歌曲最多,有5首。可以说,小明跟你的口味非常相似。

在这里插入图片描述
遍历所有的用户,对比每个用户跟你共同喜爱的歌曲数,并且设置一个阈值,某用户共同喜爱歌曲数超过这个值,把这个用户看作跟你口味相似,把这个用户喜爱但你还没听过的歌曲,推荐给你。

如何知道用户喜爱哪首歌曲呢?可以通过用户的行为,来定义这个喜爱程度。给每个行为定义一个得分,得分越高表示喜爱程度越高。

在这里插入图片描述
刚刚那个例子,把每个人对每首歌曲的喜爱程度表示出来。图中,某个人对某首歌曲是否喜爱,我们不再用“1”或“0”表示,而是对应一个分值。
在这里插入图片描述
欧几里得距离(Euclidean distance)是用来计算两个向量之间的距离的。
K维空间中的某个位置,我们可以写作(X1,X2,X3,……Xk)。这种表示方法就是向量(vector)。
在这里插入图片描述
把每个用户对所有歌曲喜爱程度,都用一个向量表示。计算出两个向量之间的欧几里得距离,作为两个用户的口味相似程度的度量。
在这里插入图片描述

3. 基于相似歌曲做推荐

如果用户是一个新用户,还没有收集到足够多的行为数据,该如何推荐呢?

基于相似歌曲的推荐方法,就是说,如果某首歌曲跟你喜爱的歌曲相似,我们就把它推荐给你。

对歌曲定义一些特征项,比如伤感、愉快、摇滚、民谣,柔和、高亢等等。每个歌曲的每个特征打一个分数,这样每个歌曲就对应一个特征向量。基于这个特征向量,计算歌曲之间的欧几里得距离。欧几里得距离越小,表示两个歌曲的相似程度越大。

上面方案,需要一个前提,找到足够多,并且能够全面代表歌曲特点的特征项,除此之外,还要人工给每首歌标注每个特征项的得分。对于收录了海量歌曲的音乐App来说,这是一个非常大的工程。此外,人工标注有很大的主观性。

换一种思路。对于两首歌,如果喜欢听的人群都是差不多的,那侧面就可以反映出,这两首歌比较相似。如图所示,每个用户对歌曲有不同的喜爱程度,我们依旧通过上一个解决方案中定义得分的标准,来定义喜爱程度。

在这里插入图片描述
这个图跟基于相似用户推荐中的图几乎一样。只不过这里把歌曲和用户主次颠倒了一下。

  • 基于相似用户的推荐方法中,针对每个用户,我们将对各个歌曲的喜爱程度作为向量。
  • 基于相似歌曲的推荐思路中,针对每个歌曲,我们将每个用户的打分作为向量。

有了每个歌曲的向量表示,通过计算向量之间的欧几里得距离,来表示歌曲之间的相似度。欧几里得距离越小,两个歌曲越相似。

然后,在用户已经听过的歌曲中,找出他喜爱程度较高的歌曲。然后,找出跟这些歌曲相似度很高的其他歌曲,推荐给他。

4. 总结

上面问题是推荐系统(Recommendation System)里最典型的一类问题。这部分内容,可见算法的强大之处,利用简单的向量空间的欧几里得距离,就能解决如此复杂的问题。

上面只说了基本的理论,实践中遇到的问题还有很多,比如冷启动问题,产品初期积累的数据不多,不足以做推荐等等。这些更加深奥的,在实践中慢慢探索吧。

转载地址:https://michael.blog.csdn.net/article/details/98779366 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:B+树 -- MySQL数据库索引
下一篇:朴素贝叶斯算法--过滤垃圾短信

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年04月09日 19时07分56秒