第1步,系统根据用户的听歌行为,使用-2~5进行量化,单曲循环=5,分享=4,收藏=3,主动播放=2,听完=1,未听=0,跳过=-1,拉黑=-2,量化值大于0表示喜欢,建立如图a数据。
图 a
第2步,分别计算待推荐用户与其他每位用户的听歌相似度(相似度=两用户同时喜欢的歌曲数/两用户中至少有一人喜欢的歌曲数)。
第3步,分别计算其他用户对每一首歌曲的推荐度(推荐度=某用户该歌曲的量化值*两用户的相似度)。
第4步,在其他用户所有量化值大于0的歌曲中找到推荐度最高的,且待推荐用户没有听过的歌曲,推荐给该用户。
小明用Python程序模拟了此推荐算法,请回答下列问题。
图b
图 c
def find(name,user):
#代码略
def simalar(music,data,k): #计算相似度
xsd=[0]*len(data)
for i in range(len(data)):
ms1=ms2=0
for j in range(len(music)):
if k!=i:
if data[k][j]>0 and data[i][j]>0:
ms1+=1
if :
ms2+=1
if ms2>0:
xsd[i]= ms1/ms2
return xsd
music=["《孤勇者》 ","《Hug me》","《后会无期》 ","《NUNA》","《蜗牛》 "," 《心墙》 ","《对你说》 ","《与天齐》 ","《栀子花开》"," 《风吹半夏》"]
user=["HelloK","sime32","yigoo","lucky", "halibo","baby","HaiT","bao_66"] #读取听歌行为的量化数据存入data列表,如图c所示
name=input("请输入您的用户名:")
k=find(name,user) #调用 find 函数返回该用户在 data 列表中的索引号
xsd=simalar(music,data,k) #xsd[0]表示 0 号用户与 k 号待推荐用户的相似度
maxm=0
for i in range(len(data)):
for j in range(len(music)):
if data[k][j]==0 and data[i][j]>0:
like=
if like>maxm:
maxm=like
p=j
print("为您推荐的歌曲是:", )