机器学习:协同过滤推荐算法

题目:使用协同过滤(基于用户)构建简单的电影推荐系统

1.1.1 实验目的

1.了解协同过滤理论基础
2.平台实现算法
3. 编程实现协同过滤算法

1.1.2 实验内容及步骤

假设我们以字典形式保存用户关于电影的评分数据,请构建一个电影推荐程序。

STEP1:编写函数计算欧式距离字典数据中两两用户的欧式距离。
STEP2:编写函数依据欧式距离大小以及协同过滤算法(用户)实现电影的推荐。

1.1.3 程序运行过程、方法和运行结果

此处采用欧氏距离计算相似性

在这里插入图片描述

# 自定义数据集  电影及其最低评分
# A dictionary of movie critics and their ratings of a small#
critics = {
    'A': {'老炮儿':3.5,'唐人街探案': 1.0},
    'B': {'老炮儿':2.5,'唐人街探案': 3.5,'星球大战': 3.0, '寻龙诀': 3.5,
                  '神探夏洛克': 2.5, '小门神': 3.0},
    'C': {'老炮儿':3.0,'唐人街探案': 3.5,'星球大战': 1.5, '寻龙诀': 5.0,
                     '神探夏洛克': 3.0, '小门神': 3.5},
    'D': {'老炮儿':2.5,'唐人街探案': 3.5,'寻龙诀': 3.5, '神探夏洛克': 4.0},
    'E': {'老炮儿':3.5,'唐人街探案': 2.0,'星球大战': 4.5, '神探夏洛克': 3.5,
                     '小门神': 2.0},
    'F': {'老炮儿':3.0,'唐人街探案': 4.0,'星球大战': 2.0, '寻龙诀': 3.0,
                     '神探夏洛克': 3.0, '小门神': 2.0},
    'G': {'老炮儿':4.5,'唐人街探案': 1.5,'星球大战': 3.0, '寻龙诀': 5.0,
                      '神探夏洛克': 3.5}
    }

print(critics['B']['星球大战'])
3.0
# STEP1:编写函数计算欧式距离  字典数据中两两用户的欧式距离。
from math import sqrt

# Returns a distance-based similarity score for person1 and person2
def sim_distance(prefs, person1, person2):
    # Get the list of shared_items
    si = {}
    # 判断person1和person2是否有相同同的观影经历,“是”将si[item]结果置为1,“否”则返回0
    for item in prefs[person1]:
        if item in prefs[person2]: 
            si[item] = 1
            #print(item)
    # if they have no ratings in common, return 0
    if len(si) == 0: 
        return 0
    # Add up the squares of all the differences
    # 列表推导式 :如果A用户和B用户有相同同的观影经历,则求它们距离的平方和
    sum_of_squares = sum([pow(prefs[person1][item] - prefs[person2][item], 2) for item in prefs[person1] if item in prefs[person2]])
    #在欧氏距离公式中,取值范围会很大,一般通过如下方式归一化:sim = 1 / (1 + 欧氏距离)
    return 1 / (1 + sqrt(sum_of_squares))

print("A用户和B用户之间的欧氏距离:",sim_distance(critics, 'A', 'B'))
A用户和B用户之间的欧氏距离: 0.2708131845707603
# STEP2:编写函数依据欧式距离大小以及协同过滤算法(用户)实现电影的推荐。
# Gets recommendations for a person by using a weighted average
# of every other user's rankings   similarity=sim_distance重命名计算欧几里得距离函数
def getRecommendations(prefs, person, similarity=sim_distance):
    totals = {}
    simSums = {}
    for other in prefs:
        # don't compare me to myself
        if other == person: 
            continue
        #计算相似度
        sim = similarity(prefs, person, other)
        # ignore scores of zero or lower
        if sim <= 0: 
            continue
        for item in prefs[other]:
            # only score movies I haven't seen yet
            if item not in prefs[person] or prefs[person][item] == 0:
                # Similarity * Score
                totals.setdefault(item, 0)
                #求该用户没看过的电影的加权分的和  把相似性和对于每个电影的实际评分相乘,就是电影的加权分
                totals[item] += prefs[other][item] * sim
                # Sum of similarities
                simSums.setdefault(item, 0)
                #求这些电影的相似度之和
                simSums[item] += sim
    # Create the normalized list
    #标准化 推荐度 = 总相似度之和(总分/加权分的和)/相似性
    rankings = [(total / simSums[item], item) for item, total in totals.items()]
    # Return the sorted list
    rankings.sort()
    # 对列表的元素进行反向排序
    rankings.reverse()
    return rankings

print("给A用户推荐以下电影:\n",getRecommendations(critics, 'A'))
给A用户推荐以下电影:
 [(4.152703901679927, '寻龙诀'), (3.304207244554503, '神探夏洛克'), (3.045124682040546, '星球大战'), (2.5333970389243956, '小门神')]

1.1.4 实验小结

基于用户的协同过滤算法
思想:
寻找相似用户邻居,用相似邻居偏好来推荐物品

步骤:
一、使用欧氏距离(或其它方法)计算相似性;
二、把相似性和对于每个电影的实际评分相乘,就是电影的加权分;
三、计算推荐度=加权分之和/相似性;
四、将推荐度最高的电影推荐给用户。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于协同过滤算法的电影推荐系统项目概述: 1. 项目背景:电影推荐系统是一种基于用户行为数据和电影特征数据构建的推荐系统,其目的是为用户提供个性化的电影推荐协同过滤算法是一种常用的推荐算法,它通过分析用户之间的行为相似性来预测用户对未看过电影的喜好。基于协同过滤算法的电影推荐系统可以提高用户的观影体验和满意度,增强用户体验的粘性和活跃度。 2. 用户需求分析:首先,需要分析用户需求,包括用户的观影习惯、兴趣爱好和口味偏好等。此外,还可以通过调研用户反馈和反馈信息收集,了解用户对现有电影推荐系统的满意度和不足之处,以便针对性地改进和优化系统。 3. 数据收集与处理:电影推荐系统需要收集用户行为数据和电影特征数据。用户行为数据包括用户观看的电影、评分、评论等,电影特征数据包括电影的演员、导演、类型、评分、剧情简介等。在收集数据后,需要对数据进行清洗、处理和转换,以便进行后续的推荐算法分析和应用。 4. 协同过滤算法实现协同过滤算法是一种基于用户行为相似性和物品属性相似性的推荐算法。它根据用户的历史行为和喜好,预测用户对未看过电影的喜好,为用户提供个性化的电影推荐。具体实现过程中,需要设计合理的协同过滤算法模型,例如基于内存的协同过滤算法和基于物品的协同过滤算法等。同时,需要根据数据特征和用户需求调整算法参数和模型参数,以提高推荐准确度和推荐效果。 5. 评估与优化:在协同过滤算法实现后,需要通过测试和评估来验证推荐系统的效果和性能。可以使用一些常用的评估指标,如准确率、召回率、AUC值等来评估推荐系统的性能。同时,可以通过收集用户反馈和用户行为数据来不断优化和改进系统,提高用户的满意度和忠诚度。 总之,基于协同过滤算法的电影推荐系统项目旨在为用户提供个性化的电影推荐服务,提高用户的观影体验和满意度。在项目实施过程中,需要充分考虑用户需求、数据收集与处理、协同过滤算法实现和评估与优化等方面,以实现系统的最佳性能和应用效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值