python处理Movielens数据集(1M)导⼊需要的包
import numpy as np
import pandas as pd
设置常数及参数。⽤户数、物品数与评分总数可以查看⽂件或使⽤python读取数据获得。
n_users = 6040 # ⽤户的总数
n_items = 3952 # 物品的总数
n_all_ratings = 1000209 # 总的评价数
train_ratio = 0.9 # 训练集所占⽐例
初始化所有⽤户的评分矩阵与隐式评分矩阵,以及测试集与训练集的评分矩阵与隐式评分矩阵
ratings = np.zeros((n_users,n_items)) # ⽤户-物品评分矩阵
mask_ratings = np.zeros((n_users,n_items)) # ⽤户-物品隐式评分矩阵
train_ratings = np.zeros((n_users,n_items)) # 训练集⽤户-物品评分矩阵
test_ratings = np.zeros((n_users,n_items)) # 测试集⽤户-物品评分矩阵
train_mask_ratings = np.zeros((n_users,n_items)) #训练集⽤户-物品隐式评分矩阵
test_mask_ratings = np.zeros((n_users,n_items)) #测试集⽤户-物品隐式评分矩阵
将评分顺序随机打乱,划分测试集与训练集。
random_perm_idx = np.random.permutation(n_all_ratings) # 返回⼀个随机排列的序列,⽬的是打乱评分顺序train_idx = random_perm_idx[0:int(n_all_ratings*train_ratio)] # 训练集数据索引
python怎么读取dat文件test_idx = random_perm_idx[int(n_all_ratings*train_ratio):] # 测试集数据索引
获得训练集与测试集的数量
num_train_ratings = len(train_idx) # 训练集评分数据总数
num_test_ratings = len(test_idx) #测试集评分数据总数
print(num_train_ratings)
print(num_test_ratings)
900188
100021
按⾏读取数据
fp = open('./ml-1m/ratings.dat')
lines = fp.readlines() # 按⾏读取评分
获得总的评分矩阵并转换为DataFrame格式进⾏查看
for line in lines:
user, item, rating, time = line.split('::')
user_idx = int(user)-1
item_idx = int(item)-1
ratings[user_idx, item_idx]=int(rating) # 获得评分矩阵
mask_ratings[user_idx, item_idx] = 1 # 获得隐式评分矩阵
pd.DataFrame(ratings).describe() # 转换成DataFrame查看数据
获得训练集评分矩阵以及其隐式评分矩阵
for i in train_idx:
line = lines[i]
user, item, rating, time = line.split('::')
user_idx = int(user)-1
item_idx = int(item)-1
train_ratings[user_idx,item_idx] = int(rating) train_mask_ratings[user_idx,item_idx] = 1
pd.DataFrame(ratings).describe()
获得测试集评分矩阵以及其隐式评分矩阵
for i in test_idx:
line = lines[i]
user, item, rating, time = line.split('::')
user_idx = int(user)-1
item_idx = int(item)-1
test_ratings[user_idx,item_idx] = int(rating) test_mask_ratings[user_idx,item_idx] = 1
pd.DataFrame(test_ratings).describe()
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论