首页 > 编程语言 > 详细

推荐算法

时间:2019-07-11 18:04:06      阅读:113      评论:0      收藏:0      [点我收藏+]

各种相似度指标:https://www.cnblogs.com/arachis/p/Similarity.html

基于用户协同过滤

技术分享图片

技术分享图片

def getRecommendations(prefs,person,similarity=sim_pearson):

    simSum = {}

    totals = {}

    for other in prefs:

        if other == person: continue

        sim = similarity(prefs,person,other)

        if sim<=0: continue

        for item in prefs[other]:

            #只对自己未看过的电影进行评价

if item not in prefs[person] or prefs[person][item]==0:

                # Similarity * Score加权评价值

                totals.setdefault(item,0)   #因为下面是+=,所以必须初始化

                totals[item]+=prefs[other][item]*sim

                # Sum of similarities 相似值之和

                simSum.setdefault(item,0)

                simSum[item]+=sim

    rankings = [(totals[item]/simSum[item],item) for item in totals]

    #或者 rankings = [(total/simSum[item],item) for item,total in totals.items()]

    rankings.sort()

    rankings.reverse()

return rankings

技术分享图片

技术分享图片

def transformPrefs(prefs):

    result = {}

    for person in prefs:

        for item in prefs[person]:

            result.setdefault(item, {})

            # 将物品和人员对调

            result[item][person] = prefs[person][item]

    return result

def calculateSimilarItems(prefs,n=10):

  result={} # 建立字典,以给出与这些物品最为相近的其他物品

  itemPrefs=transformPrefs(prefs) # 以物品为中心对偏好矩阵实施倒置处理

  for item in itemPrefs: # 寻找与item最为相近的n个物品

    scores=topMatches(itemPrefs,item,n=n,similarity=sim_distance)

    result[item]=scores

  return result

推荐算法

原文:https://www.cnblogs.com/lsh0908/p/11171513.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!