推荐系统(2)

推荐系统(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时的用户偏好向量 ]

Ⅶ 上百种模型混合

原文地址:https://www.cnblogs.com/angelica-duhurica/p/10916716.html