文章目录
一,CF(协同过滤)
协调过滤的目的都是预测用户是否喜欢某个物品
1.1,userCF(基于用户的协同过滤)
‘人以群分’。步骤:
a,通过用户-物品行为历史信息,构建共现矩阵。
行坐标为用户,纵坐标为物品;
b,找到与用户x兴趣最相似的top n用户。
通过用户购买物品的行为转变成用户向量,然后通过cosine距离或者是皮尔逊相关系数得到top n。
c,然后根据相似用户对物品p的喜爱程度来决定是否将物品推荐给用户x。
公式如下,物品p推荐给用户u的概率:
R
u
,
p
=
∑
s
ϵ
S
(
w
u
,
s
∗
R
s
,
p
)
∑
s
ϵ
S
w
u
,
s
R_{u,p}=\frac{\sum_{s\epsilon{S}}(w_{u,s}*R_{s,p})}{\sum_{s\epsilon{S}}w_{u,s}}
Ru,p=∑sϵSwu,s∑sϵS(wu,s∗Rs,p)
其中S为与u相似的top n用户的集合。
w
u
,
s
w_{u,s}
wu,s表示用户u与用户s的相似度,
R
s
,
p
R_{s,p}
Rs,p表示用户s对物品p的喜爱程度。分母就是把与用户u相似的n个用户的相似度加起来,分子是把这n个用户各自对物品i的态度按照相似度加权求和。
获得用户u对不同物品的评价预测之后,最终的推荐列表根据预测得分排序即可。
即找到与你相似的用户把他们喜欢的物品推荐给你.
1.2,itemCF(基于物品的协同过滤)
‘物以类聚’。步骤:
a,基于用户历史数据,构建以用户为行坐标,物品为列坐标m*n的共现矩阵;
b,计算共现矩阵两两列向量间的相似性,构建n*n的物品相似度矩阵;
c,获得用户历史行为数据中的正反馈物品列表;
d,利用物品相似度矩阵,针对目标用户历史行为中的正反馈物品,找出相似的Top k个物品,组成相似物品集合;
e,对相似物品集合中的物品,按照相似度分值排序,生成最终的推荐列表。若有的物品与多个正反馈物品相似,那么其分数是加权累加的:
R
u
,
p
=
∑
h
ϵ
H
(
w
p
,
h
∗
R
u
,
h
)
R_{u,p}=\sum_{h\epsilon{H}}(w_{p,h}*R_{u,h})
Ru,p=hϵH∑(wp,h∗Ru,h)
其中H是目标用户的正反馈物品集合,
w
p
,
h
w_{p,h}
wp,h表示物品p与物品h的相似度,
R
u
,
h
R_{u,h}
Ru,h表示用户u对物品h的正反馈程度(比如评分、购买次数)。
即根据你喜欢的物品找到与之相似的物品推荐给你。
userCF具有较强的社交特性,能快速感知与自己相似的人喜欢什么,非常适合新闻推荐场景。userCF正适用于发现热点、以及跟踪热点的趋势。不足:互联网中用户数往往大于商品数;其需要维护用户相似度矩阵以便快速找出top n的相似用户,随着用户增长开销非常大。用户的历史数据向量往往非常稀疏,对于正反馈获取困难,如酒店预订、大件商品购买就不适合。
ItemCF更适合于兴趣变化较稳定的应用,如电商、视频推荐。
CF的缺点:泛化能力差,推荐结果的头部效应较明显,处理稀疏向量的能力弱。
二,MF(矩阵分解)
在CF共现矩阵的基础上,使用更稠密的隐向量表示用户和物品,挖掘用户和物品的隐含兴趣和隐特征来弥补CF处理稀疏矩阵能力不足的问题。
用户和物品的隐向量是通过分解协调过滤生成的共现矩阵得到的。
矩阵分解将m*n的共现矩阵R分解成m*k维的用户矩阵U和k*n维的物品矩阵V的相乘形式。m是用户数,n是物品数,k是隐向量维度。k越大表达能力越大,模型的泛化能力越差。
基于用户矩阵U和物品矩阵V,用户u对物品i的预估评分如:
r
^
u
i
=
q
i
T
p
u
\hat{r}_{ui}=q_{i}^{T}p_{u}
r^ui=qiTpu
其中
p
u
p_{u}
pu是用户u在用户矩阵U中对应行向量,
q
i
q_i
qi`物品i在物品矩阵V中对应的列向量。
对矩阵进行矩阵分解目前主要用的是‘梯度下降’的方式。
加入正则项之后的目标函数为:
m
i
n
q
∗
,
p
∗
=
∑
(
u
,
i
)
ϵ
K
(
r
u
i
)
min_{q^*,p^*}=\sum_{(u,i)\epsilon{K}}(r_{ui})
minq∗,p∗=(u,i)ϵK∑(rui)
三,FM(Factorization Machine,因子分解机)
3.1,FM参考资料:
FM:推荐中的瑞士军刀
推荐算法有三个应用领域:召回、粗排、精排。只有FM可以实现三个领域全覆盖。
FM能够生产user/item embedding,因此实现一个FM召回,就能够完成u2i, i2i, i2u, u2u2i四种召回方式,还包括对新用户、新物料的冷启动。性价比如此之高,即使在很多大厂,FM也是主力召回模型。
FM的模型可以表达成:
(FM算法更详细的数学推理以及代码描述)
补充公式
FM算法原理:
CTR预估模型FM、FFM、DeepFM
FM算法解析与Python实现(讲解不清晰)
本地/Documents/ml/deepml/deep nn ctr prediction 地址下有相关课件,tf实现的lr,fm等,18年的有点老
3.2,FM离线框架开源地址:
1,spark fm
org.apache.spark.ml.classification.FMClassifier
spark的libfm?
https://github.com/zhengruifeng/spark-libFM
2,libfm
最经典的fm框架。
http://www.libfm.org/
使用情况:https://blog.csdn.net/luoyexuge/article/details/72639235
3,alphaFM
“该项目只不过是作者八小时之外的课外作品,却被很多公司拿来投入线上实际生产环境”
4,xlearn
https://xlearn-doc-cn.readthedocs.io/en/latest/index.html
提供了命令行以及python和R接口,命令行方式还挺方便的,可以研究一下能不能使用
“5. 比较常见的实现有:”
https://zhuanlan.zhihu.com/p/77090937?utm_source=wechat_session&utm_medium=social&utm_oi=769570593849741312
四,Weed&&deep
W&D由浅层(或单层)的Wide部分神经网络和深层的Deep部分多层神经网络组成,输出层采用softmax或logistics regression综合Wide和Deep部分的输出。
Wide部分有利于增强模型的“记忆能力”,Deep部分有利于增强模型的“泛化能力”。
wide对稀疏特征比较好,deep部分对于稠密化的Embedding向量比较好