我正在尝试创建一个基线模型:具有余弦相似性的KNNBasic(基于用户)。我做了一次列车测试。我将在这里尽可能详细地介绍
评级数据预处理:
sample_clean = sample.drop('Time', axis=1) #dropping time stamp
class MyDataset(dataset.DatasetAutoFolds):
#this function creates a surprise friendly dataset
#this function already has folds built into it for cross-validation
self.raw_sample = [(uid, pid, r, None) for (uid, pid, r) in zip(sample_clean['UserId'], sample_clean['ProductId'], sample_clean['Score'])]
self.reader = reader
然后我安装了我的阅读器
reader = Reader(line_format = 'user item rating', rating_scale=(0,5))
然后,我将示例数据框解析为一个令人惊讶的友好数据集
surprise_sample = MyDataset(sample_clean, reader)
我检查格式:
type(surprise_sample)
我得到的输出是
_main_.MyDataset
我继续制作一列原始_评级,并从样本_clean中提取:
raw_ratings = sample_clean.Score
接下来,我将执行一个运行良好的序列验证拆分
#test data
test_threshold = int(.85*len(sample_clean)
train_sample = sample_clean[:test_threshold]
test_raw_sample = sample_clean[test_thresholds:]
#列车数据
train_threshold = int(.8*len(train_sample))
validation_raw_sample = train_sample[train_threshold:]
train_raw_sample = train_sample[:train_threshold]
然后,我检查列车测试拆分期间是否没有数据丢失:
len(train_raw_sample) + len(test_raw_sample) + len(validation_raw_sample)
#output is 5000 which is what I wanted
我在下面遇到了问题,我正在构建一个基线模型,它是KNNBasic,具有余弦相似性(基于用户)
#cosine similarity
sim_cos = {'name': 'cosine', 'user_based': True}
#instantiate reader
basic_user = knns.KNNBasic(sim_options = sim_cos)
#fit the model
simcos_crossval_user = cross_validate(basic_user, sample_clean, measures=['rmse', 'mae'], cv=3, return_train_measure=True, n_jobs=-1, verbose=True)
最后一行代码似乎不起作用,我得到一个输出错误:
AttributeError: 'DataFrame' object has no attribute 'raw_ratings'
请帮我找出我做错了什么。多谢各位
您可以尝试另一种方法,将自定义数据帧解析为令人惊讶的友好数据集:
列必须对应于用户id、项目id和评级(按顺序):
您可以找到更多详细信息here.
相关问题 更多 >
编程相关推荐