最近看了一圈技术栈,感觉无论是自然语言处理或者说是计算机视觉,网上都有一大堆成体系的教学可供参考。但是反观推荐算法这个方向却是寥寥无几。写这篇文章出于两个目的: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)数据处理篇相关推荐

  1. 详细的线程池讲解,手写C与C++版本

    详细的线程池讲解,手写C与C++版本 在此感谢苏丙榅的教程讲的很详细,我看了他的C版本教程,对线程池有了深刻理解,手写了C版本,并自主改了C++版本. 线程池是消费者生产者模型的其中之一.这里面的线程 ...

  2. PE格式详细讲解4 - 系统篇04|解密系列

    PE格式详细讲解4 - 系统篇04 让编程改变世界 Change the world by program   到此为止,小甲鱼和大家已经学了许多关于 DOS header 和 PE header 的 ...

  3. PE格式详细讲解1 - 系统篇01|解密系列

    PE格式详细讲解1 - 系统篇01 让编程改变世界 Change the world by program 由于时间关系,这里只整理出必要的课件内容,详细请下载具体课件和详细讲解视频. [codesy ...

  4. PE格式详细讲解11 - 系统篇11|解密系列

    PE格式详细讲解11 - 系统篇11 让编程改变世界 Change the world by program   今天我们来谈谈资源部分,资源部分可以说是 PE 文件所有结构中,最复杂的一部分,也最让 ...

  5. python contains类似函数_五步教会你用python爬虫神器PyQuery!(内含详细步骤和代码)...

    前言: 今天为大家带来的内容,是五步教会你用python爬虫神器PyQuery!(内含详细步骤和代码),在这里还是要啰嗦下,为了有更好的观赏性,大部分代码用图片的方式呈现出来!喜欢的话不忘点赞关注不迷 ...

  6. 一个很详细的web.xml讲解(转)

    <?xml version="1.0" encoding="UTF-8"?>  <!DOCTYPE web-app PUBLIC " ...

  7. 超级详细备注的代码:Python帮助您高效通过英语六级考试

    超级详细备注的代码:Python帮助您高效通过各种英语考试 标题:限时免费|领取大学英语六级考试葵花宝典 联系小编,获取源码和30份六级真题. # -*- coding:utf-8 -*-#作者:公众 ...

  8. 技术干货实战(4)- 分布式集群部署模式下Nginx如何实现用户登录Session共享(含详细配置与代码实战)

    原文链接:技术干货实战(4)- 分布式集群部署模式下Nginx如何实现用户登录Session共享(含详细配置与代码实战) 最近有小伙伴催更,让debug多写点技术干货,以便多学习.巩固一些技能:没办法 ...

  9. 【2022年华为杯数学建模E题赛后总结加思路详细介绍配代码----10月11号写的总结】

    提示:下文将介绍2022年华为杯数学建模E题赛后总结加思路详细介绍配代码 傻逼队友,傻逼队友,傻逼队友一定要看好人在进行组队,这是劝告. 这里有几点总结进行描述: 第一,图一定要尽量多,对图的解释要多 ...

最新文章

  1. 解决SSH连接Linux超时自动断开
  2. NOIP模拟题——来自风平浪静的明天
  3. 三刷进博 | 跨界直播,组团参展,施耐德电气有备而来!
  4. MySQL为关联表添加数据
  5. JVM性能调优监控工具总结
  6. config设置源 使用pip_python pip源配置
  7. Perl IDE之Perl Express和Eclipse+EPIC+PadWalker
  8. pow计算x的y次方
  9. C++设计模式之Facade模式(外观模式)
  10. android数据绑定_Android数据绑定
  11. java final关键字
  12. 线性代数---二阶行列式
  13. 中国科学院大学2019年高等代数考研试题
  14. 网课python程序设计答案_中国大学MOOCPython程序设计网课答案
  15. es文件无法找到局域网服务器,手机ES文件管理器局域网连接电脑WIN10,访问电脑文件...
  16. m3u8视频下载和转码mp4
  17. mysql 浮点类_MySQL浮点类型总结
  18. (十三:2020.08.28)CVPR 2015 追踪之论文纲要(译)
  19. Config.h头文件
  20. 遍历Python字典

热门文章

  1. 让人懵逼的宏定义赋值
  2. 西方经济学微观部分中的英文字母缩写
  3. 将Unity虚拟相机视角画面显示在一个平面上
  4. 3dmax最全选择方式讲解
  5. 云擎未来 万象共生:2023移动云万象生态峰会来袭
  6. 企业微信hook接口,协议开发,群操作功能教程
  7. Python报错:PermissionError: [Errno 13] Permission denied解决方案详解
  8. 我的世界bc端mysql_[BC端简介] BungeeCord跨服群组简介
  9. Python爬虫:和我一起学习scrapy(三)
  10. 【算法】最长递增子序列问题