【机器学习】入门笔记系列(13)| 基于内容的推荐系统

一、基于内容的推荐系统

推荐系统时当下非常流行的机器学习应用。

下面,讲解「基于内容的推荐系统」。

1.1 基于内容的推荐算法思想

根据用户过去喜欢的物品,为用户推荐和他过去喜欢的物品相似的物品,而关键就在于这里的物品相似性的度量,这才是算法运用过程中的核心。

举个例子,在京东上购物的小伙伴们应该都知道,每当你进入任何一个物品页面的时候都会有一个“猜你喜欢”的栏目,这时候他就会根据你经常购买的物品给你推荐相似的物品。

基于内容的推荐算法一般包括以下三步:

  1. 物品表示:提取物品的特征 x 来表示物品;
  2. 特征学习:利用一个用户过去喜欢或者不喜欢的物品的特征数据,来训练学习算法得到用户的偏好特征 \theta
  3. 生成推荐列表:通过比较上一步得到的用户偏好与候选物品的特征,为此用户推荐一组相关性最大的物品。

1.2 电影推荐系统的实现

首先定义一些表达式:

n_u = 用户人数
n_m = 电影数量
r(i,j) = 1 当用户 j 对 电影 i 进行了评分
y^{(i,j)} = 用户 j 对电影 i 评分的分数(if~r(i,j) = 0, y^{(i,j)}=undefined),其中用户对电影的评分范围是 0 星到 5 星

1.2.1 给定电影特征和评分,学习用户偏好

电影推荐系统实例1

其中,上表中 ? 代表用户对该电影没有评分。表的左半边是用户对电影的评分,最右边的两列是电影的特征。

物品表示:假设从电影提取两个特征 x_1,x_2 分别表示电影的爱情指数(即电影中爱情元素的占比)与动作指数(即电影中动作元素的占比),取值范围均为 0 到 1 ,且 x_1 + x_2 = 1

特征学习:知道这些电影特征值 x_1,x_2 以及知道用户对这些电影的评分后,可以选用学习算法对每个用户建模来学习用户偏好 \theta^{(j)}。即假设我们选用线性回归模型,最终,对于每个用户 j,通过训练学习一个参数(这里我们可以称为用户偏好) \theta^{(j)},这样就可以用 x^{(i)}\theta^{(j)} 来预测用户 j 对电影 i 的评分。

特征学习-对每个用户建立预测模型
线性回归模型具体实现

其中,在构建推荐系统时,我们也不想只对某一个用户学习出参数向量 \theta^{(j)},我们想对所有的用户都学习出 \theta。因为我有 n_u 个用户,所以我希望学习出所有的参数。那么我要做的是将这个最优化目标另外再加上一个求和。所以与之前所学的线性回归模型唯一不同的是现在不是只对一个 θ^{(j)},现在我要对所有的用户求这个目标函数的和,然后对整个优化目标求最小值,最小化整个这个代价函数 min_{\theta^{(1)},..,\theta^{(n_u)}} J(\theta^{(1)},...,\theta^{(n_u)})

\sum_{i:r(i,j)=1} 是一个用户对所有已评分电影;\sum_{j=1}^{n_u} 是遍历所有用户

生成推荐列表:得到了用户偏好 \theta^{(j)},代入待选电影的特征值 x^{(i)},进行预测并根据预测结果排序,将排名靠前的电影推荐给用户。

这看上去就跟之前所学线性回归模型在优化目标上有点区别之外,其余没有特别大的区别。

1.2.2 给定用户偏好和评分,学习电影的特征

假设已知条件调换,我们有某一个数据集,我们并不知道特征的值是多少。所以比如我们得到一些关于电影的数据:不同用户对电影的评分,但我们并不知道每部电影到底有多少浪漫的成分,也不知道到底有多少浪漫的成分,于是我把所有的问题都打上问号,只知道用户对这几部电影的评分。没有了电影的特征值是没法进行学习算法就没法推荐。那么 「如何得到电影的特征值并构建推荐系统」

电影推荐系统实例1

假设我们对每一位用户进行问卷调查,而且每一位用户都告诉我们,他们是否喜欢爱情电影以及他们是否喜欢动作电影(比如现在很多网站都会让用户选择喜爱偏好)。假如用户 1 告诉我们她十分喜欢爱情电影,于是用户1的偏好 \theta^{(1)}_1 对应的值就是满分即 5 分,而她非常不喜欢动作电影,于是 \theta^{(1)}_2 就是0。通过这种方式能得到所有用户的偏好 \theta

