基于评分的商品top-N推荐系统
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推荐系统的更多相关文章
- 【新鲜出炉的个人项目】基于 Flink 的商品推荐系统
FlinkCommodityRecommendationSystem Recs FlinkCommodityRecommendationSystem(基于 Flink 的商品推荐系统) 1. 前言 系 ...
- 文献综述八:基于JAVA的商品网站的研究
一.基本信息 标题:基于JAVA的商品网站的研究 时间:2015 出版源:信息技术 文件分类:对java语言的研究 二.研究背景 本文主要介绍了系统的分析,设计和开发的全部过程. 三.具体内容 文献的 ...
- 文献综述三:基于JSP的商品信息管理系统设计与开发
一.基本信息 标题:基于JSP的商品信息管理系统设计与开发 时间:2015 出版源:Computer Knowledge and Technology 文件分类:jsp技术的系统开发 二.研究背景 通 ...
- 基于卷积神经网络CNN的电影推荐系统
本项目使用文本卷积神经网络,并使用MovieLens数据集完成电影推荐的任务. 推荐系统在日常的网络应用中无处不在,比如网上购物.网上买书.新闻app.社交网络.音乐网站.电影网站等等等等,有人的地方 ...
- Python基于机器学习方法实现的电影推荐系统
推荐算法在互联网行业的应用非常广泛,今日头条.美团点评等都有个性化推荐,推荐算法抽象来讲,是一种对于内容满意度的拟合函数,涉及到用户特征和内容特征,作为模型训练所需维度的两大来源,而点击率,页面停留时 ...
- 【Machine Learning】决策树案例:基于python的商品购买能力预测系统
决策树在商品购买能力预测案例中的算法实现 作者:白宁超 2016年12月24日22:05:42 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本 ...
- 基于神经网络的embeddding来构建推荐系统
在之前的博客中,我主要介绍了embedding用于处理类别特征的应用,其实,在学术界和工业界上,embedding的应用还有很多,比如在推荐系统中的应用.本篇博客就介绍了如何利用embedding来构 ...
- 基于neighborhood models(item-based) 的个性化推荐系统
文章主要介绍的是koren 08年发的论文[1], 2.2neighborhood models部分内容(其余部分会陆续补充上来). koren论文中用到netflix 数据集, 过于大, 在普通的 ...
- 【转】基于 Kylin 的推荐系统效果评价系统
OLAP(联机分析处理)是数据仓库的主要应用之一,通过设计维度.度量,我们可以构建星型模型或雪花模型,生成数据多维立方体Cube,基于Cube可以做钻取.切片.旋转等多维分析操作.早在十年前,SQL ...
随机推荐
- 禁止服务向 eureka 上注册配置文件
### 禁止向注册中心注册服务eureka.client.register-with-eureka=false
- 使用代码浏览WPF控件模版
纯代码创建,不需要创建界面,创建WPF工程后,直接复制代码就可以使用. 当你手头没有Blend,又不记得以下这段代码,但是又想浏览控件模版的时候,就可以直接复制拿来用了. public partial ...
- VS.NET(C#)--2.1认识控件
Web控件 四种控件 1.HTML控件 2.HTML服务器控件 在服务器端执行 3.ASP.NET服务器控件 在服务器端执行 4.用户控件和自定义控件 用户自定义控件在服务器端执行 注意: ...
- MySQL的安装及简单配置
一 .数据库概念 Mysql能干嘛呢? 它就是一款软件,安装在任何一台计算机或者服务器上的时候,只要我告诉它创建一个文件,新增一个数据,删除一个数据它就能帮我去做想要的操作 那我们暂且能不能理解为my ...
- vue 做的tabBar组件
效果如下 调用 <tabbar :selected='selected'></tabbar> 组件 <template> <div class='tabbar ...
- SQLSEVER 同台服务器下不同表 触发器实现数据实时同步
触发器的使用: 1.首先建立两个相同结构的表,两个表明的列的名称不同. student_01 字段 name ; 字段 age ; 字段 class ; student_02 字段 ...
- Flask之Local、LocalStack和LocalProxy
在我们使用Flask以及Werkzeug框架的过程中,经常会遇到如下三个概念:Local.LocalStack和LocalProxy.尤其在学习Flask的Request Context和App Co ...
- Centos7安装教程
1.下载centos7的镜像 到华为云镜像官方网站下载https://mirrors.huaweicloud.com/ 2.创建虚拟机并载入镜像 3.开启虚拟机,正式安装 选择第一项:Install ...
- 基于fastai的分类网络
classify.fastai Classifier based on fastai 欢迎访问:https://github.com/pprp/classify.fastai/ 字符识别分类器-基于f ...
- Spring Boot 2发送邮件手把手图文教程
原文:http://www.itmuch.com/spring-boot/send-email/ 本文基于:Spring Boot 2.1.3,理论支持Spring Boot 2.x所有版本. 最近有 ...