机器学习笔记038 | 推荐系统的理论逻辑

想象一下,如果

淘宝给你推荐了一个很符合自己心意的商品……

猫眼给你推荐了一部喜欢看的电影……

当当给你推荐了一本适合自己的书……

你会不会有下单购买的欲望?

即使你足够明智,不会因为这些推荐而冲动消费,但却不是所有人都能做到,依然会有很多人接受这样的推荐。

推荐系统可以说是机器学习的一个重要的应用方向。

有了这些智能的推荐,网站的销售业绩相比从前就能得到很大的提高。

1 基于内容的推荐算法

机器学习是如何发现用户偏好、怎么给出合理推荐的呢?

下面就用电影评分为例,说说基于内容的推荐(Content Based Recommendations)

评分的结果是,评分从 0 到 5 :

假如我们有5部电影和4个用户,评分的情况如下,问号代表没有评分:

这里我们进行如下标记:

nm : 电影数量,这里的值为 5
nu : 用户数量,这里的值为 4
r(i, j) : 用户 j 是否已经对电影 i 评分,如果已经评分,则为 1 ,否则为0,例如 r(1, 2) = 1,r(3,1) = 0。
y(i,j) :用户 j 对电影 i 的评分,例如 y(1,1) = 5,y(3,1) 未定义。

根据电影的信息,我们可以总结出两个特征:爱情、动作。

当然,各个电影的特征成分可能存在差异,如下表:

如果将用户的评分为标记 y ,特征和标签分别是:

每一部电影的特征向量就是:

那么对于每一个用户 j ,都可以学习到一个参数:

如果采用线性回归算法进行预测,那么问号处用户 j 对电影 i 的评分就通过 (j))Tx(i) 来得到。

为了得到 θ(j) ,我们的优化目标是:

其中 n 是特征数量,上面这里就是 n = 2 ,r(i, j) = 1 表示用户 j 已经对电影 i 评分,y(i,j) 为用户 j 对电影 i 的评分。

为了得到 θ(1) ,θ(2) ,…,θ(nu) ,我们的优化目标是:

所使用的梯度是:

2 协同过滤算法

但是有时候,我们并不清楚这些电影具备什么特征。

假如我们并不清楚电影《泰坦尼克号》是爱情片是动作片,还是爱情动作片,也不了解它到底有多少爱情成分,有多少动作成分。

那对我们来说,不仅用户的偏好是未知的,这些电影的特征也是未知的:

2.1 基本版

假设通过采访的方式,我们了解到小芳和丽丽喜欢爱情片,小明和老王偏爱动作片。

他们的偏好组成的参数向量就是:

基于他们的偏好,我们大概就能判断出电影《你的名字》和《泰坦尼克号》是爱情片,《英伦对决》和《奇异博士》是动作片。

通过特征和标签,我们可以得到参数 θ 的值。类似的,通过用户的偏好参数,我们也能计算得到特征 x 的值:

对于所有的参数 θ(1) ,…,θ(nu) ,我们可以学习得到 x(1) ,…,x(nm)

有了电影的特征信息,我们能推测出用户的偏好;有了用户偏好,我们能推测出电影的特征信息。

但是两个都没有,这就变成了一个先有鸡还是先有蛋的问题。

实际上我们能做的,就是随机猜测参数 θ 的值,然后优化计算得到特征 x ,再优化计算得到参数 θ ,如此反复来估计 θ 和 x :

θ → x → θ → x → θ → x → ······

我们根据每个用户对多部电影的评分,以及每部电影由多个不同用户的评分,来估算出电影的特征和用户的偏好,这实际上是这些用户在进行高效的合作。

每位用户的评分都是在帮助算法学习出更好的特征,而这些特征又可以被系统用来给其他人做出更准确的预测,这个过程就是最基本的协同过滤(Collaborative Filtering)

2.2 改进版

不知道你有没有发现,参数计算的前半部分:

和特征计算的前半部分:

两者其实是相同的,只是计算的顺序相反。

前者是对每部电影,计算各个用户对电影评分的误差,再对所有电影进行加总;
后者是对每个用户,计算各部电影该用户评分的误差,再对所有用户进行加总。

那么代价函数其实可以调整成为:

这里的 i 和 j 都是从 1 开始的,也就是特征 x 是 n 维的向量,参数 θ 也是 n 维的向量。

我们不需要 x0 和 θ0 ,因为所有特征都需要学习得到。

如果一个特征的值永远为 1 (x0 = 1),那么这应该可以通过学习得到,而不需要由我们来固定,这样的话算法其实更加灵活。

我们的优化目标是使得该代价函数最小,为了解决这个优化问题,我们将这个代价函数视为特征 x 和用户参数 θ 的函数。

运行梯度下降算法同时执行如下步骤:

这就是改进后的协同过滤算法。

这个算法不用像之前那样,需要反复计算 x 和 θ ,而是直接将这两组参数同时化简。

总的来说,协同过滤算法执行步骤如下

1.随机初始化 x(1) ,…,x(nm) ,θ(1) ,…,θ(nu) 的值;
2.使用梯度下降算法最小化 J( x(1) ,…,x(nm) ,θ(1) ,…,θ(nu) );
3.对于某个用户的参数 θ 和某部电影的特征 x,通过 θTx 来预测该用户对该电影的评分。

对于每部电影,每个用户的评分预测结果可以形成这样一个矩阵:

我们让 X 和 Θ 的矩阵为:

那么评分的预测结果可以使用向量进行表达: T

3 如何推荐

3.1 根据预测评分推荐

在得到所有评分的预测结果之后,那些某个用户没有评分的电影,就可以根据预测评分进行推荐。他可能评分高的,就优先推荐给他。

例如老王没有对《奇异博士》和《雏菊》进行评分,而我们的预计他的评分结果分别是 4 到 5 分和 0 到 1 分:

那么我们就把《奇异博士》推荐给他。

3.2 根据相关性推荐

另外一种方式就是,如果某个用户在网站上看某部电影。

因为我们已经学习得到了所有的特征 x ,通过特征的向量计算,我们就得到两部电影之间的相似性:

假如用户当前所看的电影是 i ,通过找到和 x(i) 距离最小的 x(j) ,我们就得到了相似性最强的电影 j ,然后就把电影 j 推荐给用户

例如老王在看《英伦对决》,通过特征的相似性计算,我们发现《奇异博士》是和《英伦对决》最相似的电影,然后就把《奇异博士》推荐给了老王。

3.3 未评分用户的推荐

假如一个用户没有对任何电影进行过评分,也就是我们没有办法获得他的偏好,那么应该如何给他推荐呢?

例如有这么一个用户小华,他没有对任何电影进行过评分:

如果我们直接使用协同过滤算法,我们学习到的参数其实是:

因为在优化代价函数的过程中,由于用户没有评分,真正对参数的计算起到作用的只有正则化部分:

所以参数为 0 的时候结果是最小的。

参数为 0 ,用户对所有电影的评分也全部被预测为 0 ,这其实没有什么意义:

那么对于没有进行过评分的用户,如何给他们推荐呢?

对于标记评分结果矩阵 Y ,我们可以将已评分的结果进行均值归一化处理:

因为学习之前已经对标记 Y 进行过处理,那么在学习完之后,需要将均值加回来,这样才是最终的预测结果:

对于小华来说,系统预测他的评分,其实就是大家评分的均值:

文章转载自公众号:止一之路

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

推荐阅读更多精彩内容