zoukankan      html  css  js  c++  java
  • 集体智慧编程——推荐系统(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

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

    参考:集体智慧编程

  • 相关阅读:
    json对象与字符串的相互转换,数组和字符串的转换
    angularjs ng-csv 异步下载
    angular2 localStorage的使用
    ng-csv 异步数据下载
    微信小程序AES加密解密
    微信小程序Md5加密(utf-8汉字无影响)
    angular-file-upload封装为指令+图片尺寸限制
    angular+require前端项目架构搭建
    Inspinia_admin-V2.3原版(英文)
    hplus--H+ V2.3 (中文版)
  • 原文地址:https://www.cnblogs.com/itdyb/p/5011445.html
Copyright © 2011-2022 走看看