这可能是你看到最详细的NCF代码讲解(1)数据处理篇
最近看了一圈技术栈,感觉无论是自然语言处理或者说是计算机视觉,网上都有一大堆成体系的教学可供参考。但是反观推荐算法这个方向却是寥寥无几。写这篇文章出于两个目的:1.巩固自己的学习,2.对外输出所学。
数据集
何向南老师github:
https://github.com/hexiangnan/neural_collaborative_filtering
我们先看一下数据集组成。
然后今天说的是 load_dataset做了什么事情。
先上代码:
导包
import pandas as pd
import numpy as np
import math
from collections import defaultdict
import heapq
import scipy.sparse as sp
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.utils.data
import torch.backends.cudnn as cudnn
import os
载入数据。
def load_dataset(test_num=100):train_data = pd.read_csv("./ncf_data/ml-1m.train.rating", \sep='\t', header=None, names=['user', 'item'], \usecols=[0, 1], dtype={0: np.int32, 1: np.int32})user_num = train_data['user'].max() + 1item_num = train_data['item'].max() + 1train_data = train_data.values.tolist()#load ratings as a dok matrixtrain_mat = sp.dok_matrix((user_num,item_num),dtype=np.float32)for x in train_data:train_mat[x[0], x[1]] = 1.0 test_data = []with open("/data/fjsdata/ctKngBase/ml/ml-1m.test.negative", 'r') as fd:line = fd.readline()while line != None and line != '':arr = line.split('\t')u = eval(arr[0])[0]test_data.append([u, eval(arr[0])[1]])#one postive itemfor i in arr[1:]:test_data.append([u, int(i)]) #99 negative itemsline = fd.readline()return train_data, test_data, user_num, item_num, train_mat
先说一下 ml-1m.train.rating 文件
这个文件有列,分别是user,item,评分,时间戳(这个我也记不清是不是了)。
#load ratings as a dok matrixtrain_mat = sp.dok_matrix((user_num,item_num),dtype=np.float32)for x in train_data:train_mat[x[0], x[1]] = 1.0
上面这段代码是把所有打分交互过的用户,项目,组成一个矩阵,数据结构是这个样子的:(User,Item):1
这里补充一下,哪怕是用户打分只有1分,对应字典也是1.0
如图:
处理test_data
先看一下数据格式:
这里说明一下,由于作者在paper中没有明确说明(也可能是我没仔细看)
这个元组里面是用户项目交互,元组外面的一堆是未交互
所以在这里我们代码意思是把元组拿出来,作为积极,剩下的u对应下面这一串未交互的为消极。
test_data = []with open("./ncf_data/ml-1m.test.negative", 'r') as fd:line = fd.readline()while line != None and line != '':arr = line.split('\t')u = eval(arr[0])[0]test_data.append([u, eval(arr[0])[1]])#one postive itemfor i in arr[1:]:test_data.append([u, int(i)]) #99 negative itemsline = fd.readline()
看一下数据结构:
好了今天就到这吧。
博主才疏学浅,如有错误请指正。
这可能是你看到最详细的NCF代码讲解(1)数据处理篇相关推荐
- 详细的线程池讲解,手写C与C++版本
详细的线程池讲解,手写C与C++版本 在此感谢苏丙榅的教程讲的很详细,我看了他的C版本教程,对线程池有了深刻理解,手写了C版本,并自主改了C++版本. 线程池是消费者生产者模型的其中之一.这里面的线程 ...
- PE格式详细讲解4 - 系统篇04|解密系列
PE格式详细讲解4 - 系统篇04 让编程改变世界 Change the world by program 到此为止,小甲鱼和大家已经学了许多关于 DOS header 和 PE header 的 ...
- PE格式详细讲解1 - 系统篇01|解密系列
PE格式详细讲解1 - 系统篇01 让编程改变世界 Change the world by program 由于时间关系,这里只整理出必要的课件内容,详细请下载具体课件和详细讲解视频. [codesy ...
- PE格式详细讲解11 - 系统篇11|解密系列
PE格式详细讲解11 - 系统篇11 让编程改变世界 Change the world by program 今天我们来谈谈资源部分,资源部分可以说是 PE 文件所有结构中,最复杂的一部分,也最让 ...
- python contains类似函数_五步教会你用python爬虫神器PyQuery!(内含详细步骤和代码)...
前言: 今天为大家带来的内容,是五步教会你用python爬虫神器PyQuery!(内含详细步骤和代码),在这里还是要啰嗦下,为了有更好的观赏性,大部分代码用图片的方式呈现出来!喜欢的话不忘点赞关注不迷 ...
- 一个很详细的web.xml讲解(转)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC " ...
- 超级详细备注的代码:Python帮助您高效通过英语六级考试
超级详细备注的代码:Python帮助您高效通过各种英语考试 标题:限时免费|领取大学英语六级考试葵花宝典 联系小编,获取源码和30份六级真题. # -*- coding:utf-8 -*-#作者:公众 ...
- 技术干货实战(4)- 分布式集群部署模式下Nginx如何实现用户登录Session共享(含详细配置与代码实战)
原文链接:技术干货实战(4)- 分布式集群部署模式下Nginx如何实现用户登录Session共享(含详细配置与代码实战) 最近有小伙伴催更,让debug多写点技术干货,以便多学习.巩固一些技能:没办法 ...
- 【2022年华为杯数学建模E题赛后总结加思路详细介绍配代码----10月11号写的总结】
提示:下文将介绍2022年华为杯数学建模E题赛后总结加思路详细介绍配代码 傻逼队友,傻逼队友,傻逼队友一定要看好人在进行组队,这是劝告. 这里有几点总结进行描述: 第一,图一定要尽量多,对图的解释要多 ...
最新文章
- 解决SSH连接Linux超时自动断开
- NOIP模拟题——来自风平浪静的明天
- 三刷进博 | 跨界直播,组团参展,施耐德电气有备而来!
- MySQL为关联表添加数据
- JVM性能调优监控工具总结
- config设置源 使用pip_python pip源配置
- Perl IDE之Perl Express和Eclipse+EPIC+PadWalker
- pow计算x的y次方
- C++设计模式之Facade模式(外观模式)
- android数据绑定_Android数据绑定
- java final关键字
- 线性代数---二阶行列式
- 中国科学院大学2019年高等代数考研试题
- 网课python程序设计答案_中国大学MOOCPython程序设计网课答案
- es文件无法找到局域网服务器,手机ES文件管理器局域网连接电脑WIN10,访问电脑文件...
- m3u8视频下载和转码mp4
- mysql 浮点类_MySQL浮点类型总结
- (十三:2020.08.28)CVPR 2015 追踪之论文纲要(译)
- Config.h头文件
- 遍历Python字典