推荐系统_02_隐语义模型LFM

隐语义模型(LFM)

推荐系统_02_隐语义模型LFM_第1张图片

图形解释:

LFM的前生今世

  • 源于对svd(奇异值分解)方法的改进。
  • svd可用于推荐系统评分矩阵补全,但由于计算量太大,实际上只适用于规模很小的系统。

隐语义模型的适用性

  • 分类数k是先验指定,可以通过k控制分类的粒度
  • LFM中,商品针对每个类都可以计算权重,是天生的多分类,多纬度

关于训练集

基本概念:

  • 显性数据:数据集包含u用户对i商品的打分,有用户编号和商品编号。
  • 隐形数据:购物篮数据,点击的商品等
  • 正样本:喜欢的商品
  • 负样本:不感兴趣的商品

那么如何产生负样本呢?

负样本的选择(小结)

  • 对每个用户,要保证正负用户的平衡
  • 对每个用户采样负样本时,要选取哪些很热门,而用户却没有行为的物品(因为很可能注意到了却没有行为)

如何计算权重

  • 最大似然法(类似于训练贝叶斯信念网络和EM算法)
  • 转化为求解损失函数极小值的问题

推荐系统_02_隐语义模型LFM_第2张图片

负样本采样过程(代码):

推荐系统_02_隐语义模型LFM_第3张图片

如何求解C的极小值
算法原理:
推荐系统_02_隐语义模型LFM_第4张图片

利用梯度下降法求极值(参考代码):

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

#原函数 
def Fun(x,y):
    return x-y+2*x*x+2*x*y+y*y
    
#偏x导
def PxFun(x,y):
    return 1+4*x+2*y
    
#偏y导
def PyFun(x,y):
    return -1+2*x+2*y
 
#初始化
#figure对象
fig=plt.figure()
#Axes3D对象
ax=Axes3D(fig)
#取样并作满射联合
X,Y=np.mgrid[-2:2:40j,-2:2:40j]
#取样点Z坐标打表
Z=Fun(X,Y)
ax.plot_surface(X,Y,Z,rstride=1,cstride=1,cmap="rainbow")
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
 
#梯度下降
#下降系数
step=0.0008
#初始选取一个点
x=0
y=0
tag_x=[x]
tag_y=[y]
#三个坐标分别打入表中,该表用于绘制点
tag_z=[Fun(x,y)]
new_x=x
new_y=y
Over=False
while Over==False:
	#分别作梯度下降
    new_x-=step*PxFun(x,y)
    new_y-=step*PyFun(x,y)
    #精度
    if Fun(x,y)-Fun(new_x,new_y)<7e-9:
        Over=True
    #更新旧点    
    x=new_x
    y=new_y
    tag_x.append(x)
    tag_y.append(y)
    #新点三个坐标打入表中
    tag_z.append(Fun(x,y))
 
#绘制点/输出坐标
ax.plot(tag_x,tag_y,tag_z,'r.')
plt.title('(x,y)~('+str(x)+","+str(y)+')')
plt.show()

LFM中的重要参数(如何调参)

  • 模型中隐特征个数(隐分类的分类数,依赖于经验和尝试)
  • 梯度下降法中选取的学习速率(快容易引起震荡,慢容易导致计算速度慢)
  • 损失函数中惩罚项系数 λ \lambda λ(越大越抑制过拟合)
  • 训练集的负样本/正样本比例ratio

使用movielens数据集验证LFM有效性

movielens网址:https://grouplens.org/datasets/movielens/

验证结果:

Netflix大奖赛

Netflix是一家在线影片租赁提供商。公司能够提供超大数量的DVD,而且能够让顾客快速方便的挑选影片,同时免费递送。大奖赛对推荐系统算法发展有深远影响,比如对LFM的追捧使其快速进入大众规野,对LFM提出了很多改进方法

正负样本比例参数ratio的影响

随着负样本数目的增加,LFM的准确率和召回率有明显提高,不过当ratio>10后,准确率和召回率基本上就比较稳定了。同时,随着负样本数目的增加,覆盖率不断降低,而推荐结果的流行度不断增加,说明ratio参数控制了推荐算法发掘长尾的能力。注意:当数据集非常稀疏时,LMF的性能会明显下降,甚至不如UserCF和ItemCF。

补充:几种指标

项亮书:p40

  • 召回率
    推荐系统_02_隐语义模型LFM_第5张图片
  • 准确率
    推荐系统_02_隐语义模型LFM_第6张图片
  • 覆盖度
    推荐系统_02_隐语义模型LFM_第7张图片

LFM的优缺点

  • 典型的机器学习算法,有比较好的数学理论基础(优点)
  • 指标一般会稍微高于ItemCF和UserCF
  • 训练过程中占用较少内存(因为没有大规模矩阵运算)
  • 由于需要迭代,计算时间要多于ItemCF和UserCF
  • 不能在线实时计算
  • 难以向用家解释模型的合理性

改进LFM

项亮书第八章
加入偏置项后的LFM公式:
在这里插入图片描述

  • μ \mu μ:训练集中所有记录的评分的全局平均数(减少最高最低的影响)
  • b u b_{u} bu:用户偏置(user bias)项(这一项表示了用户的评分习惯中和物品没有关系的那种因素,不如有的用户就喜欢打低分)
  • b i b_{i} bi:物品偏置(item bias)项(这一项表示了物品接受的评分中和用户没有什么关系的因素,比如商品本来就好)

考虑领域影响的LFM

更像是ItemCF的变形。相当于svd的加强版,也称为svd++。

将时间变量加入模型
考虑用户兴趣会随着时间改变

模型组合

  • 模型级联融合
  • 模型加权融合

你可能感兴趣的:(推荐系统)