• 集体智慧编程——推荐系统(2)


    步骤三:为评论者打分

       既然我们已经有了对两个人进行比较的函数,下面就可以编写程序,根据指定人员对每个人进行打分,并找出最接近的匹配结果了。在本例中,我们对找寻对与自己相似评委的影评者感兴趣,这样我们就知道在选择影片时应该采纳谁的建议了。

    def topMatches(prefs,person,n=5,similarity=sim_pearson):
        scores=[(similarity(prefs,person,other),other) for other in prefs if other!=person]
    
        scores.sort()
        scores.reverse()
        return scores[0:n]

    该函数利用了列表推导式,将自身和字典中的其他每一个用户进行了比较。返回排序结果的前N项。

    >>>reload(recommendations)
    >>> recommendations.topMatches(recommendations.critics,'Toby',n=3)
    [(0.9912407071619299, 'Lisa Rose'), (0.9244734516419049, 'Mick LaSalle'), (0.8934051474415647, 'Claudia Puig')]
    

     步骤四:推荐物品

    我们通过一个经过加权的评价值来为影片打分,评论者的评分结果因此形成了先后的排名。为此,我们必须取得所有其他的评论者的评价结果,借此得到相似度后,再乘以他们为每部影片所给的评价值。

    def getRecommendations(prefs,person,similarity=sim_pearson):
        totals={}
        simSums={}
        for other in prefs:
            if other==person:continue  #do not compare with self
            sim=similarity(prefs,person,other)
    
            #ignore the value <=0
            if sim<=0 :continue
            for item in prefs[other]:
                if item not in prefs[person] or prefs[person][item]==0:  
                    totals.setdefault(item,0)
                    totals[item]+=prefs[other][item]*sim
                    simSums.setdefault(item,0)
                    simSums[item]+=sim
        
        ranking=[(total/simSums[item],item)for item,total in totals.items() ]
    
        ranking.sort()
        ranking.reverse()
        return ranking

    这样,我们就可以找到自己接下来应该看得电影了。

    参考:集体智慧编程

  • 相关阅读:
    路由器链接
    quartz cron表达式demo
    mybatis xml中常见配置demo
    PLSQL启动很慢的问题
    oracle触发器--if else demo
    去掉redhat linux提示注册
    linux 关闭电子邮件传输服务
    max(length()) oracle字段最长长度
    事件tou
    事件
  • 原文地址:https://www.cnblogs.com/itdyb/p/5011445.html
Copyright © 2020-2023  润新知