UserCF的Python实现

本文介绍了基于用户的协同过滤(UserCF)推荐算法的Python实现,包括计算评分矩阵、用户相似度及推荐内容的步骤。通过余弦相似度计算用户相似度,处理数据稀疏性问题,并提供完整的代码实现。
摘要由CSDN通过智能技术生成

前言

所谓协同过滤, 基本思想是根据用户之前的喜好以及其他兴趣相近的用户的选择来给用户推荐物品(基于对用户历史行为数据的挖掘发现用户的喜好偏向, 并预测用户可能喜好的产品进行推荐),一般是仅仅基于用户的行为数据(评价、购买、下载等), 而不依赖于项的任何附加信息(物品自身特征)或者用户的任何附加信息(年龄, 性别等),是最经典、最常见到的推荐算法。
本文介绍的是基于用户的协同过滤算法及其Python实现,作为推荐算法"鼻祖",关于协同过滤算法的原理,网上一搜一把一把的,这里就不做赘述了,重点以一个网上的公开数据集,介绍一下UserCF的实现思路。
水平有限,不妥之处还希望大佬多多指正。
数据集与完整代码:https://github.com/ziyuan0014/rec_userCF

实现思路

数据

本案例所用数据为用户对物品的评分数据(貌似为movieLen中的数据,但是前期学习找了太多资料,具体数据源我确实无法确定= =!),数据样式如下表所示:

user_id content_id score ts
0 1 1 5 874965758
1 1 2 3 876893171
2 1 3 4 878542960
3 1 4 3 876893119
4 1 5 3 889751712

计算评分矩阵

先放代码

def cirRatMatrix(pd_data,userId,contentId,score):
    """
    计算评分矩阵
    - param: 
        pd_data: 原始数据
        userId: 用户列名
        contentId: 内容列名
        score: 评分列名
    - return: 
        pd_data: 新增了两个编码列的数据表
        rating: 评分矩阵
    """

    pd_data['user_factorize_id'],_ = pd.factorize(pd_data[userId])
    pd_data['content_factorize_id'],_ = pd.factorize(pd_data[contentId])
    
    userNo = pd_data['user_factorize_id'].max() + 1
    contentNo = pd_data['content_factorize_id'].max() + 1
    
    rating = np.zeros((contentNo,userNo))
    #查看矩阵ratings_df的第一维度是多少
    for _,row in pd_data.iterrows():
        #interrows(),对原始数据进行遍历
        rating[int(row[&#
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值