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

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

作者: 编程回忆录 | 来源:发表于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