本章关键词
向量、线性代数、高数、推荐系统
上一节我们学习了基于概率论和统计对一事物进行度量。这一节,我们学习使用向量来代表是一个事物的属性,并用数学方法判断两个事物的关联关系,从而实现同类别的信息推荐。
问题解析
音乐软件的推荐功能,尤其是云村的每日推荐的歌曲很可能会惊艳到你。那么,你知道如何实现音乐软件的推荐功能吗?今天我们就来了解其底层原理。
实现音乐推荐,有两个思路可以供你选择:
- 找到和你音乐偏好相同的人,将他们喜欢的歌曲推荐给你
- 找到和你喜欢的歌曲相近的音乐,将这些歌曲推荐给你
那么,如何度量一个人的音乐偏好呢?如何度量两个音乐的相近程度呢?
我们之前使用编辑距离度量了两个文本之间的距离,而对于音乐,我们可以使用向量这一数学概念描述一首歌曲。
算法解析
根据有相同偏好的用户推荐歌曲
我们可以使用向量描述用户的音乐偏好
1.向量维度
数学概念上的“维度”你一定知道,当数据是一维的,我们只需要用数轴(一个变量)就可以描述它;当数据是二维时,就需要用一个平面坐标系(两个变量)描述。以此类推,当数据为 K 维的时候,我们就要用 K 个变量描述它。
我们可以将一首歌曲当做一个维度,将一个人的音乐偏好转换为一个向量,首先,看下面的表格:
在表中,我们使用 0 和 1 笼统地表示一个人对歌曲的评价(稍后会做细化),使用 10 首歌作为描述偏好的维度,所以对于一个用户来说,描述它的向量(我称之为用户向量)是 10维 的。
2.衡量用户偏好
如果只用 0 和 1 描述用户对某一首歌的偏好未免太粗糙,这里使用更加细化的规则表示偏好:

这样,我们就可以比较精确地描述一个人的音乐偏好了。以“你”为例,你的音乐偏好就是(5,3,3,0,-1,2,5,4,1,-1),如果你有神奇的脑袋,你可以想象它在 10维 空间下的样子。
3.计算用户之间的偏好差距
通过之前的工作,我们已经将一个用户的音乐偏好转化成了一个向量。计算两个用户之间的喜好差距,就可以通过计算两个向量之间的“差距”完成。
这里有两种思路:用余弦函数计算两个向量之间的夹角 和 计算两个向量之间的欧几里得距离,这两个结果都可以表示两个用户之间的偏好差距,这里我们选择后者。
欧几里得距离的计算公式如下:

通过比较发现,小明和你的欧几里得距离最小,可以判断,小明和你的音乐偏好最相似。
这样,我们就就有理由将小明喜欢的音乐推荐给你了。
寻找相似歌曲做推荐
在这里,我们可以用向量描述一首歌曲被不同用户的喜爱程度
依然以开始的数据为例,我们将根据下面的表格为歌曲构造向量:
你会发现,我们推荐的思路几乎和上一个例子用的思路一样,所以我就不再解释了。
总结
- 我们可以使用一个向量描述一个个体在高维度下的状态
- 可以通过计算向量之间的距离量化度量两个个体之间的差距
- 当数据过多的时候,我们可以通过降维减少计算
- 降维有很多讲究,你可以:合并趋同的个体;保留差距最大的维度(最正交的维度) 等
- 可以用向量实现推荐系统,为了实现精准推荐,我们可以使用欧几里得距离计算差异
- 可以用向量实现分类,为了划分行业,我们也可以使用余弦公式计算向量之间的夹角
以上就是全部内容,希望你能够有所启发
注:本文章的主要内容来自我对极客时间app的《数据结构与算法之美》专栏的总结,我使用了大量的原文、代码和截图,如果想要了解具体内容,可以前往极客时间
网友评论