import io  # needed because of weird encoding of u.item file
import os
from surprise import KNNBaseline
from surprise import Dataset
from surprise import get_dataset_dir
from surprise import Reader
from surprise import dump def read_item_names(item_file_path,split_flag='\t'):
"""
从MOVIELNEN 100-K数据集读取UE项目文件并返回两个
映射将原始ID转换成电影名称和电影名称为原始ID。
Read the u.item file from MovieLens 100-k dataset and return two
mappings to convert raw ids into movie names and movie names into raw ids.
""" # file_name = r'C:\Users\FELIX\Desktop\surprise库源码分析\uitems.txt'
file_name=item_file_path
rid_to_name = {}
name_to_rid = {}
with io.open(file_name, 'r', encoding='utf8') as f:
for line in f:
line = line.split(split_flag)
rid_to_name[line[0]] = line[1].strip()
name_to_rid[line[1].strip()] = line[0] return rid_to_name, name_to_rid save_path=os.path.expanduser(r'~/dump_file')
def train_data(user_item_score_path,split_flag='\t',user_based=False):
# path to dataset file
# 数据集路径
# file_path = os.path.expanduser(r'C:\Users\FELIX\Desktop\surprise库源码分析\uuu.txt')
file_path = os.path.expanduser(user_item_score_path)
reader = Reader(line_format='user item rating timestamp', sep=split_flag)
data = Dataset.load_from_file(file_path, reader=reader) # First, train the algortihm to compute the similarities between items
# 首先训练算法来计算不同项目之间的相似度
# data = Dataset.load_builtin('ml-100k')
trainset = data.build_full_trainset()
sim_options = {'name': 'pearson_baseline', 'user_based': user_based}
algo = KNNBaseline(sim_options=sim_options)
algo.fit(trainset) # Dump algorithm and reload it.
# file_name = os.path.expanduser(r'C:\Users\FELIX\Desktop\surprise库源码分析\uuu.txt\dump_file')
dump.dump(save_path, algo=algo) # 模型保存 def get_neighbors(item_name,item_file_path,kk=10):
_, algo = dump.load(save_path) # 模型加载
# # Read the mappings raw id <-> movie name
rid_to_name, name_to_rid = read_item_names(item_file_path)
# print(name_to_rid)
# # Retrieve inner id of the movie Toy Story
# item_name_raw_id = name_to_rid['uitems10\n']
item_name_raw_id = name_to_rid[item_name.strip()] item_name_inner_id = algo.trainset.to_inner_iid(item_name_raw_id) # # Retrieve inner ids of the nearest neighbors of Toy Story.
item_name_neighbors = algo.get_neighbors(item_name_inner_id, k=kk) # Convert inner ids of the neighbors into names.
item_name_neighbors = (algo.trainset.to_raw_iid(inner_id)
for inner_id in item_name_neighbors)
item_name_neighbors = (rid_to_name[rid]
for rid in item_name_neighbors)
return item_name_neighbors u_i_path=r'C:\Users\FELIX\Desktop\surprise库源码分析\uuu.txt'
train_data(u_i_path)
i_path=r'C:\Users\FELIX\Desktop\surprise库源码分析\uitems.txt'
nei_items=get_neighbors('uitems685',i_path,kk=10)
for nei in nei_items:
print(nei)

如果没有数据的话,可以随机生成测试数据:

# 自己生成数据   1000人   5000商品   1000人,随机对5000个商品中的东西进行评价,评分为1-10
import random
for n in range(4):
for i in range(1000):
t=int(random.random()*100)
for j in range(t):
# kk=int(random.random()*200)
# for k in range(kk):
item=int(random.random()*5000)
goal=int(random.random()*10)
with open('uu.txt','a',encoding='utf8') as f:
line=str(i)+'\t'+str(item)+'\t'+str(goal)+'\t'+'\n'
f.write(line) # 随机打乱评分数据
with open('uu.txt','r',encoding='utf8')as f:
data=f.readlines()
data2=random.shuffle(data)
with open('uuu.txt','a',encoding='utf8')as f2:
for line in data:
f2.write(line) # 随机生成商品数据
with open('uitems.txt','w',encoding='utf8')as f:
for i in range(5000):
s=str(i)+'\t'+'uitems{}'.format(str(i))+'\n'
f.write(s)

