解决推荐系统明显的多样准确性问题学习笔记
解决推荐系统明显的多样准确性问题学习笔记
前言
本篇文章仅仅是本人在学习推荐算法的过程中学习《Solving the apparent diversity-accuracy》的个人理解和学习记录,如有错误欢迎指正
提示:以下是本篇文章正文内容
一、摘要部分
主要讲述了文章中涉及到的知识点,即混合算法、信息过滤、热扩散、概率扩散、二部图网络和个性化推荐
二、主要内容
-
提出问题
提出过于注重多样性而忽视相似性的算法会影响准确性,从而引入专门针对多样性挑战的heat-spreading算法,最后提出了基于热扩散的高效混合推荐算法 -
分别介绍Heats和Probs算法
Heats算法:
工作原理:将对象分配的矢量f表示的初始级别“资源”
实现代码:
def Heats(U,O,root,max_depth):
u=dict()
o=dict()
o={x:0 for x in O.keys()}
name=U[root].keys()
for i in name:
o[i]=1.0
for k in range(max_depth):
u={x:0 for x in U.keys()}
for i,pp in U.items():
for j,w in pp.items():
u[i]=u[i]+o[j]/len(pp)
o={x:0 for x in O.keys()}
for i,pp in O.items():
for j,w in pp.items():
o[i]=o[i]+u[j]/len(pp)
#print(o)
lst=sorted(o.items(),key=lambda x:x[1],reverse=True)
#print(lst)
result=[]
for i in range(150):
res=lst[i][0]
if res not in U[root]:
result.append(res)
Probs算法:
实现代码:
def Probs(U,O,root,max_depth):
u=dict()
o=dict()
o={x:0 for x in O.keys()}
name=U[root].keys()
for i in name:
o[i]=1.0
for k in range(max_depth):
u={x:0 for x in U.keys()}
for i,jw in O.items():
for j,w in jw.items():
u[j]=u[j]+o[i]/len(jw)
o={x:0 for x in O.keys()}
for i,jw in U.items():
for j,w in jw.items():
o[j]=o[j]+u[i]/len(jw)
#print(o)
lst=sorted(o.items(),key=lambda x:x[1],reverse=True)
#print(lst)
result=[]
for i in range(150):
res=lst[i][0]
if res not in U[root]:
result.append(res)
后续内容会尽快加入