《现代推荐算法》矩阵分解系列(SVD,FunkSVD,BiasSVD)原理

/关注公众号 长歌大腿,发送“机器学习”关键字,可获取包含机器学习(包含深度学习),统计概率,优化算法等系列文本与视频经典资料,如《ESL》《PRML》《MLAPP》等。/
文章来源《现代推荐算法》矩阵分解系列(SVD,FunkSVD,BiasSVD)原理 .

奇异值分解(SVD)

奇异值分解(SVD)原理与主要应用在数据降维中,可以将这个用户物品对应的m×n矩阵M进行SVD分解,并通过选择部分较大的一些奇异值来同时进行降维,也就是说矩阵M此时分解为:

M_{m \times n} = U_{m \times k}^{T}D_{k \times k}V_{k \times n}

其中k是矩阵M中较大的部分奇异值的个数,一般会远远的小于用户数和物品树。如果我们要预测第i个用户对第j个物品的评分,则只需要计算,通过这种方法,可以将评分表里面所有没有评分的位置得到一个预测评分。通过找到最高的若干个评分对应的物品推荐给用户。

通过上面的简单原理讲解,大家可以看出这种方法简单直接。但是基于SVD的矩阵分解要求矩阵是稠密的,整个矩阵的所有位置不能有空白。有空白时M是没法直接去SVD分解的。所以,这就到了是为什么SVD主要应用的途径是“数据降维”,因为它提出的思维就是用来数据降维的。那么这种数学理论知识又扎实的算法,又想用在了推荐系统中,但是数据又要求稠密怎么办,第一个思路就是开头说的方法是对评分矩阵中的缺失值进行简单的补全,比如用全局平均值或者用用户物品平均值补全,得到补全后的矩阵。接着可以用SVD分解并降维。

有了上面的补全策略,传统SVD在推荐算法上依旧不太容易工业化应用。因为用户数和物品一般目前都是海量数据,任何一个平台一个数据库都是千万级数据,这也就是为什么分布式存储和云计算能够大面积应用的根本原因,。针对于海量数据的一个矩阵做SVD分解是非常耗时的。能够在数学理论完善的基础上加之更难,使数据要求不是稠密的,计算复杂度降低是一个可行的思路,针对于这两点,各位机器学习界大神做了各种优化,下面来看看实际可以用于推荐系统的矩阵分解。

FUNKSVD又称为LFM算法。

FunkSVD就是在SVD的技术上优化“数据稠密”+“计算复杂度告”+“只可以用来数据降维”难题的。一个矩阵做SVD分解成3个矩阵很耗时,同时还面临稀疏的问题,那么解决稀疏问题,同时只分解成两个矩阵呢?期望矩阵M这样进行分解成以下这个形式:

M_{m \times n} = P_{m \times k}^{T}Q_{k \times n}

SVD理论知识完善,在数据降维应用成熟,FunkSVD如何将矩阵M分解两个特征维度为P和Q再继续优化计算成了难题,这里各位机器学习大神提出了更久远更理论知识丰富的线性回归的思想。主要目标是让用户的评分和用矩阵乘积得到的评分残差尽可能的小,他们给出的思路就是用均方差作为损失函数,来学习出的P和Q的参数。线性回归思维理论的好处是优化策略完善,梯度下降,理论知识成熟,计算难度低。

对于某一个用户评分,采用FunkSVD进行矩阵分解,则拟合函数表示为q_{i}^{T}p_{i},采用均方差做为损失函数,则期望尽可能的小(损失函数极小值),如果考虑所有的物品和样本的组合,则我们期望最小化下式

\sum_{i,j}(m_{i,j}-q_{j}^{T}p_{i})^{2}

只要能够最小化损失上面的式子,并求出极值所对应的,就可以得到矩阵P和Q,那么对于任意矩阵M任意一个空白评分的位置,可以通过计算q_{j}^{T}p_{i}预测评分。

当然,在实际应用中,我们为了防止过拟合,会加入一个L2的正则化项,因此正式的FunkSVD的优化目标函数J(p,q)是这样的

argmin_{p_{i},q_{j}} \sum_{i,j}(m_{i,j}-q_{j}^{T}p_{i})^{2} + \lambda (\left \| p_{i} \right \|_{2}^{2}+\left \| q_{j} \right \|_{2}^{2})

