推荐系统--基于用户的协同过滤算法(UserCF)

本文介绍了基于用户的协同过滤(UserCF)算法,包括基本思想、找相似用户的方法,如Jaccard相似度和余弦相似度,以及如何进行Top-N推荐。通过电影评分预测案例,展示了数据处理、协同过滤矩阵构建、相似度计算和推荐过程。最后提到了推荐系统性能的评测指标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

推荐系统–基于用户的协同过滤算法(UserCF)

基本概念

基本思想:向用户 u u u 推荐时,我们可以先找到和 u u u 相似的用户集合 N u N_u Nu,然后把这些用户喜欢的物品,但 u u u 没有看过的物品推荐给他。

步骤

  • 找到和目标用户相似的用户集合。
  • 找到这个集合中的用户喜欢的,且目标用户还没有听说过的物品,然后推荐给目标用户。
步骤1 - - 找相似用户

为了找到目标用户的相似用户,我们需要计算不同用户之间的相似度。协同过滤算法主要利用行为的相似度计算兴趣的相似度。对于用户 u u u v v v N u , N v N_u, N_v Nu,Nv 分别表示他们有交互的物品集合。我们通过 Jaccard 公式计算用户之间的相似度:
s i m ( u , v ) = ∣ N u ∩ N v ∣ ∣ N u ∪ N v ∣ sim_{(u,v)}=\frac{\vert N_u \cap N_v \vert}{\vert N_u \cup N_v \vert} sim(u,v)=NuNvNuNv
同样,我们也可以利用余弦相似度、皮尔逊系数来计算用户之间的相似度。具体可见 推荐系统–协同过滤(Collaborative Filtering)

具体案例

我们以电影评分预测为例,数据集为 MovieLens-1M,有关数据集详情,可见 推荐系统–MovieLens数据集

读取数据集

def get_data(data_path):
    # 重新定义列名
    col_names = ["user_id", "movie_id", "rating", "timestamp"]
	# 加载评分数据
    ratings = pd.read_csv(os.path.join(data_path, "ratings.dat"), sep="::", engine="python", names=col_names)
    """
    ratings 的格式为
    
		   user_id  movie_id  rating  timestamp
		0        1      1193       5  978300760
		1        1       661       3  978302109
		2        1       914       3  978301968
		3        1      3408       4  978300275
		4        1      2355       5  978824291
	"""
    # 划分训练集和测试集
    train_data, val_data, _, _ = train_test_split(ratings, ratings, test_size=0.2)
    
    # 将数据按照用户进行分组
    train_data = train_data.groupby("user_id")["movie_id"].apply(list).reset_index()
    """
	train_data 的格式为 

		 	user_id                                           movie_id
		0        1  [1097, 1566, 3114, 2797, 4
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值