机器学习入门笔记系列(12)| 基于内容的推荐系统
一、基于内容的推荐系统
推荐系统时当下非常流行的机器学习应用。
下面,讲解「基于内容的推荐系统」。
1.1 基于内容的推荐算法思想
根据用户过去喜欢的物品,为用户推荐和他过去喜欢的物品相似的物品,而关键就在于这里的物品相似性的度量,这才是算法运用过程中的核心。
举个例子,在京东上购物的小伙伴们应该都知道,每当你进入任何一个物品页面的时候都会有一个“猜你喜欢”的栏目,这时候他就会根据你经常购买的物品给你推荐相似的物品。
基于内容的推荐算法一般包括以下三步:
- 物品表示:提取物品的特征 来表示物品;
- 特征学习:利用一个用户过去喜欢或者不喜欢的物品的特征数据,来训练学习算法得到用户的偏好特征 ;
- 生成推荐列表:通过比较上一步得到的用户偏好与候选物品的特征,为此用户推荐一组相关性最大的物品。
1.2 电影推荐系统的实现
首先定义一些表达式:
1.2.1 给定电影特征和评分,学习用户偏好
电影推荐系统实例1其中,上表中 ? 代表用户对该电影没有评分。表的左半边是用户对电影的评分,最右边的两列是电影的特征。
物品表示:假设从电影提取两个特征 分别表示电影的爱情指数(即电影中爱情元素的占比)与动作指数(即电影中动作元素的占比),取值范围均为 0 到 1 ,且 。
特征学习:知道这些电影特征值 以及知道用户对这些电影的评分后,可以选用学习算法对每个用户建模来学习用户偏好 。即假设我们选用线性回归模型,最终,对于每个用户 ,通过训练学习一个参数(这里我们可以称为用户偏好) ,这样就可以用 来预测用户 对电影 的评分。
特征学习-对每个用户建立预测模型 线性回归模型具体实现其中,在构建推荐系统时,我们也不想只对某一个用户学习出参数向量 ,我们想对所有的用户都学习出 。因为我有 个用户,所以我希望学习出所有的参数。那么我要做的是将这个最优化目标另外再加上一个求和。所以与之前所学的线性回归模型唯一不同的是现在不是只对一个 ,现在我要对所有的用户求这个目标函数的和,然后对整个优化目标求最小值,最小化整个这个代价函数 。
是一个用户对所有已评分电影; 是遍历所有用户
生成推荐列表:得到了用户偏好 ,代入待选电影的特征值 ,进行预测并根据预测结果排序,将排名靠前的电影推荐给用户。
这看上去就跟之前所学线性回归模型在优化目标上有点区别之外,其余没有特别大的区别。
1.2.2 给定用户偏好和评分,学习电影的特征
假设已知条件调换,我们有某一个数据集,我们并不知道特征的值是多少。所以比如我们得到一些关于电影的数据:不同用户对电影的评分,但我们并不知道每部电影到底有多少浪漫的成分,也不知道到底有多少浪漫的成分,于是我把所有的问题都打上问号,只知道用户对这几部电影的评分。没有了电影的特征值是没法进行学习算法就没法推荐。那么 「如何得到电影的特征值并构建推荐系统」
电影推荐系统实例1假设我们对每一位用户进行问卷调查,而且每一位用户都告诉我们,他们是否喜欢爱情电影以及他们是否喜欢动作电影(比如现在很多网站都会让用户选择喜爱偏好)。假如用户 1 告诉我们她十分喜欢爱情电影,于是用户1的偏好 对应的值就是满分即 5 分,而她非常不喜欢动作电影,于是 就是0。通过这种方式能得到所有用户的偏好 :
给定用户偏好然后通过四个用户喜爱偏好和对第1部电影的评分,可以大概推断出第 1 部电影的爱情元素占比较高,动作元素占比很小,从而初始化电影 1 的特征值,以此类推可对所有电影特征进行初始化。
初始化电影的特征值初始化完成后,通过梯度下降算法最小化代价函数,预测电影本身指数,整个过程如下:
给定用户偏好和评分,学习电影的特征跟给定电影的特征,预测用户对电影评分的公式几乎一样,就是两者的变量发生了对调而已。
1.2.1 和 1.2.2 公式对比二、协同过滤(Collaborative Filtering)
假设只知道用户对电影的评分的情况下,如何得到电影的合理特征值 以及用户对电影类型的偏好 ?
一种构建推荐系统的方法叫做协同过滤。
2.1 协同过滤算法思路
在知道用户对电影的评分的情况下,如何得到电影的合理特征值 以及用户对电影类型的偏好 。
基本的协同过滤算法:随机初始化 的值,基于你一开始随机猜测出的 的值,运用 1.2.2 方法,可以学习到不同电影的特征 ,然后用学习到的电影的特征 和 1.2.1 方法,可以得到对参数 的更好估计,又用这个更好的 与 1.2.2 方法,得到更好的电影的特征 。然后我们可以继续迭代,不停重复优化 。如果你这样做的话,你的算法将会收敛到一组合理的电影的特征 以及一组不同用户合理偏好参数 的估计。
2.2 协同过滤算法实现
上面讲解了算法的思路就是不停地重复这些计算,先随机地初始化这些参数 ,然后运用 初始化 ;然后优化 ,优化 ,优化 ,优化 ...
但实际上呢,存在一个更有效率的算法让我们不再需要再这样不停地依次计算 ,而是能够将 同时计算出来。
首先,将 1.2.1 和 1.2.2 的优化目标合并。
合并优化目标其中,红框标注出来的求和公式都是一样的,就是表达不同而已。
协同过滤算法完整的过程Tips:用这种方法,我们可以不需要 这个前提,也就是
PS:第二步中,先计算完全部特征 ,再计算全部参数
2.3 协同过滤算法向量化实现
协同过滤算法向量化实现2.4 电影之间的相似度衡量
两个电影的特征值之差 可以衡量两个电影之间的相似程度。
2.5 算法实现细节:均值归一化
对于从未对电影评分的用户,使用协同过滤算法会得到他的偏好全0 并且他对所有的电影评分都是 0,这样我们无法推荐他任何电影
对于从未对电影评分的用户这个问题需要使用均值归一化解决
电影评分矩阵 Y
使用均值归一化的协同过滤算法对未知的用户,让他对电影的评分等于电影的平均分,即上例中
换句话说,使用均值归一化的协同过滤算法,对于未知的用户,我们推荐平均评分较高的电影给他。
We talked about mean normalization. However, unlike some other applications of feature scaling, we did not scale the movie ratings by dividing by the range (max – min value). This is because:
All the movie ratings are already comparable (e.g., 0 to 5 stars), so they are already on similar scales.
总结
基于内容的推荐算法一般包括以下三步:
- 物品表示:提取物品的特征 来表示物品;
- 特征学习:利用一个用户过去喜欢或者不喜欢的物品的特征数据,来训练学习算法得到用户的偏好特征 ;
- 生成推荐列表:通过比较上一步得到的用户偏好与候选物品的特征,为此用户推荐一组相关性最大的物品。
参考文献
- 吴恩达机器学习 week9
- 【推荐系统】详解基于内容的推荐算法