当前位置: 首页 > news >正文

推荐系统学习

pd.read_csv返回的是dataframe,并不是一个可迭代对象,可用itertuples()或者values.tolist()函数将其转化tuple或者列表

df.itertuples()返回的是迭代器对象,转化成列表还要list(df.itertuples())

values.tolist()返回的是列表

评测指标:

1.召回率:描述有多少比例的用户—物品评分记录包含在最终的推荐列表中

2.准确率:最终 的推荐列表中有多少比例是发生过的用户—物品评分记录

3.覆盖率:最终的推荐列表中包含多大比例的物品;覆盖率反映了推荐算法发掘长尾的 能力,覆盖率越高,说明推荐算法越能够将长尾中的物品推荐给用户

4.平均流行度:在所有用户的推荐列表中,推荐的物品有多“热门”。如果系统只推荐 所有人都喜欢的热门商品,那平均流行度就会高;如果系统能推荐一些 小众但用户可能喜欢的宝藏物品,那平均流行度会低。

算法:

协同过滤算法:利用用户历史行为数据,通过用户之间或物品之间的相似性来推荐用户可能喜欢的物品。

(1)基于用户的协同过滤(User-based CF)

  • 通过计算用户之间的相似度,找出和目标用户兴趣相似的“邻居”用户;

  • 根据邻居用户喜欢的物品,推荐给目标用户他还未接触过的物品。

用户u和用户v的兴趣相似度 

        Jaccard公式:

        余弦相似度:

我们可以首先计算出的用户对(u,v),然后再对这种情况除以分母。 为此,可以首先建立物品到用户的倒排表,对于每个物品都保存对该物品产生过行为的用户 列表。令稀疏矩阵。那么,假设用户u和用户v同时属于倒排表中K个物品对 应的用户列表,就有C[u][v]=K。从而,可以扫描倒排表中每个物品对应的用户列表,将用户列 表中的两两用户对应的C[u][v]加1,最终就可以得到所有用户之间不为0的C[u][v]。下面的代码实 现了上面提到的算法:

用户相似度计算的改进:

两个用户对 冷门物品采取过同样的行为更能说明他们兴趣的相似度。因此,John S. Breese在论文①中提出了 如下公式,根据用户行为计算用户的兴趣相似度:

N(u)为用户u曾经有过正反馈的物品集合

(2)基于物品的协同过滤(Item-based CF)

  • 通过计算物品之间的相似度,找出和用户已喜欢物品相似的物品;

  • 推荐这些相似物品给用户。

http://www.dtcms.com/a/301017.html

相关文章:

  • QML视图组件:ListView、GridView、TableView、PathView
  • MyBatis Plus 乐观锁与悲观锁
  • 《C++ list 完全指南:list的模拟实现》
  • NodeJs接入腾讯云存储COS
  • MySQL 用户管理
  • 第六章 JavaScript 互操(3)JS调用.NET
  • Django5.1(131)—— 表单 API二(API参考)
  • 电科金仓 KingbaseES 深度解码:技术突破・行业实践・沙龙邀约 -- 融合数据库的变革之力
  • Java面试宝典:MySQL索引
  • 2-4、Dify案例实践—基于工作流构建商城用户评价智能分析系统
  • PyTorch武侠演义 第一卷:初入江湖 第7章:矿洞中的计算禁制
  • 基于mnn架构在本地 c++运行llm与mllm模型
  • 数据结构基本内容(第四篇:队列)
  • 2025.7.27
  • Java面试题及详细答案120道之(061-080)
  • C++算法竞赛篇(六)一维数组题型讲解
  • 【工具】python汇总发票(含源码)
  • Java排序算法之<希尔排序>
  • 7月27日星期日今日早报简报微语报早读
  • GitHub 趋势日报 (2025年07月25日)
  • Linux 系统网络配置及 IP 地址相关知识汇总
  • STM32 I2C通信完整教程:从协议原理到硬件实现
  • 一文快速了解Docker和命令详解
  • 模拟实现python的sklearn库中的Bunch类以及 load_iris 功能
  • 文件权限标记机制在知识安全共享中的应用实践
  • minio 对象存储
  • java的break能加标签,return可以加标签吗
  • 从一副蓝牙耳机里get倍思的“实用而美”
  • Python 程序设计讲义(23):循环结构——循环控制语句 break 与 continue
  • 背包DP之多重背包