当前位置: 高中信息技术 / 综合题
  • 1. (2023高二上·湖州期末) 某音乐平台可以为用户推荐歌曲, 推荐歌曲的算法如下:

    第1步,系统根据用户的听歌行为,使用-2~5进行量化,单曲循环=5,分享=4,收藏=3,主动播放=2,听完=1,未听=0,跳过=-1,拉黑=-2,量化值大于0表示喜欢,建立如图a数据。

    图 a

    第2步,分别计算待推荐用户与其他每位用户的听歌相似度(相似度=两用户同时喜欢的歌曲数/两用户中至少有一人喜欢的歌曲数)。

    第3步,分别计算其他用户对每一首歌曲的推荐度(推荐度=某用户该歌曲的量化值*两用户的相似度)。

    第4步,在其他用户所有量化值大于0的歌曲中找到推荐度最高的,且待推荐用户没有听过的歌曲,推荐给该用户。

    小明用Python程序模拟了此推荐算法,请回答下列问题。

    1. (1) 在图a所示的10首歌曲中,“yigoo”与“lucky”两用户的相似度为。 (四舍五入保留两位小数)
    2. (2) 实现上述功能的Python程序如下,运行结果如图b所示,请在划线处填上合适的代码。

      图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("为您推荐的歌曲是:",  )

微信扫码预览、分享更方便