手把手带你搭建推荐系统
黄鸿波
谷歌开发者专家,知名游戏公司技术专家
3441 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 36 讲
手把手带你搭建推荐系统
15
15
1.0x
00:00/00:00
登录|注册

23|流程串联:数据处理和协同过滤串联进行内容推荐

你好,我是黄鸿波。
在前面的课程中讲了很多召回算法,也讲了关于 Flask 和用户界面相关的内容,今天我们把所有的东西做一个流程串联。
今天主要会做下面五件事。
将数据采集到协同过滤算法的召回中训练协同过滤算法。
使用协同过滤算法训练出基于 Item 的协同过滤矩阵。
利用协调过滤矩阵,将用户 ID 传入进去预测出每一个用户的 Item list。
将预测出来的结果存入到 Redis 数据库。
通过 WebService 做成接口。
接下来,我们针对上面的内容,看看怎么一步步实现。

训练协同过滤算法

要想把之前的那一套协同过滤算法跑起来,首先要做的就是做好数据,并喂给协同过滤算法。
先来回顾一下在协同过滤那一节写的训练代码。
def cf_Item_train(self):
"""
:return:相似度矩阵:{content_id:{content_id:score}}
"""
print("start train")
self.Item_to_Item, self.Item_count = dict(), dict()
for user, Items in self.train.Items():
for i in Items.keys():
self.Item_count.setdefault(i, 0)
self.Item_count[i] += 1 # Item i 出现一次就加1分
for user, Items in self.train.Items():
for i in Items.keys():
self.Item_to_Item.setdefault(i, {})
for j in Items.keys():
if i == j:
continue
self.Item_to_Item[i].setdefault(j, 0)
self.Item_to_Item[i][j] += 1 / (
math.sqrt(self.Item_count[i] + self.Item_count[j])) # Item i 和 j 共现一次就加1
# 计算相似度矩阵
for _Item in self.Item_to_Item:
self.Item_to_Item[_Item] = dict(sorted(self.Item_to_Item[_Item].Items(),
key=lambda x: x[1], reverse=True)[0:30])
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了如何通过数据处理和协同过滤算法串联进行内容推荐。作者首先讲解了训练协同过滤算法的步骤,包括从训练数据集中提取用户和对应的物品,生成相似度矩阵。接着,作者详细介绍了如何从MongoDB数据库中读取数据,并通过规则进行加权计算得分,最后将得分存入CSV表供训练使用。文章还介绍了相关的代码实现,包括初始化数据库、计算用户对新闻的得分、以及将得分与新闻ID存储为CSV格式。整体而言,本文涵盖了数据处理、协同过滤算法训练和实际代码实现等内容,为读者提供了一套完整的内容推荐流程。文章还介绍了如何搭建整个运行流程,包括计算推荐用户列表、训练协同过滤矩阵、进行推荐以及将推荐结果写入数据库的流程。通过本文,读者可以快速了解内容推荐的技术特点,以及如何实现整个推荐流程。文章总结了训练基于 Item 的协同过滤矩阵的步骤,将数据和协同过滤算法串联起来,并存入到Redis数据库,以及推荐系统的流程。读者可以从中学习如何确定推荐对象、计算推荐矩阵、进行推荐和记录推荐结果。整体而言,本文为读者提供了一套完整的内容推荐流程,并鼓励读者进行课后练习,实现代码并将前端与推荐结果串联起来。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你搭建推荐系统》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(5)

  • 最新
  • 精选
  • panda_dou
    请问一下,文章中代码的GitHub的链接可以提供一下吗?

    作者回复: https://github.com/ipeaking/recommendation https://github.com/ipeaking/scrapy_sina

    2023-08-07归属地:上海
    2
  • peter
    请问:“共现矩阵”就是“协同过滤矩阵”吗?

    作者回复: 是的。

    2023-06-08归属地:北京
  • 叶圣枫
    这些表里的数据从哪里来? self.mongo = MongoDB(db='recommendation') self.db_client = self.mongo.db_client self.read_collection = self.db_client['read'] self.likes_collection = self.db_client['likes'] self.collection = self.db_client['collection'] self.content = self.db_client['content_labels']
    2024-02-15归属地:美国
    1
  • 悟尘
    read_count = self.read_collection.find(query).count() 执行报错 AttributeError: 'Cursor' object has no attribute 'count': 这个错误是因为在 MongoDB 3.6 及更高版本中,`Cursor` 对象不再具有 `count()` 方法。你需要使用其他方法来获取查询结果的数量。 你可以使用以下方法之一来计算匹配查询的文档数量: 1. **`count_documents()`**: - 使用 `count_documents()` 方法直接在集合上进行计数。 ```python read_count = self.read_collection.count_documents(query) ``` 2. **`estimated_document_count()`**: - 如果你不需要精确的计数,可以使用 `estimated_document_count()` 方法,它通常比 `count_documents()` 更快。 ```python read_count = self.read_collection.estimated_document_count() ``` 请确保你的 MongoDB 版本支持这些方法。如果你正在使用的版本低于 3.6,请更新到较新的版本以避免出现这个问题。
    2023-12-15归属地:北京
  • 悟尘
    ../data/news_score/news_log.csv,这个文件在哪?
    2023-12-15归属地:北京
    1
收起评论
显示
设置
留言
5
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部