交替最小二乘法(Alternating Least Squares, ALS)

交替最小二乘法(Alternating Least Squares, ALS)

背景知识

显式数据与隐式数据(Explicit data and implicit data)

  1. 显式数据(Explicit Data) 是指那些有评价得分的数据,比如对电影的评分。此类数据明确指出用户对物品的喜好程度,但往往很难获取到。
  2. 隐式数据(Implicit Data) 是指从用户行为中收集到的数据,缺少评分或评分所必须的特定行为。这可能是一个用户购买了某个物品、重复播放了多少次歌曲、观看某部电影多长时间以及阅读某篇文章的时长等等。此类数据优点是数据量大,缺点是噪音较多并且往往含义不明显。
    举个例子,通过给商品打星的数量,我们知道 1 表示用户不喜欢该商品,5 表示用户非常喜爱。用户播放了某歌曲,我们推测用户可能喜欢该歌曲或者讨厌该歌曲,也可能介于两者之间。如果用户没有播放某歌曲,有可能是因为用户不喜欢它,也可能只是不知道这首歌曲的存在。

邻域模型(Neighborhood models)

  1. UserBased CF - 基于用户的协同过滤
  2. ItemBase CF - 基于物品的协同过滤

所有以物品为中心的模型在处理隐式数据时有个共同的劣势 -- 他们都不提供区分用户偏好与偏好的置信度的能力。

潜在因素模型(Latent factor models)

Netflix Prize开始后,Simon Funk在其个人博客中公布了一个基于 SVD 的改进算法(Funk-SVD),一下子引爆了推荐系统研究者对于矩阵分解的关注。这种改进算法称为隐语义模型或潜在因素模型。

概念

潜在因素模型,又称隐语义模型,是协同过滤系统中的另一种实现方案,其整体目标是发掘已有评分数据中的隐藏因子。通过对 user-item 评分矩阵进行 奇异值分解(Singular Value Decomposition, SVD) 推断出模型。

原理

隐语义模型也是基于矩阵分解的,但是和 SVD 不同,它是把原始矩阵分解成两个矩阵相乘而不是三个。
R = XY^T
现在的问题就变成了确定 XY ,我们把 X 叫做用户因子矩阵,Y 叫做物品因子矩阵。通常上式不能达到精确相等的程度,我们要做的就是要最小化它们之间的差距,从而又变成了一个最优化问题。

通常一个隐语义模型为每个用户 u 定义一个用户因子向量 x_u \in R^f, 为每一个物品 i 定义物品因子向量 y_i \in R^f。通过计算两个向量的内积得到预测结果,如 \hat{r}_{ui} = x_u^{T} y_i

优化目标是最小化代价函数,即:
\min_{x_*, y_*}\sum_{r_{ui}\,is\,known}{(r_{ui} - x_u^Ty_i)^2 + \lambda(||x_u||^2 + ||y_i||^2)}
其中 \lambda 用作模型正则化。

两种求解算法

梯度下降法

Simon Funk所采用的方法,为了减少计算量,采用随机梯度下降SDG(Stochastic Gradient Descent)

交替最小二乘法

通常 SGD 比 ALS(Alternating Least Squares) 简单而且快速,但是 ALS 的并行性能比较好,而且可以较好地处理稀疏数据。

基本原理

概念定义

偏好(Preference)

布尔型变量,表示用户 u 对物品 i 的感情偏好。定义如下:
p_{ui} = \begin{cases} 1& {r_{ui}>0}\\ 0& {r_{ui}=0} \end{cases}

由定义可知,偏好值仅仅表示用户和物品之间有没有交互,而不表示评分高低或者喜好程度。

如果用户 u 消费过某物品 i,即 r_{ui} > 0,这暗示用户 u 喜爱物品 i;另一方面,如果用户 u 从未消费过物品 i,我们认为用户 u 对该物品 i 没有偏好。

置信度(Confidence)

置信度用于衡量对偏好值 p_{ui} 的信心。定义如下:
c_{ui} = 1 + \alpha r_{ui}
我们的目标是发现每一个用户 u 的向量 x_u \in R^f 和每一个物品 i 的向量 y_i \in R^f。分别称为用户因子 user-factor 和 物品因子 item-factor

代价函数

\min_{x_*, y_*}\sum_{u, i}{c_{ui}(p_{ui} - x_u^Ty_i)^2 + \lambda(||x_u||^2 + ||y_i||^2)}

迭代求解

x_u = (Y^TC^uY + \lambda I)^{-1}Y^TC^up(u) \tag{1}

y_i = (X^TC^iX + \lambda I)^{-1}X^TC^ip(i) \tag{2}

随机初始化 Y,利用公式 (1) 更新得到 X,然后利用公式 (2) 更新 Y,直到误差值变化很小或者达到最大迭代次数。
通过迭代的方式交替计算两个公式,最终得到一个存储用户因子的矩阵 X 和 存储物品因子的矩阵 Y,进而用于相似性发现和推荐结果生成。

变量说明

  • XY: 随机初始化的用户因子矩阵和物品因子矩阵,它们会被交替地更新;
  • C^uC^i: 置信度取值列表;
  • \lambda: 为避免过拟合而引入的正则化参数;
  • p(u) p(i): 表示用户对物品偏好的布尔值,1 表示有偏爱,0 表示无偏爱;
  • I: 即 eye,恒等矩阵,对角线取值为 1 所有其他位置取值为 0 的方阵。

应用

物品相似性

通过计算物品因子矩阵与物品因子矩阵转置的点积,得到物品间的相似性得分:
score = Y \cdot Y^T

生成推荐结果

通过计算用户因子矩阵与物品因子矩阵转置的点积,得到为某个用户推荐各物品的得分:
score = X \cdot Y^T

参考文献

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

推荐阅读更多精彩内容