给定用户偏好

然后通过四个用户喜爱偏好和对第1部电影的评分,可以大概推断出第 1 部电影的爱情元素占比较高,动作元素占比很小,从而初始化电影 1 的特征值,以此类推可对所有电影特征进行初始化。

初始化电影的特征值

初始化完成后,通过梯度下降算法最小化代价函数,预测电影本身指数,整个过程如下:

给定用户偏好和评分,学习电影的特征

跟给定电影的特征,预测用户对电影评分的公式几乎一样,就是两者的变量发生了对调而已。

1.2.1 和 1.2.2 公式对比

二、协同过滤(Collaborative Filtering)

假设只知道用户对电影的评分的情况下,如何得到电影的合理特征值 x 以及用户对电影类型的偏好 \theta

一种构建推荐系统的方法叫做协同过滤。

2.1 协同过滤算法思路

在知道用户对电影的评分的情况下,如何得到电影的合理特征值 x 以及用户对电影类型的偏好 \theta

基本的协同过滤算法:随机初始化 \theta 的值,基于你一开始随机猜测出的 \theta 的值,运用 1.2.2 方法,可以学习到不同电影的特征 x,然后用学习到的电影的特征 x1.2.1 方法,可以得到对参数 \theta 的更好估计,又用这个更好的 \theta1.2.2 方法,得到更好的电影的特征 x 。然后我们可以继续迭代,不停重复优化 \theta \rightarrow x \rightarrow \theta \rightarrow ... 。如果你这样做的话,你的算法将会收敛到一组合理的电影的特征 x 以及一组不同用户合理偏好参数 \theta 的估计。

Guess~\theta \Rightarrow x \Rightarrow \theta \Rightarrow x \Rightarrow \theta \Rightarrow ... (至收敛)

2.2 协同过滤算法实现

上面讲解了算法的思路就是不停地重复这些计算,先随机地初始化这些参数 \theta,然后运用 \theta 初始化 x;然后优化 x,优化 \theta,优化 x,优化 \theta ...

但实际上呢,存在一个更有效率的算法让我们不再需要再这样不停地依次计算 x,\theta,而是能够将 x,\theta 同时计算出来。

首先,将 1.2.1 和 1.2.2 的优化目标合并。

合并优化目标

其中,红框标注出来的求和公式都是一样的,就是表达不同而已。

Tips:用这种方法,我们可以不需要 x_0 = 1 这个前提,也就是 x^{(i)} \in \mathbb{R}^{n},\theta^{(j)} \in \mathbb{R}^{n}

协同过滤算法完整的过程

PS:第二步中,先计算完全部特征 x,再计算全部参数 \theta

2.3 协同过滤算法向量化实现

协同过滤算法向量化实现

Y = Y + \mu

2.4 电影之间的相似度衡量

两个电影的特征值之差 ||x^{(i)} - x^{(j)}|| 可以衡量两个电影之间的相似程度。

2.5 算法实现细节:均值归一化

对于从未对电影评分的用户,使用协同过滤算法会得到他的偏好全0 并且他对所有的电影评分都是 0,这样我们无法推荐他任何电影

对于从未对电影评分的用户

这个问题需要使用均值归一化解决

电影评分矩阵 Y

使用均值归一化的协同过滤算法

对未知的用户,让他对电影的评分等于电影的平均分,即上例中

y(i,5) = [2.5,2.5,2,2.25,2.25]^T

换句话说,使用均值归一化的协同过滤算法,对于未知的用户,我们推荐平均评分较高的电影给他。

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.

总结

基于内容的推荐算法一般包括以下三步:

  1. 物品表示:提取物品的特征 x 来表示物品;
  2. 特征学习:利用一个用户过去喜欢或者不喜欢的物品的特征数据,来训练学习算法得到用户的偏好特征 \theta
  3. 生成推荐列表:通过比较上一步得到的用户偏好与候选物品的特征,为此用户推荐一组相关性最大的物品。
协同过滤算法学习特征 $x$ 和用户偏好 $\Theta$

参考文献

  1. 吴恩达机器学习 week9
  2. 【推荐系统】详解基于内容的推荐算法
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,451评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,172评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,782评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,709评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,733评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,578评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,320评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,241评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,686评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,878评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,992评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,715评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,336评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,912评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,040评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,173评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,947评论 2 355

推荐阅读更多精彩内容