推荐算法:基于svd的算法:svd


  • 2006年netflix比赛

1. 基础知识

符号定义

  • 用户:{u, v}
  • 物品:{i, j, l}
  • 评分: rui => 取值范围1到5
  • 预测评分: r^ui
  • 评分发生的时间: tui =>表示 rui 发生的时间
  • 数据集合的稀疏程度:99%
  • 评分存放集合: K={(u,v)rui}
  • 用户u评分的物品集合: R(u)
  • 对物品i评分的用户集合: R(i)
  • 用户u提高了隐式偏好信息的物品集合: N(u)
    =>
    svd方法建立的模型通过拟合已经观测的数据来学习,所以需要正则化;

2. 基准预测(预处理)

  • 基准预测是用来处理与交互数据无关的因子(偏置)
  • 用来消除用户间的评分偏差等

计算步骤

  • 总体平均评分: μ
  • 未知评分 rui 的基准预测: bui
  • 用户 u 与平均评分值的偏差: bu
  • 物品 i 与平均评分值的偏差: bi
  • bui=μ+bu+bi

例如

  1. 预测用户joe对Titannic电影的评价
  2. 设:电影平均打分 μ=3.7 ;用户joe挑剔,打分一般比平均分低0.3;Titannic电影口碑好,比一般要高0.5分;
  3. Joe对Titannnic的基准预测是:3.7-0.3+0.5=3.9

bu bi 的计算方法

  • 最小二乘法,来估计 bu bi

bu bi 的简单方法

bi=uR(i)(ruiμ)λ2+|R(i)|
bu=iR(u)(ruiμbi)λ3+|R(u)|


3.Netfilix数据集

  • 上亿的item
  • 48万用户
  • 1.7万物品
  • 1~5分(具有时间戳)
  • 测试结果:(均方根误差:RMSE)

4. 隐式反馈

  • 浏览历史
  • 购买记录

5. 因子分解模型

因子分解模型

  • plsa模型
    @@@Latent Semantic models for collaborative filtering
  • 神经网络
    @@@restricted boltzmann machines for collaborative filtering
  • LDA
    @@@LDA(blei)
  • svd

svd的发展

  1. 源于隐语义变量LSA
    @@@Indexint By Latent Semantic Analysis
  2. 问题:由于CF中缺失数据,简单使用已知数据,容易产生过拟合
  3. 简单填充的方法,会使得数据量增大,且不准确的数据也会使得数据倾斜
    @@@Collaborative filtering based on iterative principal component analysis
    @@@Application of Dimensionally reduction in recommender system
  4. 采样直接利用数据建模的方法,并通过充分的正则化来避免过拟合
    @@@modeling relationships at multiple scales to improve accuracy of large recommender systems
    @@@collaborative filtering with privacy via factor anlysis
    @@@netflix uodate:try this at home
    @@@ factorization meets the neighborhood: a multifaceted collaborative filtering model
    @@@improving regularized singular value decomposition for collaborative filtering
    @@@resticted bolzmann machines for collaborative filtering
    @@@ major components of the gravity recommendation algorithms

6. svd算法

  • svd:将用户和物品两方面的信息映射到一个纬度是f的联合隐语义空间
  • 例如:物品是电影,分解为:喜欢/悲剧;情节数量;面向儿童的等级等,甚至是无法解释的情况

算法

  1. 物品 i 和 其相关 f 维向量 qi < qi 是代表了物品拥有这些隐因子的程度>
  2. 用户 u 和 其相关 f 维向量 pu < pu 是代表用户对这些隐因子的喜欢程度>
  3. qTipu 点积,记录了用户和物品的交互程度,也就是用户对物品的喜欢程度
  4. 结合前面的基准预测,可以得到

r^ui=μ+bi+bu+qTipu

=>正则化学习模型的参数,最小化评分误差

minb,q,p(u,i)k(ruiμbibuqTipu)2+λ4(b2i+b2u+||qi||2+||pu||2)
λ4 控制了正则化的程度,交叉验证获得

=>
最小化的求解:最小二乘或者交替最小二乘
@@@ scalable collaborative filtering with jointly derived neighborhood interpolation weights
@@@modeling relationships at multiple scales to improve accuracy of large recommender systems

netfilx上的svd

  1. 给定训练样本集合 rui ,其预测评分是 r^ui ; 预测误差: eui=ruir^ui
  2. 梯度方向修正参数
    bu<bu+γ(euiλ4bu)
    bi<bi+γ(euiλ4bi)
    qi<qi+γ(euipuλ4qi)
    pu<pu+γ(euiqiλ4pu)

参数: γ=0.005,λ4=0.02

@@@ matrix factorization and neighbor based algorithms for the netflix prize problem


7. svd++

  • 隐式反馈的算法
    @@@ factorization meets the neighborhood: a multifaceted collaborative filtering model
    @@@improving regularized singular value decomposition for collaborative filtering
    @@@probabilistic matrix factorization

添加隐性反馈

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

其中: |R(u)|12jR(u)yi 是补充项;
|R(u)|12 是为了稳定方程,对其和做的规范化

  1. 随机梯度法求解:

    • bu<=bu+γ(euiλ5bu)
    • bi<=bi+γ(euiλ5bi)
    • qi<=qi+γ(eui(pu+|R(u)|12jR(u)yj)λ6qi)
    • pu<=pu+γ(euiqiλ6pu)
    • yi<=yi+γ(eui|R(u)|12qiλ6yi)
  2. netflix数据集合30次后迭代停止

  3. 引入多种隐性反馈

    r^ui=μ+bi+bu+qTi(pu+|N1(u)|12jN1(u)y(1)i+|N2(u)|12jN2(u)y(2)i)

=>其中隐性反馈的重要性,通过算法自动学习权重


8. timesvd++

  • 用户偏置: bu(t)
  • 物品偏置: bi(t)
  • 用户偏好: pu(t)
  • 物品的静态特征

时间变化的基准

  • 物品的流行度或者是随时间的变化程度
  • 人的评分标准的变化

  • tui 天内, ui
    bui=μ+bu(tui)+bi(tui)

bi 的计算 (物品偏置)

  • bi(t)=bi+bi,Bin(t) ……….随时间固定变化

bu 的计算 (用户偏置)

  • 用户 u , 评分日期的均值 tu ; 设用户在t天评价了一部电影,则与该评分相关的时间偏置是

devu(t)=sign(ttu)|ttu|β

  • 时间相关用户偏置

b(1)u(t)=bu+αudevu(t)

  • netflix的用户偏置模型( bu,t 反映特定天的变化)

puk(t)=puk+αukdevu(t)+puk,t


svd++

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


结论

  • 特征纬度是10的timesvd++ 效果好于纬度是200的svd++

9. svd的优点

  • 准确度
  • 内存有效(迭代的方法计算)

你可能感兴趣的:(推荐算法)