推荐系统
1、协同过滤
- 相似度计算
knn
距离计算:欧几里得距离、皮尔逊相关系数、cosine相似度
邻居选择 - 基于用户的协同过滤
基于用户的协同过滤要解决的问题
基于用户的协同过滤存在的问题
协同过滤基础解决方案
基于用户的协同过滤为啥不流行? - 基于物品的协同过滤
计算实例
基于物品的协同过滤优势
用户冷启动问题(新用户)
物品冷启动问题(新物品) - 基于用户和基于物品的协同过滤比较
2、隐语义模型
- 算法流程
- 算法模型
- 模型求解
- 模型负样本的选择
- 模型参数的选择
- 协同过滤和隐语义模型的比较
- 推荐系统评估标准
1、相似度计算:
要给用户推荐物品,一般通过分析具有相同习惯、爱好的其他用户,从而得到某个用户也喜欢的物品,这就需要用户间的相似度计算。相似度计算有以下几种方法:
(1)KNN:找出距离A最近的一些用户
根据不同用户对一些商品的评分,通过计算欧式距离,找出距离最近的其他K个用户,即为具有相同习惯、爱好的其他用户。
(2)距离计算:
皮尔逊:
(1)协方差:
- 若x,y都在负值,则各自与均值的差相乘为正数,为正相关
- 若x,y一正一负,则各自与均值的差相乘为负数,为负相关
- 协方差的值在[-1,+1]之间,接近+1为完全正相关,否则负相关
*中间直线为均值
(2)皮尔逊相关系数:用协方差除以两个变量的标准差得到的(消除自身分布的不规则性)
邻居选择
- 固定数量的邻居-KNN(选择K个)
- 基于相似度门槛的邻居(选择相似度阈值之内)
2、基于用户的协同过滤
需要给用户A推荐物品,通过计算A->B、A->C的相似度,从较高相似度的用户所购买的物品推荐给用户A
相似度的计算:
A、B、C对所买的物品评分,有各自的评分向量,通过对向量距离的计算得到相似度大小
基于用户的协同过滤要解决的问题
- 已知用户评分矩阵Matrix R(一般都是非常稀疏的)
- 推断矩阵中空格empty cells处的值
基于用户的协同过滤存在的问题
- 对于一个新用户,很难找到邻居用户
- 对于一个物品,所有最近的邻居都在其上没有多少打分,但恰巧此用户需要这件物品,此物品就无法推荐给合适的用户
协同过滤基础解决方案
- 相似度计算最好使用皮尔逊相似度
- 考虑共同打分物品的数目,如乘上min(n,N)/N n:共同打分数(A、B都对n个商品评过分) N:指定阈值
- 对打分进行归一化处理
- 设置一个相似度阈值(对于阈值之内的用户都是相似用户)
基于用户的协同过滤为啥不流行?
- 稀疏问题(若某电商拥有100万件商品,但大多用户只购买了十几件商品,这样的评分矩阵是非常稀疏的)
- 数百万的用户计算(若某电商拥有1000万用户,两两计算相似度,计算量很大)
- 人的喜好易发生变化
3、基于物品的协同过滤
基于物品的协同过滤优势
- 计算性能高,通常用户数量远大于物品数量,且只需要计算同类物品的相似度
- 可预先计算物品间的相似度(离线操作),再在线上进行推荐(性能较高)
- 物品并不善变
实例:
已有多个用户对6个电影的评分记录,现要判断是否给用户5推荐电影1,设置推荐阈值为3.5
- 基于物品的协同过滤计算:
计算电影1与其他电影的相似度,选择较大值的相似度电影,并以相似度0.41和0.59作为权值,预测出用户5对电影1的评分值2.6,
预测出的分数为2.6小于阈值3.5,则不进行推荐
用户冷启动问题(新用户)
- 引导用户把自己的一些属性(喜好)表达出来
- 利用现有的开放数据平台
- 根据用户注册属性
- 推荐排行榜单(大众心理)
物品冷启动问题(新物品)
- 文本分析
- 主题模型
- 打标签
- 推荐排行榜单
4、基于用户和基于物品的协同过滤比较
基于用户的推荐
- 实时新闻
- 突然情况
- 。。。
基于物品的推荐
- 图书
- 电子商务
- 电影
- 。。。
5、隐语义模型
我们要给用户推荐物品,需要找到用户与物品之间隐含的关系,隐语义模型通过隐含方程表示用户与物品之间的关系,将用户与物品通过中介隐含因子联系起来。
(1)算法流程:
分解
- 1、首先得到的是多个用户与多本书之间的NxM评分矩阵
- 2、分解成N个用户与F个隐含因子的矩阵,F个隐含因子与M个电影的矩阵
组合
- 通过对FxN矩阵的转置,与FxM矩阵相乘得到NxM的矩阵
(2)算法模型
- Rui为用户与物品的评分关系
- Pu为用户与隐含因子的关系
- Qi为隐含因子与物品的关系
1、目标函数
- C为预测值和真实值之间的差异,用平方项表示
- 真实值与 预测值的loss
- 给隐含因子参数加惩罚项,迭代更新
2、模型求解
Pu,Qi为函数参数,求偏导得到损失函数的最小值
(3)模型负样本的选择
用户:有打分是1,没有打分是0
物品:热门却没有用户评分的
对于用户—物品集K {(u,i)},其中如果(u, i)是正样本,则有Rui = 1,负样本则Rui = 0
(4)模型参数的选择
- 隐特征的个数F,通常F=100,F越大,映射维度空间越大,表示的特征越多
- 学习速率alpha,别太大
- 正则化参数lambda,别太大
- 负样本/正样本比例 ratio
6、协同过滤和隐语义模型的比较
- 原理:协同过滤基于统计,隐语义基于建模
- 空间复杂度,隐语义模型较小(映射空间小),协同过滤维护一个大表
- 数据过大,实时推荐依旧难,目前离线计算多
- 隐语义参数可解释性差
7、推荐系统评估标准
-
准确度:真实值与预测值的差异
-
召回率:
令R(u)是根据用户在训练集上的行为给用户作出的推荐列表, T(u)是用户在测试集上的行为列表
求交集即为有效推荐的 -
覆盖率:推荐的物品占全部物品的百分比,尽可能广的覆盖相同类别的物品
也可用熵值来代表覆盖率的评估标准
-
多样性:尽可能广的推荐
分子为相似度
分母:在所以可能推荐的组合当中,推荐了多少个组合
不同的推荐系统有不同的评估标准