基于评分的商品top-N推荐系统的更多相关文章

  1. 【新鲜出炉的个人项目】基于 Flink 的商品推荐系统

    FlinkCommodityRecommendationSystem Recs FlinkCommodityRecommendationSystem(基于 Flink 的商品推荐系统) 1. 前言 系 ...

  2. 文献综述八:基于JAVA的商品网站的研究

    一.基本信息 标题:基于JAVA的商品网站的研究 时间:2015 出版源:信息技术 文件分类:对java语言的研究 二.研究背景 本文主要介绍了系统的分析,设计和开发的全部过程. 三.具体内容 文献的 ...

  3. 文献综述三:基于JSP的商品信息管理系统设计与开发

    一.基本信息 标题:基于JSP的商品信息管理系统设计与开发 时间:2015 出版源:Computer Knowledge and Technology 文件分类:jsp技术的系统开发 二.研究背景 通 ...

  4. 基于卷积神经网络CNN的电影推荐系统

    本项目使用文本卷积神经网络,并使用MovieLens数据集完成电影推荐的任务. 推荐系统在日常的网络应用中无处不在,比如网上购物.网上买书.新闻app.社交网络.音乐网站.电影网站等等等等,有人的地方 ...

  5. Python基于机器学习方法实现的电影推荐系统

    推荐算法在互联网行业的应用非常广泛,今日头条.美团点评等都有个性化推荐,推荐算法抽象来讲,是一种对于内容满意度的拟合函数,涉及到用户特征和内容特征,作为模型训练所需维度的两大来源,而点击率,页面停留时 ...

  6. 【Machine Learning】决策树案例:基于python的商品购买能力预测系统

    决策树在商品购买能力预测案例中的算法实现 作者:白宁超 2016年12月24日22:05:42 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本 ...

  7. 基于神经网络的embeddding来构建推荐系统

    在之前的博客中,我主要介绍了embedding用于处理类别特征的应用,其实,在学术界和工业界上,embedding的应用还有很多,比如在推荐系统中的应用.本篇博客就介绍了如何利用embedding来构 ...

  8. 基于neighborhood models(item-based) 的个性化推荐系统

    文章主要介绍的是koren 08年发的论文[1],  2.2neighborhood models部分内容(其余部分会陆续补充上来). koren论文中用到netflix 数据集, 过于大, 在普通的 ...

  9. 【转】基于 Kylin 的推荐系统效果评价系统

    OLAP(联机分析处理)是数据仓库的主要应用之一,通过设计维度.度量,我们可以构建星型模型或雪花模型,生成数据多维立方体Cube,基于Cube可以做钻取.切片.旋转等多维分析操作.早在十年前,SQL ...

随机推荐

  1. jvm--工具

    jps (java process status) == ps / top 作用:显示所有运行中的java进程. jstat 作用:查看类装载,内存,垃圾收集,jit编译的信息. jinfo 作用:实 ...

  2. javascript之instanceof

    定义和用法 instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上. 语法: object instanceof construct ...

  3. 模板模式(Template Pattern)

    模板模式(Template Pattern) -- 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. ...

  4. centos yum安装与配置vsFTPd FTP服务器(转)

    vsftpd作为FTP服务器,在Linux系统中是非常常用的.下面我们介绍如何在centos系统上安装vsftp. 什么是vsftpd vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序 ...

  5. CentOS7.9防火墙命令

    CentOS7防火墙命令有变化: CentOS7:   systemctl status firewalld.service     查看防火墙状态 systemctl stop firewalld. ...

  6. Java Swing中文乱码解决方法

    Run As Run Configuration,在Arguments中增加下面这句: -Dfile.encoding=gbk

  7. 如何使用async和await这对组合设计统一的取Access Token的函数

    最近我在使用SAP云平台的机器学习API做和SAP系统的集成,因为SAP Cloud Platform Leonardo上的机器学期API,每次消费时需要传一个Access Token,故在每次实际调 ...

  8. 【SpringMVC】参数绑定

    一.概述 1.3 参数绑定过程 1.2 @RequestParam 二.自定义绑定使用属性编辑器 2.1 使用WebDataBinder(了解) 2.2 使用WebBindingInitializer ...

  9. 支付宝APP支付(基于Java实现支付宝APP支付)

    贴一下支付核心代码,以供后续参考: 业务层 import com.alipay.api.AlipayApiException; import com.alipay.api.AlipayClient; ...

  10. Visual Studio(Year)编辑器调试在IIS发布的Web程序出现错误的解决

    如下图所示: