Model-Based 协同过滤算法 1

Model-Based 协同过滤算法

随着机器学习技术的逐渐发展与完善,推荐系统也逐渐运用机器学习的思想来进行推荐。将机器学习应用到推荐系统中的方案真是不胜枚举。以下对Model-Based CF算法做一个大致的分类:

  • 基于分类算法、回归算法、聚类算法
  • 基于矩阵分解的推荐
  • 基于神经网络算法
  • 基于图模型算法

接下来我们重点学习以下几种应用较多的方案:

  • 基于K最近邻的协同过滤推荐
  • 基于回归模型的协同过滤推荐
  • 基于矩阵分解的协同过滤推荐

基于K最近邻的协同过滤推荐

基于K最近邻的协同过滤推荐其实本质上就是MemoryBased CF,只不过在选取近邻的时候,加上K最近邻的限制。

这里我们直接根据MemoryBased CF的代码实现

修改以下地方

class CollaborativeFiltering(object):

    based = None

    def __init__(self, k=40, rules=None, use_cache=False, standard=None):
        '''
        :param k: 取K个最近邻来进行预测
        :param rules: 过滤规则,四选一,否则将抛异常:"unhot", "rated", ["unhot","rated"], None
        :param use_cache: 相似度计算结果是否开启缓存
        :param standard: 评分标准化方法,None表示不使用、mean表示均值中心化、zscore表示Z-Score标准化
        '''
        self.k = 40
        self.rules = rules
        self.use_cache = use_cache
        self.standard = standard

修改所有的选取近邻的地方的代码,根据相似度来选取K个最近邻

similar_users = self.similar[uid].drop([uid]).dropna().sort_values(ascending=False)[:self.k]

similar_items = self.similar[iid].drop([iid]).dropna().sort_values(ascending=False)[:self.k]

但由于我们的原始数据较少,这里我们的KNN方法的效果会比纯粹的MemoryBasedCF要差

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
协同过滤算法是一种基于用户行为的推荐算法,其基本思想是利用用户历史行为数据,找到与当前用户兴趣相似的其他用户或物品,从而推荐给当前用户。 在Python中,实现协同过滤算法的一种常见方式是使用surprise库。该库提供了各种基于协同过滤算法的推荐模型,包括基于用户的协同过滤、基于物品的协同过滤等。 下面是一个基于用户的协同过滤推荐的示例代码: ```python from surprise import Dataset from surprise import Reader from surprise import KNNBasic from surprise.model_selection import cross_validate # 加载数据 reader = Reader(line_format='user item rating', sep=',', rating_scale=(1, 5), skip_lines=1) data = Dataset.load_from_file('ratings.csv', reader=reader) # 构建模型 sim_options = {'name': 'cosine', 'user_based': True} model = KNNBasic(sim_options=sim_options) # 交叉验证 cross_validate(model, data, measures=['RMSE', 'MAE'], cv=5, verbose=True) # 训练模型 trainset = data.build_full_trainset() model.fit(trainset) # 预测 uid = str(196) # 用户ID iid = str(302) # 物品ID pred = model.predict(uid, iid, verbose=True) ``` 上述代码中,我们首先使用surprise库中的Dataset类加载数据,然后构建基于用户的协同过滤模型KNNBasic,并使用交叉验证评估模型性能。接着,我们使用build_full_trainset()方法生成完整的训练集,并使用fit()方法训练模型。最后,我们使用predict()方法预测用户对某个物品的评分。 需要注意的是,为了使用surprise库,我们需要将数据转换为指定格式的文件,例如上述代码中的ratings.csv文件格式为: ``` userId,movieId,rating,timestamp 1,1,4.0,964982703 1,3,4.0,964981247 1,6,4.0,964982224 ... ``` 其中,每行数据表示一个用户-物品评分记录,包括用户ID、物品ID、评分和时间戳等信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值