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数据集的功能,这是推荐系统模型开发中非常重要的基础步骤。

相关文章
|
4月前
|
Python
|
5月前
|
算法 Python
我们需要一个简单的Python脚本来作为示例。假设我们有一个名为`hello_world.py`的脚本,
我们需要一个简单的Python脚本来作为示例。假设我们有一个名为`hello_world.py`的脚本,
|
7月前
|
Python
解释Python中的ABC(Abstract Base Classes)是什么,如何使用它们?
【2月更文挑战第4天】【2月更文挑战第8篇】解释Python中的ABC(Abstract Base Classes)是什么,如何使用它们?
704 2
|
7月前
|
存储 Python
解释Python中的`__dict__`属性的作用。
【2月更文挑战第3天】【2月更文挑战第7篇】
50 2
|
7月前
|
Python
解释Python中的`__init__`和`__new__`方法的区别。
解释Python中的`__init__`和`__new__`方法的区别。
41 3
|
程序员 开发者 Python
#PY小贴士# py2 和 py3 的差别到底有多大?
虽然结论已经很明确,但我还是想客观地说一句:对于学习者来说,学 py2 还是 py3,真的没有太大差别。之所以这会成为一个问题
|
机器学习/深度学习 测试技术 TensorFlow
dataset.py代码解释
这段代码主要定义了三个函数来创建 TensorFlow 数据集对象,这些数据集对象将被用于训练、评估和推断神经网络模型。
139 0
|
7月前
|
索引 Python
什么是Python中的魔法方法(Magic Methods)?给出一些例子。
什么是Python中的魔法方法(Magic Methods)?给出一些例子。
57 0
|
机器学习/深度学习 JSON 数据格式
YOLOv5源码逐行超详细注释与解读(4)——验证部分val(test).py
YOLOv5源码逐行超详细注释与解读(4)——验证部分val(test).py
1816 1
YOLOv5源码逐行超详细注释与解读(4)——验证部分val(test).py
|
机器学习/深度学习 搜索推荐 TensorFlow
inference.py的代码解释
这是一个 Python 脚本,它用于导出经过训练的模型,使其可以在生产环境中进行推理。该脚本首先使用 TensorFlow 的 flags 定义了一些参数,如模型版本号、模型路径、输出目录等等。然后,它创建了一个名为 inference_graph 的 TensorFlow 图,并定义了一个 InferenceModel,该模型用于从输入数据中推断评级。
478 0