preprocess_data.py代码解释

简介: 循环遍历每个用户,对于每个用户,提取其对电影的评分。创建一个与所有电影数量相同的评分数组,将相应的评分放置在数组的正确位置。如果该用户没有评分电影,则跳过该用户。返回所有用户的评分数组列表。
import pandas as pd
import numpy as np
import gc
import os
from pathlib import Path
p = Path(__file__).parents[1]
ROOT_DIR=os.path.abspath(os.path.join(p, '..', 'data/raw/'))
def convert(data, num_users, num_movies):
    ''' Making a User-Movie-Matrix'''
    new_data=[]
    for id_user in range(1, num_users+1):
        id_movie=data[:,1][data[:,0]==id_user]
        id_rating=data[:,2][data[:,0]==id_user]
        ratings=np.zeros(num_movies, dtype=np.uint32)
        ratings[id_movie-1]=id_rating
        if sum(ratings)==0:
            continue
        new_data.append(ratings)
        del id_movie
        del id_rating
        del ratings
    return new_data
def get_dataset_1M():
    ''' For each train.dat and test.dat making a User-Movie-Matrix'''
    gc.enable()
    training_set=pd.read_csv(ROOT_DIR+'/ml-1m/train.dat', sep='::', header=None, engine='python', encoding='latin-1')
    training_set=np.array(training_set, dtype=np.uint32)
    test_set=pd.read_csv(ROOT_DIR+'/ml-1m/test.dat', sep='::', header=None, engine='python', encoding='latin-1')
    test_set=np.array(test_set, dtype=np.uint32)
    num_users=int(max(max(training_set[:,0]), max(test_set[:,0])))
    num_movies=int(max(max(training_set[:,1]), max(test_set[:,1])))
    training_set=convert(training_set,num_users, num_movies)
    test_set=convert(test_set,num_users, num_movies)
    return training_set, test_set
def _get_dataset():
    return get_dataset_1M()


该代码实现了一个函数get_dataset_1M(),它用于读取一个基于MovieLens 1M数据集的训练集和测试集,并将它们转换为用户-电影评分矩阵。具体来说,代码执行以下操作:


  1. 读取基于MovieLens 1M数据集的训练集和测试集,其路径为ROOT_DIR+'/ml-1m/train.dat'ROOT_DIR+'/ml-1m/test.dat'
  2. 将训练集和测试集分别存储为numpy数组类型,使用数据类型np.uint32
  3. 计算用户和电影的数量,通过查找最大的用户ID和电影ID来实现。
  4. 使用convert()函数将训练集和测试集转换为用户-电影评分矩阵,其中convert()函数实现了

  5. 以下操作:
  1. 循环遍历每个用户,对于每个用户,提取其对电影的评分。
  2. 创建一个与所有电影数量相同的评分数组,将相应的评分放置在数组的正确位置。
  3. 如果该用户没有评分电影,则跳过该用户。
  4. 返回所有用户的评分数组列表。
  1. 返回训练集和测试集的用户-电影评分矩阵。

另外,还定义了一个函数_get_dataset(),其作用是返回get_dataset_1M()函数的结果。


代码中的gc.enable()是Python中的垃圾回收机制,可以在代码运行时自动释放内存。p = Path(__file__).parents[1]获取当前脚本的上一级目录,然后使用该路径来构造ROOT_DIR,该变量是用来存储MovieLens 1M数据集的路径。


函数convert()实现了将训练集和测试集转换为用户-电影评分矩阵的过程。具体来说,该函数先循环遍历所有的用户,对于每个用户,提取其对电影的评分。然后,创建一个与所有电影数量相同的评分数组,将相应的评分放置在数组的正确位置。如果该用户没有评分电影,则跳过该用户。最后,将所有用户的评分数组列表返回。


函数_get_dataset()返回get_dataset_1M()函数的结果,这意味着它将返回MovieLens 1M数据集的用户-电影评分矩阵。


get_dataset_1M()函数实现了从文件中读取MovieLens 1M数据集,将其转换为用户-电影评分矩阵,并返回训练集和测试集。具体来说,该函数使用pandas库中的read_csv函数读取训练集和测试集文件,并将其存储在名为training_settest_setDataFrame中。然后,这两个数据集被转换为numpy数组,以便进行进一步处理。


在获取训练集和测试集后,该函数确定用户和电影的数量,以便在后续处理中创建适当大小的评分矩阵。使用convert()函数将训练集和测试集转换为用户-电影评分矩阵。最后,训练集和测试集被返回,以便可以使用它们进行模型训练和测试。


该代码提供了构建输入管道、读取和处理MovieLens 1M数据集的功能,这是推荐系统模型开发中非常重要的基础步骤。

相关文章
|
6月前
|
Python
Python 关于模块的几点介绍 。和。。和__all__和__main___和__file__
用来定义我们导出的内容可以有哪些的一个编码方式
20 0
|
3月前
|
Python
解释Python中的ABC(Abstract Base Classes)是什么,如何使用它们?
【2月更文挑战第4天】【2月更文挑战第8篇】解释Python中的ABC(Abstract Base Classes)是什么,如何使用它们?
|
3月前
|
索引 Python
什么是Python中的魔法方法(Magic Methods)?给出一些例子。
什么是Python中的魔法方法(Magic Methods)?给出一些例子。
|
4月前
|
索引
yolov5--detect.py --v5.0版本-最新代码详细解释-2021-6-29号更新
yolov5--detect.py --v5.0版本-最新代码详细解释-2021-6-29号更新
50 0
yolov5--detect.py --v5.0版本-最新代码详细解释-2021-6-29号更新
|
10月前
|
程序员 开发者 Python
#PY小贴士# py2 和 py3 的差别到底有多大?
虽然结论已经很明确,但我还是想客观地说一句:对于学习者来说,学 py2 还是 py3,真的没有太大差别。之所以这会成为一个问题
|
6月前
|
Python
Python用于解析和修改文本数据-pyparsing模块教程
Python用于解析和修改文本数据-pyparsing模块教程
78 0
|
机器学习/深度学习 测试技术 TensorFlow
dataset.py代码解释
这段代码主要定义了三个函数来创建 TensorFlow 数据集对象,这些数据集对象将被用于训练、评估和推断神经网络模型。
|
9月前
|
机器学习/深度学习 JSON 数据格式
YOLOv5源码逐行超详细注释与解读(4)——验证部分val(test).py
YOLOv5源码逐行超详细注释与解读(4)——验证部分val(test).py
940 0
YOLOv5源码逐行超详细注释与解读(4)——验证部分val(test).py
|
机器学习/深度学习 数据采集 搜索推荐
training.py的代码解释
labels、test_loss_op 和 mae_ops 计算模型的性能指标。最后,我们输出当前 epoch 的训练损失、测试损失和平均绝对误差(MAE),并保存模型参数(如果 MAE 小于 0.9)。 整个代码的目的是使用协同过滤算法建立电影推荐系统的模型,训练模型并计算模型的性能指标。
|
Serverless
train_test_split.py代码解释
这段代码用于将MovieLens 1M数据集的评分数据划分为训练集和测试集。 • 首先,使用Path库获取当前文件的父级目录,也就是项目根目录。 • 接着,定义输出训练集和测试集文件的路径。
120 0