机器学习基础(三十四)—— 协同过滤(之获得推荐)

来源:互联网 发布:网络机顶盒怎么用 编辑:程序博客网 时间:2024/06/09 19:15

为未被某人评分的电影的进行打分,我们当然可以查找品味与此人最为接近(依据相似性度量)的人的相应评分,但是这样做过于简单和随意(permissive)。这种做法的问题在于:我们会找到一个热衷某部电影的古怪评论者,而根据 topMatch 的结果,所有其他的评论者都不看好这部电影。也即将评分完完全全依赖于一个未知可信度的人的评分是有风险的。所以一种稳妥的做法即是根据用户之间的相似度对打分进行加权平均(weighted average)。

def getRecommendations(prefs, p0, similarity=sim_pearson):    totalSum, simSum = {}, {}    for p in prefs:        if p == p0: continue        sim = similarity(p0, p)        if sim <= 0: continue        for item in prefs[p]:            if item not in prefs[p0] or prefs[p0][item] == 0:                simSum.setdefault(item, 0)                simSum[item] += sim                totalSum.setdeault(item, 0)                totalSum[item] += prefs[p][item]*sim    rankings = [(item, totalSum[item]/simSum[item]) for item in totalSum]    return sorted(rankings, key=operator.itemgetter(1), reverse=True)
0 0
原创粉丝点击