推荐系统笔记

推荐系统

常用的推荐系统算法可以分为以下三种:

  • 1、基于人口统计学的推荐
  • 2、基于内容的推荐
  • 3、基于协同过滤的推荐

其中,本文简单介绍一下基于UGC(用户自定义标签)推荐和基于协同过滤的推荐。

基于UGC(用户自定义标签)推荐

UGC推荐表示了用户u给物品i打上了标签b,可以表示成(u,i,b)。那么用户u对物品i的兴趣公式可以表示为:
p ( u , i ) = ∑ b n u , b , n b , i p(u,i) = \sum_{b}n_{u,b},n_{b,i} p(u,i)=b∑​nu,b​,nb,i​

  • n u , b n_{u,b} nu,b​是用户u打过标签b的次数
  • n b , i n_{b,i} nb,i​是物品i被打过标签b的次数。

然而,该公式会存在一个问题,在生活中的热门标签中,物品被打标签次数占较大的权重,会导致推荐系统降低了其新颖度和个性化水平。参考了TF-IDF的思想 (TF(词频):在物品所有标签中的频率;IDF(逆文档频率):在其它物品标签中普遍出现的频率),在上式中加入了惩罚项后可表示为:
p ( u , i ) = ∑ b n u , b log ⁡ ( 1 + n b ( u ) ) n b , i log ⁡ ( 1 + n i ( u ) ) p(u,i) = \sum_{b}\frac{n_{u,b}}{\log{(1+n_b^{(u)})}}\frac{n_{b,i}}{\log{(1+n_i^{(u)})}} p(u,i)=b∑​log(1+nb(u)​)nu,b​​log(1+ni(u)​)nb,i​​

  • n b ( u ) n_b^{(u)} nb(u)​记录了标签b被多少个不同的用户使用过(针对热门标签)
  • n i ( u ) n_i^{(u)} ni(u)​记录了物品i被多少个不同的用户打过标签(针对热门物品)

基于协同过滤的推荐

基于CF的推荐也可以分为两种形式,分别为基于用户(User-CF)和基于物品(Item-CF) 。一般来说,在电商、电影、音乐等领域由于大多数情况下用户的数量远远大于物品,所以更倾向于使用Item-CF;而在新闻等领域中,由于信息每天在更新迭代,物品的数量远远大于了用户,所以更倾向于使用User-CF。在实现CF算法的过程中,有以下两种方法:

  • 基于近邻:利用用户行为数据预测偏好(可以近似理解为分类问题)
  • 基于模型:利用用户行为数据训练模型,找内在规律做预测(可以近似理解为回归问题,其中一般利用LFM(隐语义算法))

因为CF算法十分依赖历史数据,一般情况下评分矩阵是稀疏矩阵,所以要对原始数据进行降维,用到了矩阵因子分解的方法,分解之后的矩阵代表了User和Item的隐藏特征。

接下来本文将详细介绍一下矩阵因子分解的过程,假设存在下式:
R ∗ = P m × k T ⋅ Q k × n ≈ R R^{*} = P_{m \times k}^{T} \cdot Q_{k \times n} \approx R R∗=Pm×kT​⋅Qk×n​≈R

  • 预测评分矩阵 R ∗ R^{*} R∗
  • 评分矩阵 R R R
  • m m m个用户
  • n n n个物品
  • k k k个隐类
  • 用户特征 P P P
  • 物品特征 Q Q Q

原始稀疏矩阵进行分解后再乘回去可以得到预测矩阵,即相应得到预测评分数据,可以通过求解最小化的损失函数得到结果。但在实际情况中,这样做容易过拟合,需要加入正则化项: ( λ ∑ u ∥ P u ∥ 2 + λ ∑ i ∥ Q i ∥ 2 ) (\lambda\sum_{u}\left\| {P_u} \right\|^2 +\lambda\sum_{i}\left\| {Q_i} \right\|^2) (λ∑u​∥Pu​∥2+λ∑i​∥Qi​∥2)

  • λ \lambda λ可以通过交叉验证获得
  • 该正则化项表示了特征越多,其值越大,也就是说矩阵越复杂,越容易过拟合,达到了一定的惩罚作用

在求解损失函数的过程中,一般使用ALS算法(交替最小二乘法),通过固定Q求P的最小值;再固定P求Q的最小值,直到满足条件(误差小于阈值 ϵ \epsilon ϵ或者达到一定的迭代次数)

以下为手工推导矩阵因子分解详细过程:

推荐系统笔记
推荐系统笔记
推荐系统笔记

推荐系统笔记
今天先写到这里啦,有错误的话欢迎各位大佬指出~(谦虚

上一篇:机器学习与推荐系统


下一篇:python配置文件操作