协同过滤中显性反馈 与 隐性反馈 的区别(附ALS最优化)

时间:2022-12-07 12:25:36

协同过滤中显性反馈 与 隐性反馈 的区别

1. 特质上的区别

显性反馈行为:用户明确表示对物品喜好的行为。
隐性反馈行为:不能明确反映用户喜好的行为。

隐性反馈的特性

  1. 没有负反馈。隐性反馈无法判断是否不喜欢。而显性反馈,明显能区分是喜欢还是不喜欢。
  2. 先天性具有噪声。用户购买了某物品,并不代表他喜欢,也许是送礼,也许买了之后发现不喜欢。
  3. 显性反馈数值代表偏好程度,隐性反馈数值代表置信度。隐性反馈的数值通常是动作的频次,频次越多,并不代表偏好值越大。比如一个用户经常看某部连续剧,可能该用户对该连续剧的喜好值一般,只是因为每周都播,所以动作频次很大,假如该用户对某部电影超级喜欢,但可能就看过一次,因此动作频次大并不反应偏好值大。从这个用户经常看这部连续剧这个行为,只能推断出该用户喜欢这连续剧有很大的置信度,但这个用户对这个连续剧的偏好值是多少我们无法评估。
  4. 隐性行为需要近似评估。

2. 两反馈在数据在处理上的区别

case 1 [参考《recommender Systems Handbook》第五章]

损失函数:

RMSE=(u,i)TestSet(ruir^ui)2|TestSet|

其中 r^ui 如下:

r^ui=μ+bi+bu+qTi(pu+|R(u)|12jR(u)yj)

其中:
1. Pu 为显性反馈所代表的部分
2. |R(u)|12jR(u)yj 为隐性反馈所代表的部分
3. R(u) 用户u评价过的商品集合
3. y 是一个item行rank列的矩阵

bubu+γ(euiλ5bu)
bibi+γ(euiλ5bi)
qiqi+γ(eui(pu+|R(u)|12jR(u)yj)λ6qi)
pupu+γ(euiqiλ6pu)
jR(u) :
   yjyj+γ(eui|R(u)|12qiλ6yj)

该情景中同时有隐性反馈和显性反馈的数据

case2:[参考Collaborative Filtering for Implicit Feedback Datasets ]

Loss function:

L=u,icu,i(pu,ixTuyi)2+λ(u||xu||2+i||yi||2)

其中:
pui={10 (rui>0) (rui=0)

cui=1+αrui

与显性反馈的处理有两个重要区别:
1. 需要计算置信度 c
2. 计算时需要计算所有可能的 u,i 对,而不仅是数据中出现的 u,i 对。

ALS最优解推导:

Lxur=icu,i(pu,irank1xuryri)2+λ(x2ur)xur=2λxuri2cu,i(pu,i1rankxuryri)yri    xur=xur0+ε,eui=(pu,i1rankxur0yri)  (pu,i1rankxuryri)=eu,iεyriLε=2λ(xur0+ε)i2cu,ieui0yrii2cu,iεy2ri=0ε=icu,ieui0yriλxur0λicu,iy2rixur=xur0+icu,ieui0yriλxur0λicu,iy2ri

Spark的ALS算法Explicit vs. implicit feedback中明确指出隐反馈的处理方式是采用该论文中所使用的处理方式。
该情景中只有隐性反馈。
以下为论文中梯度为0的解
xu=(YTCuY+λI)1YTCup(u)
yi=(XTCiX+λI)1XTCip(i)

ALS最优化求解 Nonnegative Matrix Factorization

求解NMF问题:用维度较低的非负矩阵B,C 表示 高维矩阵A

ABC    s.t.B;C>=0

目标函数
1. Least-squares NMF
min12||ABC||2F    s.t.B;C>=0

2. KL-Divergence NMF
minijAijlog(BC)ijAijAij+(BC)ij    s.t.B;C>=0

AltMin (AM)/AltDesc
1 初始化 B0,k=0
2 计算 Ck+1s.t.F(A;BkCk+1)<=F(A;BkCk)
3 计算 Bk+1s.t.F(A;Bk+1Ck+1)<=F(A;BkCk+1)
4 k=k+1 , 迭代直到最终精度满足.
ALS (NFM)

C=argminC||ABkCk||2F,  Ck+1=max(0,C)

B=argminB||ABCk+1||2F,  Bk+1=max(0,B)

NALS
C=argminC||ABkCk||2F,  s.t.C>=0

B=argminB||ABCk+1||2F,  s.t.B>=0

Block coordinate descent(BCD):

高斯迭代法 Gauss-Seidel update

xk+1iargminεχif(xk+11,..,xk+1i1done,εcurrent,xki+1,..,xkmto do)

更新xi时,xi之前的变量已经更新。
雅可比迭代法 Jacobi update (easy to parallelize)
xk+1iargminεχif(xk1,..,xki1dont clobber,εcurrent,xki+1,..,xkmto do)

更新xi时,xi之前的变量使用更新之前的结果。

附录: 矩阵的 F-范数:

AF=(i=1mj=1na2ij)12

ALS求解最优解

参考 :
1. recommender Systems Handbook 第五章
1. Collaborative Filtering for Implicit Feedback Datasets