推荐系统(2)
多层模型
全局global
总体偏差:e.g.平均值作为基线
局部local
处理局部影响:e.g.相关性
协调过滤CF
抽取局部模式
Ⅰ协同过滤CF
[r_{xi} = frac{sum_{j in N(i;x)}S_{ij}·r_{xj}}{sum_{j in N(i;x)}S_{ij}}
]
Ⅱ协同过滤CF+偏差biases
在实践中,对偏差进行建模,得到更好的估计:
[r_{xi} = b_{xi} + frac{sum_{j in N(i;x)}S_{ij}·(r_{xj}-b_{xj})}{sum_{j in N(i;x)}S_{ij}}
]
问题
-
强制使用相似性度量
-
成对相似性忽视了用户之间的依赖性
-
采用加权平均值可能会受到限制
解决
Ⅲ协同过滤CF+偏差biases+经过学习的权重learned weights
采用加权和(w_{ij}),而不是加权平均值(S_{ij}),直接从数据估测,模拟的是电影对之间的相互作用,与用户无关
[hat r_{xi}=b_{xi}+sum_{j in N(i;x)}w_{ij}(r_{ij}-b_{xj})
]
[代价函数SSE:J=min_{P,Q}sum_{training}(hat r_{xi}-r_{xi})^2
]
采用梯度下降优化代价函数,找到最合适的(w_{ij})
Ⅳ基于潜在因子的推荐Latent factor based
(Q):item-factor矩阵;(P):user-factor矩阵;(SVD:R=Q·P^T)
[J=min_{P,Q}sum_{training}(r_{xi}-q_ip_x)^2
]
想法:找到合适的(P,Q),最小化代价函数
→ 较大的(k)值(潜在因子数目);然而(k)变大,(SSE)会变大
自由度比较大的时候,会过拟合 → 引入正则化
[J=min_{P,Q}sum_{training}(r_{xi}-q_ip_x)^2+[lambda_1sum_x||p_x||^2+lambda_2sum_i||q_i||^2]
]
采用梯度下降优化代价函数
(GD)vs.(SGD)
在(GD)中,每次迭代都要用到全部训练数据。
在(SGD)中每次迭代可以只用一个训练数据来更新参数。使用了梯度的噪声近似。
实际上,(SGD)虽然需要更多步,但是收敛更快,因为其计算耗费的时间少
Ⅴcombination:Latent factors+biases
[r_{xi}=mu+b_x+b_i+q_i·p_x
]
(mu)是所有评分平均值
(b_x)是用户(x)的评分偏差
(b_i)是电影(i)的评分偏差
(q_i·p_x)是goodness of fit,即拟合好坏程度(?不太理解)
[J=min_{P,Q}sum_{(x,i)in R}(r_{xi}-(mu+b_x+b_i+q_ip_x))^2
\
+[lambda_1sum_i||q_i||^2+lambda_2sum_x||p_x||^2+lambda_3sum_x||b_x||^2+lambda_4sum_i||b_i||^2]
]
找到合适的(b_i,b_j,q_i,p_x),最小化代价函数
Ⅵ biases&factors加入时间因素
[r_{xi}=mu+b_x(t)+b_i(t)+q_i·p_x\
b_i(t)=b_i+b_{i,Bin(t)}\
p_x(t)...在t时的用户偏好向量
]