首页 > 其他分享 >Surprise实现单个Book推荐

Surprise实现单个Book推荐

时间:2022-10-30 09:45:17浏览次数:40  
标签:title import book Book 单个 Surprise data id metadata

参考网址:https://zhuanlan.zhihu.com/p/352181306

数据链接:https://pan.baidu.com/s/1JS1fTrCrZHonNsywLDLhhQ?pwd=a6uf

提取码:a6uf

 1 import pandas as pd
 2 from surprise import Dataset
 3 from surprise import Reader
 4 from surprise import SVD
 5 from surprise.model_selection import cross_validate
 6 import difflib
 7 import random
 8 
 9 # 读取数据
10 ratings_data = pd.read_csv('./data/ratings.csv')
11 books_metadata = pd.read_csv('./data/books.csv')
12 # print(ratings_data.head(10))
13 
14 # 创建Surprise数据集
15 reader = Reader(rating_scale=(1, 5))  # Reader类用于解析包含评级的文件,rating_scale用于每个评级的评级尺度。默认值为(1,5)
16 # 从panda数据帧里加载数据集,第一个参数需要包含user (raw) ids, the item (raw) ids, and the ratings,第二个参数读取文件的读取器
17 data = Dataset.load_from_df(ratings_data[['user_id', 'book_id', 'rating']], reader)
18 
19 # SVD实现
20 # verbose:输出当前epoch,默认为False
21 # n_epochs:迭代次数,默认为20
22 # n_factors:k值,默认为100
23 svd = SVD(verbose=True, n_epochs=10)
24 # 三重交叉验证对SVD模型进行了交叉验证
25 cross_validate(svd, data, measures=['RMSE', 'MAE'], cv=3, verbose=True)
26 
27 
28 # 使用build_full_trainset 方法将交叉验证的数据集转换为一个Surprise的Trainset对象
29 # trainset = data.build_full_trainset()
30 # 可以使用fit方法在整个数据集上训练模型。
31 # svd.fit(trainset)
32 
33 # 有了一个经过训练的SVD模型,我们可以使用它来预测给定用户ID(UID)和项目/书籍ID(IID)的用户对图书的评分。
34 # print(svd.predict(uid=10, iid=100))
35 
36 def get_book_id(book_title, metadata):
37     """
38     根据元数据数据帧中最接近的匹配获取书名的图书ID。
39     """
40 
41     existing_titles = list(metadata['title'].values)
42     closest_titles = difflib.get_close_matches(book_title, existing_titles)
43     book_id = metadata[metadata['title'] == closest_titles[0]]['id'].values[0]
44     return book_id
45 
46 
47 def get_book_info(book_id, metadata):
48     """
49     给定图书id和元数据数据框架,返回有关图书的一些基本信息。
50     """
51 
52     book_info = metadata[metadata['id'] == book_id][['id', 'isbn','authors', 'title', 'original_title']]
53     return book_info.to_dict(orient='records')
54 
55 
56 def predict_review(user_id, book_title, model, metadata):
57     """
58     预测用户对某本书的评论(1-5分)。
59     """
60 
61     book_id = get_book_id(book_title, metadata)
62     review_prediction = model.predict(uid=user_id, iid=book_id)
63     return review_prediction.est
64 
65 
66 def generate_recommendation(user_id, model, metadata, thresh=4):
67     """
68     根据评分阈值为用户生成图书推荐。只有预测评分达到或高于阈值的书籍才会被推荐
69     """
70 
71     book_titles = list(metadata['title'].values)
72     random.shuffle(book_titles)
73 
74     for book_title in book_titles:
75         rating = predict_review(user_id, book_title, model, metadata)
76         if rating >= thresh:
77             book_id = get_book_id(book_title, metadata)
78             return get_book_info(book_id, metadata)
79 
80 
81 #生成一个图书推荐
82 print(generate_recommendation(1000, svd, books_metadata))

 

标签:title,import,book,Book,单个,Surprise,data,id,metadata
From: https://www.cnblogs.com/zhouyeqin/p/16840511.html

相关文章

  • Surprise实现baby product产品推荐
    数据链接:https://pan.baidu.com/s/1JS1fTrCrZHonNsywLDLhhQ?pwd=a6uf提取码:a6uf推荐数据集参考网站:http://snap.stanford.edu/data/amazon/productGraph/categoryFiles/......
  • 华为MateBook13 找不到支持Windows Hello指纹的指纹识别器
    找不到支持WindowsHello指纹的指纹识别器指纹不行?相信电脑也没有这个:  华为电脑安装下面这个驱动:  直链下载:https://cdn.jsdelivr.net/gh/18476305640/typ......
  • 第3章 Jupyter Notebook, numpy和matplotlib
     3-1jupyternotebook基础Notbook示例  Notbook源码1[1]2forxinrange(5):3print('helloworld')4helloworld5helloworld6hello......
  • Bookxnote+坚果云实现双PC同步
    Bookxnote软件介绍坚果云介绍正文开始总体思路:一台电脑为A,另一台电脑为B,将A电脑本地的文件夹关联坚果云同步文件夹,并在B电脑中重复此操作坚果云上新建一个同步文件夹......
  • 通过SSH远程使用jupyter notebook
    1.背景一直苦恼于本地机器和服务器上都要配置一些机器学习方面的环境,今天花了点时间研究了下Jupternotebook远程访问服务器,所以记录一下。有些步骤非必须,这里尽量写清楚......
  • 如何通过FaceBook营销软件采集指定国家的Facebook好友
    采集指定国家的FaceBook用户,可以在Facebook营销软件​中的粉丝营销里,使用采集新用户功能,采集已加入小组成员,陌生小组成员,主页粉丝。以下有3个小Tips.Tips1:在已加入的小组里......
  • JavaWEB06--book02--利用反射合并 LoginServlet 和 RegistServlet 程序为 UserServlet
    ​​项目源码​​合并LoginServlet和RegistServlet程序为UserServlet程序优化一:使用​​if-else​​优化代码二:使用​​反射​​优化大量elseif代码:protectedvo......
  • JavaWEB07--book03---MVC 概念--删除修改图书
    ​​项目源码​​文章目录​​MVC概念​​​​1.图书模块​​​​1.1编写图书模块的数据表​​​​1.2编写图书模块的javaBean​​​​1.3、编写图书模块的Dao和测试Da......
  • Blue Book 上的图论T
    SortingItAllOut:对于可以得到绝对顺序的图,拓扑排序可以直接确定顺序如果拓扑排序没能遍历所有的点,就说明存在一个环。set也可以用count,我为什么才知道Sightseeingt......
  • FaceBook营销软使用技巧,如何翻译聊天记录,设置快捷话术
    下面我来介绍下FaceBook营销软件客服台具备的功能常用话术:添加常用的话术,将话术内容快速发送至联系人聊天窗口,很大程度提升了与好友聊天的便捷度。导入其他子账号话术:软件会......