\lambda为正则化系数。

对于这个优化问题,我们一般通过梯度下降法来进行优化得到结果。

将上式分别对求导得到:

\frac{\partial J}{\partial p_{i}} = -2(m_{ij}-q_{j}^{T}p_{i})q_{j}+2 \lambda p_{i}
\frac{\partial J}{\partial q_{j}} = -2(m_{ij}-q_{j}^{T}p_{i})p_{i}+2 \lambda q_{j}

则在梯度下降法迭代时的迭代公式为:

p_{i} = p_{i}+\alpha((m_{i,j}-q_{j}^{T}p_{i})q_{j}-\lambda p_{i})
q_{j} = q_{j}+\alpha((m_{i,j}-q_{j}^{T}p_{i})p_{i}-\lambda q_{j})

通过迭代我们最终可以得到P和Q,进而用于推荐。FunkSVD算法虽然思想很简单,但是在实际应用中效果非常好,这真是验证了大道至简。

BiasSVD的推荐算法

好了,我们知道一种了矩阵分解的FunkSVD算法,但是针对于这种打分,而且多半是以这种社交媒体或者网站平台为主,那么久会导致了很多商业问题和难点,很难做到合理化、公平化,因为有人的参与是最难的,经过了各种网站实时反馈,打开有以下几个问题:

  • 人员问题(或者水军问题),就是参与人员的问题,比如有的人就是比较好说话,他对每一部看过的电影或者物品,都觉得很好,都给了很高的评分;也有一部分人艺术审美很高,比较严格,他对绝大部分都给了比大众水平低的分,当然这两部分人都有可能是水军,都是利益关联方,但是他们的数据是不准确的,不能反映真实大众的想法,怎么降低这部分误差成了关键。

  • 作品问题,如说山寨电影,比如山寨物品,这部分本身就具有问题,而靠贴流量贴标签贴热点等状态,聚集了很多的评分,也反映不出真实大众的水平,所以降低这部分物品的误差也是关键。

  • 全局问题,简单以电影为例,也许赶上了某一个时间段的大众审美热度,大家都去拍这个题材,而这个题材分数整体偏高了,如何降低这种全局偏差也成了关键。

解决上面三种问题的思维是上面机器学习流程里的优化问题,因为是属于提升问题,那么针对于机器学习最常用的优化就是“正则化”+“偏置项”,正则化是为了防止整个模型的过分拟合,偏置项是我既然知道参与的部分数据本身具有误差,那我人工手动提前去在损失函数里增加这部分偏差考虑,在计算求解中求出这个参数,然后应用在新的数据里就应该是更符合大众,更准确地数据了。

假设评分系统平均分为u,第i个用户的用户偏置项为bi,而第j个物品的物品偏置项为bj,则加入了偏置项以后的优化目标函数J(p,q)是这样的

argmin_{p_{i},q_{j}} \sum_{i,j}(m_{i,j}-\mu -b_{i}-b_{j}-q_{j}^{T}p_{i})^{2} + \lambda (\left \| p_{i} \right \|_{2}^{2}+\left \| q_{j} \right \|_{2}^{2}+\left \| b_{i} \right \|_{2}^{2}+\left \| b_{j} \right \|_{2}^{2})

优化目标也可以采用梯度下降法求解。和FunkSVD不同的是,此时我们多了两个偏执项的迭代公式和FunkSVD类似,只是每一步的梯度导数稍有不同而已,这里就不给出了。而一般可以初始设置为0,然后参与迭代。这里给出b_{i} b_{j}的迭代方法

b_{i} = b_{i}+\alpha(m_{i,j}-b_{i}-b_{j}-\mu-q_{j}^{T}p_{i}-\lambda b_{i})
b_{j} = b_{j}+\alpha(m_{i,j}-b_{i}-b_{j}-\mu-q_{j}^{T}p_{i}-\lambda b_{j})

通过迭代最终可以得到P和Q,进而用于推荐。BiasSVD增加了一些额外因素的考虑,因此在某些场景会比FunkSVD表现好。

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

推荐阅读更多精彩内容