美文网首页
基于物品的过滤-调整的余弦相似度算法

基于物品的过滤-调整的余弦相似度算法

作者: 编程回忆录 | 来源:发表于2017-10-01 22:14 被阅读0次
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time    : 17/10/1 下午9:41
    # @Author  : foragile
    # @Site    : 
    # @File    : chapter3.py
    # @Software: pptb
    from math import sqrt
    
    users3 = {"David": {"Imagine Dragons": 3, "Daft Punk": 5, "Lorde": 4, "Fall Out Boy": 1},
    
              "Matt": {"Imagine Dragons": 3, "Daft Punk": 4, "Lorde": 4, "Fall Out Boy": 1},
    
              "Ben": {"Kacey Musgraves": 4, "Imagine Dragons": 3, "Lorde": 3, "Fall Out Boy": 1},
    
              "Chris": {"Kacey Musgraves": 4, "Imagine Dragons": 4, "Daft Punk": 4, "Lorde": 3, "Fall Out Boy": 1},
    
              "Tori": {"Kacey Musgraves": 5, "Imagine Dragons": 4, "Daft Punk": 5, "Fall Out Boy": 3}
              }
    
    
    def computeSimilarity(band1, band2, userRatings):
        averages = {}
        for (key, ratings) in userRatings.items():
            averages[key] = (float(sum(ratings.values()))) / len(ratings.values())
        num = 0  # numerator
        dem1 = 0  # first half of denomintor
        dem2 = 0
        for (user, ratings) in userRatings.items():
            if band1 in ratings and band2 in ratings:
                avg = averages[user]
                num += (ratings[band1] - avg) * (ratings[band2] - avg)
                dem1 += (ratings[band1] - avg) ** 2
                dem2 += (ratings[band2] - avg) ** 2
        return num / (sqrt(dem1) * sqrt(dem2))
    
    print computeSimilarity("Daft Punk","Lorde",users3)
    

    相关文章

      网友评论

          本文标题:基于物品的过滤-调整的余弦相似度算法

          本文链接:https://www.haomeiwen.com/subject/reaaextx.html