AttributeError: 'DataFrame' object has no attribute 'raw_ratings' Not able to fit KNNBasic Model
AttributeError: 'DataFrame' object has no attribute 'raw_ratings' Not able to fit KNNBasic Model
我正在尝试创建一个基线模型:具有余弦相似性的 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 = Reader(line_format = 'user item rating', rating_scale=(0,5))
然后我将 sample_clean 数据框解析为一个令人惊讶的友好数据集
surprise_sample = MyDataset(sample_clean, reader)
我检查格式:
type(surprise_sample)
我得到了
的输出
_main_.MyDataset
我继续制作一个 raw_ratings 的列并从 sample_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'
请帮我找出我做错了什么。谢谢。
您可以尝试使用另一种方法将自定义数据框解析为友好的数据集:
reader = Reader(line_format = 'user item rating', rating_scale=(0,5))
这些列必须对应于用户 ID、项目 ID 和评分(按此顺序):
data = Dataset.load_from_df(sample_clean [['userId', 'productId', 'Score']], reader)
您可以找到更多详细信息here.
我正在尝试创建一个基线模型:具有余弦相似性的 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 = Reader(line_format = 'user item rating', rating_scale=(0,5))
然后我将 sample_clean 数据框解析为一个令人惊讶的友好数据集
surprise_sample = MyDataset(sample_clean, reader)
我检查格式:
type(surprise_sample)
我得到了
的输出_main_.MyDataset
我继续制作一个 raw_ratings 的列并从 sample_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'
请帮我找出我做错了什么。谢谢。
您可以尝试使用另一种方法将自定义数据框解析为友好的数据集:
reader = Reader(line_format = 'user item rating', rating_scale=(0,5))
这些列必须对应于用户 ID、项目 ID 和评分(按此顺序):
data = Dataset.load_from_df(sample_clean [['userId', 'productId', 'Score']], reader)
您可以找到更多详细信息here.