3分钟学会使用Python推荐系统库Surprise_reader(line_format='user item rating timestamp', s-程序员宅基地

技术标签: 机器学习  推荐系统  

最近做推荐系统,研究了一下Surprise库,使用简单,效果不错。

Github地址NicolasHug/Surprise

实现功能:

  • 找到和用户A相似的N个用户
  • 找到和项目A相似的N个项目

1.item_user_rate_time.txt 数据格式 user item rating timestamp (用户id 项目id 评分 时间戳)

2.数据读取 训练模型

import os
from surprise import SVD
from surprise import SVDpp
from surprise import Dataset
from surprise import accuracy
from surprise.model_selection import train_test_split
from surprise import KNNBasic
from surprise import BaselineOnly
from surprise import Reader
from surprise.model_selection import KFold
from surprise.model_selection import cross_validate
from surprise.model_selection import GridSearchCV

file_path = os.path.expanduser('item_user_rate_time.txt')
reader = Reader(line_format='user item rating timestamp', sep=',')
surprise_data = Dataset.load_from_file(file_path, reader=reader)

all_trainset = surprise_data.build_full_trainset()
algo = KNNBasic(k=40,min_k=3,sim_options={'user_based': True}) # sim_options={'name': 'cosine','user_based': True} cosine/msd/pearson/pearson_baseline
algo.fit(all_trainset)

3.找到相似用户

def getSimilarUsers(top_k,u_id):
    user_inner_id = algo.trainset.to_inner_uid(u_id)
    user_neighbors = algo.get_neighbors(user_inner_id, k=top_k)
    user_neighbors = (algo.trainset.to_raw_uid(inner_id) for inner_id in user_neighbors)
    return user_neighbors
list(getSimilarUsers(5,'13321'))
#Out:['15469', '6018', '264174', '279130', '23779']

4.找到相似项目 sim_options中的user_based设置为false,基于项目相似度进行计算

item_algo = KNNBasic(k=40,min_k=3,sim_options={'user_based': False}) # sim_options={'name': 'cosine','user_based': True} cosine/msd/pearson/pearson_baseline
item_algo.fit(all_trainset)

def getSimilarItems(top_k,item_id):
    item_inner_id = item_algo.trainset.to_inner_iid(item_id)
    item_neighbors = item_algo.get_neighbors(item_inner_id, k=top_k)
    f_item_neighbors = (item_algo.trainset.to_raw_iid(inner_id)
                       for inner_id in item_neighbors)
    return f_item_neighbors
list(getSimilarItems(10,'761'))
#Out:['288', '313', '329', '499', '516']
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wzmfla/article/details/82665830

智能推荐

1.10 存储器 MEM Memory_hdd和mem-程序员宅基地

文章浏览阅读160次。1.10 存储器 MEM Memory1 存储器是什么?2 有哪些分类3 参考链接1 存储器是什么?存储器单元实际上是时序逻辑电路的一种。按存储器的使用类型可分为只读存储器(ROM)和随机存取存储器(RAM)。只读存储器(ROM):存储的内容是固定不变的,只能读出而不能写入的半导体存储器。随机读写存储器(RAM):既能读出又能写入的半导体存储器。RAM,random access memory,随机存取存储器又称作“随机存储器”,是与CPU直接交换数据的内部存储器,也叫主存(内存)。它可以随时读写_hdd和mem

HTML网页制作——用DIV+CSS技术设计的动漫网站——网页设计实例 企业网站制作-程序员宅基地

文章浏览阅读892次,点赞22次,收藏20次。1网页简介:此作品为学生个人主页网页设计题材,HTML+CSS 布局制作,web前端期末大作业,大学生网页设计作业源码,这是一个不错的网页制作,画面精明,代码为简单学生水平, 非常适合初学者学习使用。2.网页编辑等任意html编辑软件进行运行及修改编辑等操作)。3.知识应用:技术方面主要应用了网页知识中的: Div+CSS、鼠标滑过特效、Table、导航栏效果、Banner、表单、二级三级页面等,视频、 音频元素 、Flash,同时设计了Logo(源文件)所需的知识点。

Linux进程同步之POSIX信号量_每个进程都要初始化信号量吗-程序员宅基地

文章浏览阅读1k次。部分内容来自:http://blog.csdn.net/anonymalias/article/details/9219945一、概述POSIX信号量有两种:有名信号量和无名信号量,无名信号量也被称作基于内存的信号量。有名信号量通过IPC(Inter-Process Communication,进程间通信)名字进行进程间的同步,而无名信号量如果不是放在进程间的共享内存区中,是不能用来进_每个进程都要初始化信号量吗

