【每周一文】Factorization Meets the Neighborhood:a Multifaceted Collaborative Filtering Model
2016-03-15 23:48
211 查看
概述
在推荐系统中,协同过滤(CF:Collaborative Filtering)算法由于其领域无关性以及比较好的推荐效果被广泛使用;CF模型比较常用的包括最近邻方法和因子分解算法,由于这两种算法各有优缺点;该文提出了一种策略将这两种方法进行综合建模,并且可以适用于隐式反馈数据。
已有模型
最近邻方法
CF常用的有user_based和item_based两个模型,后者由于其推荐效果和可解释性比较强,比较被推荐使用。item_based方法思路是根据用户个人偏好推荐和这些item最相关的物品。过程如下
1. 根据用户和物品的打分矩阵或者相关数据,计算物品两两之间的相似度s(i,j)s(i,j),常用相似度算法包括皮尔逊系数、jaccard系数
2. 通常情况下相似度计算可能需要大量数据支持,对于稀疏数据需要对数据规模进行置信度加权,常用加权方法可以是sij=nijnij+λpijs_{ij}=\frac{n_{ij}}{n_{ij}+\lambda}p_{ij}
3. 用户对某物品打分公式为rui=bui+∑j∈Ski;usij(ruj−buj)∑j∈Ski;usijr_{ui}=b_{ui}+\frac{\sum_{j\in S_{i;u}^k}s_{ij}(r_{uj}-b_{uj})}{\sum_{j\in S_{i;u}^k}s_{ij}},其中bui为基准推荐模型,计算公式为bui=μ+bu+bi,即全局偏置+用户偏置+物品偏置b_{ui}为基准推荐模型,计算公式为b_{ui}=\mu+b_u+b_i,即全局偏置+用户偏置+物品偏置;Ski;uS_{i;u}^k表示在用户关注的物品集合中和物品i最相似的前K个
4. 另外为了进一步刻画效果,可以通过下面方式进行改进rui=bui+∑j∈Ski;uθuij(ruj−buj)r_{ui}=b_{ui}+\sum_{j\in S_{i;u}^k}\theta_{ij}^u(r_{uj}-b_{uj})更和用户相关
因子分解模型
因子分解模型可以将用户和物品分别映射到一个低维空间中,这样根据数据可以得到一个全局的向量表示,用于计算用户与用户、物品与物品以及用户和物品之间的相似度。可以通过SVD分解得到向量表示,常用的方法是最优化如下问题min ∑rui≠0(rui−μ−bu−bi−pTuqi)2+λ(||pu||2+||qi||2+b2u+b2i)min \ \sum_{r_{ui}\ne0}(r_{ui}-\mu-b_u-b_i-p_u^Tq_i)^2+\lambda(||p_u||^2+||q_i||^2+b_u^2+b_i^2)
新模型
已有模型的问题
最近邻方法根据用户已经打分过的物品,计算和这些物品最相似的物品,相当于一个局部最优问题,没有考虑全局。由于一个用户关注的物品是有限的。因子分解模型可以得到一个全局表示,可解释性不好。
最近邻模型改进
改进1
以item_based方法为例,之前item之间的相似度都是通过数据统计得到,现在变成模型参数通过模型训练得到,即rui=bui+∑j∈R(u)wij(ruj−buj)r_{ui}=b_{ui}+\sum_{j\in R(u)}w_{ij}(r_{uj}-b_{uj})和之前不同点包括:1. Item之间的相似度通过学习得到
2. 通过搜索用户所有相关的物品得到最后打分,而不是前K个
3. 模型wij(ruj−buj)w_{ij}(r_{uj}-b_{uj})综合考虑了用户到已有物品j的喜好程度以及物品j到物品i的相关度
改进2
另外可以将隐式数据加入到模型中,则模型变为rui=bui+∑j∈R(u)wij(ruj−buj)+∑j∈N(u)cijr_{ui}=b_{ui}+\sum_{j\in R(u)}w_{ij}(r_{uj}-b_{uj})+\sum_{j\in N(u)}c_{ij}其中N(u)为隐式反馈数据中用户u相关的物品集合改进3
用户偏置项也可以通过模型学习得到,而不是统计得到,即bui=μ+bu+bib_{ui}=\mu+b_u+b_i都设置为模型参数,通过学习得到,这样可以进一步去除用户和物品偏置,这样更容易推荐长尾数据。改进4
为了解决模型中参数两级分化问题,对邻域个数进行归一,即rui=bui+|R(u)|−12∑j∈R(u)wij(ruj−buj)+|N(u)|−12∑j∈N(u)cijr_{ui}=b_{ui}+|R(u)|^{-\frac12}\sum_{j\in R(u)}w_{ij}(r_{uj}-b_{uj})+|N(u)|^{-\frac12}\sum_{j\in N(u)}c_{ij}为了降低复杂度可以提前去除一些不相关的物品集合,即定义Rk=R(u)∩Sk(i)R^k=R(u) \cap S^k(i)去代替全部邻域数据求解算法
可以通过梯度方法进行求解SVD模型改进
异步SVD
模型表示为rui=bui+qTi(|R(u)|−12∑j∈R(u)xj(ruj−buj)+|N(u)|−12∑j∈N(u)yj)r_{ui}=b_{ui}+q_i^T(|R(u)|^{-\frac12}\sum_{j\in R(u)}x_j(r_{uj}-b_{uj})+|N(u)|^{-\frac12}\sum_{j\in N(u)}y_j)其中参数qi,xj,yjq_i,x_j,y_j都是物品在低维空间中的表示。
主要思路是将用户表示为其相关物品向量的累加。
好处
更少的参数,模型仅和物品有效个数相关,一般情况下用户个数会更多。
2.对于新用户可以解决冷启动问题,用户表示直接通过用户点击的物品得到
可解释性相对于原始模型较强
可以更有效的集成隐式反馈数据,可以通过调整隐式向量系数得到。
SVD++
为了进一步集成隐式反馈数据,可以通过直接将隐式数据反馈到模型中,rui=bui+qTi(pu+|N(u)|−12∑j∈N(u)yj)r_{ui}=b_{ui}+q_i^T(p_u+|N(u)|^{-\frac12}\sum_{j\in N(u)}y_j)相当于对原始模型的直接改进。模型集成
将以上两个模型集成到一起可以得到rui=μ+bu+bi+qTi(pu+|N(u)|−12∑j∈N(u)yj)+|Rk(u)|−12∑j∈Rk(u)wij(ruj−buj)+|Nk(u)|−12∑j∈Nk(u)cijr_{ui}=\mu+b_u+b_i+q_i^T(p_u+|N(u)|^{-\frac12}\sum_{j\in N(u)}y_j)+|R^k(u)|^{-\frac12}\sum_{j\in R^k(u)}w_{ij}(r_{uj}-b_{uj})+|N^k(u)|^{-\frac12}\sum_{j\in N^k(u)}c_{ij}相当于将三层模型进行累加
1. 第一层模型:基准模型
2. 第二层模型:因子分解模型,会考虑到全局用户和物品画像
3. 第三层模型:最近邻模型,会考虑到用户本身偏置特征。
结论
在该文中作者还提出了一种评估推荐系统的方法,不在赘述。该文提出对CF模型进行改进,改进效果针对Netfix数据取得不错效果,在实际中这种科研推进方式还是可以推荐的。
另外SVD++算法应用比较广泛,有效将显示和隐式数据进行结合,值得注意的是本文对隐式数据建模比较简单,复杂建模方法考虑相关论文。
相关文章推荐
- java mail 发送邮件,并判断是否发送成功
- 8.DNS :域名系统
- 奇思妙想位运算
- Android滑动回弹效果
- 7.广播和多播,IGMP协议
- 和我一起学Effective Java之创建和销毁对象
- Blcoking I/O & NonBlocking I/O
- Android布局优化
- java基础(三)之数据类型
- log4j,配置,详解
- 关灯看视频(Turn Off the Lights)
- Memcached(2)------实例使用
- 给 Android 开发者的 RxJava 详解
- 【每周一文】Collaborative Filtering for Implicit Feedback Datasets(2008)
- OSPF协议详解
- Bzoj 1612: [Usaco2008 Jan]Cow Contest奶牛的比赛 传递闭包,bitset
- 逆战按键盘
- 6.UDP协议
- 【Linux】 CPU亲和性(affinity)及与亲和性有关的两个函数 sched_setaffinity()和 sched_getaffinity()
- C-SCAUoj 输出不同的数