Windows 7修改路由表的跃点数_route add 跃点数-程序员宅基地

文章浏览阅读1.8w次。显示当前网关:route printnetstat -r //两个命令都是显示所有的路由表route print -4 //只显示IPV4的网关route print -6 //只显示IPV6的网关添加网关:route add 0.0.0.0 mask 0.0.0.0 192.168.1.1删除网关:route delete 0.0.0.0 mask 0.0.0.0 192.168.1.1修改静态..._route add 跃点数

CCKS2020 任务三 面向中文电子病历的医疗实体及事件抽取_ccks2020数据集医学-程序员宅基地

文章浏览阅读1.9k次。CCKS2020 任务三 本任务是CCKS围绕中文电子病历语义化开展的系列评测的一个延续,在CCKS 2017,2018, 2019相关评测任务的基础上进行了延伸和拓展。 本任务包括两个子任务: (1) 医疗命名实体识别:于给定的一组电子病历纯文本文档,识别并抽取出与医学临床相关的..._ccks2020数据集医学

Failed to resolve: com.android.support.constraint:constraint-layout:1.0.2-程序员宅基地

文章浏览阅读5.7k次。Failed to resolve: com.android.support.constraint:constraint-layout:1.0.2 Install repository and sync project. Show in file. Show in project structure dialog. 未能解决:com.android.support.const_com.android.support.constraint:constraint-layout:1.0.2 jar

随便推点

网络控制IO模块:WIZ220IO / WIZ220IO-EVB_嵌入式远程io网关-程序员宅基地

文章浏览阅读2.5k次。WIZ220IO是一款嵌入式远程 I/O模块,它能通过因特网在远程控制和监测I/O端口。可以使用Windows应用程序或嵌入式网络服务器检测并控制I/O端口。WIZ220IO支持16个数字I/O端口和4个模拟I/O。另外,固件和嵌入式网页也可以通过以太网进行远程更新。WIZ220IO-EVB 是评估底板,用户可用它迅速地评估WIZ220IO模块。该评估板有8个开关用于数字输入测试,8个LED用_嵌入式远程io网关

PM3嗅探数据采集密码自动提取密码工具_pm3嗅探密码计算器-程序员宅基地

文章浏览阅读3.2k次。PM3嗅探可能大家都玩过,它主要目的就是采集门禁读头和卡片之间的交互数据,从中分析出有用的资料,帮我们读取卡片数据。针对M1卡,如何嗅探采集到卡片资料呢?正常的嗅探流程是这样的1、卡片放PM3上2、PM3连接电脑(或者连接手机)3、运行嗅探命令hf mf sniff4、卡片和PM3一起去读头刷卡,刷个3-5次5、按一下PM3侧面按钮,然后输入命令hf mf list6、如果是新版的软件,比如RDV4GUI(可以配合RDV4/PM3/RDV2全.._pm3嗅探密码计算器

springboot/java/php/node/python微信小程序的外卖点餐系统的设计与实现【计算机毕设】-程序员宅基地

文章浏览阅读395次,点赞4次,收藏3次。设计与实现基于微信小程序的外卖点餐系统,对商家而言,可以拓宽营销渠道,降低获客成本,通过微信庞大的用户基础和社交网络的传播效应,增加曝光率和订单量。对用户来说,这样的系统意味着更加便捷的操作流程和更高效的服务体验,用户可以在聊天、阅读等日常使用微信的过程中,轻松完成点餐,无需额外下载应用程序,节省了手机存储空间。微信小程序的外卖点餐系统的设计与实现,不仅能够推动餐饮行业的数字化转型,也为消费者提供了更为丰富和便捷的餐饮选择,具有重要的社会和经济价值。操作系统:win7以上,最好是win10。

Android横屏竖屏判断--全屏设置--取屏幕宽高_横竖屏切换获取高度-程序员宅基地

文章浏览阅读3.3k次。这些代码都要放在Activity里。横屏竖屏判断方法1:mActivity.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE;// 横屏方法2:DisplayMetrics dm = new DisplayMetrics();mLauncher.g_横竖屏切换获取高度

IDEA修改Maven全局配置-程序员宅基地

文章浏览阅读893次。在使用过程中发现,IDEA每次新建一个Project ,这个maven配置都会初始化默认的。这里需要设置下全局配置;File -> Other Settings -> Settings for New Projects...这里设置下即可。参考:https://blog.csdn.net/Suyebiubiu/article/details/85..._idea2.1 maven全局设置

mac phpstorm过期_mac. phpstorm怎么看到期时间-程序员宅基地

文章浏览阅读1.2k次。http://idea.lanyus.com/_mac. phpstorm怎么看到期时间

推荐文章

热门文章

相关标签