使用Surprise库计算RMSE时出现'DataFrame'无global_mean属性错误
错误产生原因
- Surprise库的
fit()方法不支持直接传入Pandas DataFrame类型的训练数据,仅支持接收Surprise自定义的Trainset类实例。你直接读取CSV得到的DataFrame对象没有内置global_mean等Surprise算法要求的属性,因此触发属性缺失报错。
解决方法
你需要先将Pandas格式的训练、测试数据集转换为Surprise可识别的格式,具体修改后的代码如下:
import pandas as pd from surprise import SVD, accuracy from surprise import Dataset from surprise.reader import Reader # 读取原始CSV文件 trainset_df = pd.read_csv('drive/MyDrive/trainrating.csv') testset_df = pd.read_csv('drive/MyDrive/testrating.csv') # 定义Reader,rating_scale参数填你实际使用的评分上下限,示例为1到5分 reader = Reader(rating_scale=(1, 5)) # 将训练集DataFrame转换为Surprise Dataset格式,替换中括号内为你实际的用户ID、物品ID、评分对应的列名 train_dataset = Dataset.load_from_df(trainset_df[['user_id', 'item_id', 'rating']], reader) # 构建Surprise要求的Trainset实例 trainset = train_dataset.build_full_trainset() # 将测试集转换为Surprise test方法要求的格式:元素为(用户ID, 物品ID, 真实评分)的元组列表 testset = list(testset_df[['user_id', 'item_id', 'rating']].itertuples(index=False, name=None)) # 原有训练、评估代码可正常运行 algo = SVD(n_factors=factors, n_epochs=epochs, lr_all=lr_value, reg_all=reg_value) predictions = algo.fit(trainset).test(testset) accuracy.rmse(predictions)
内容的提问来源于stack exchange,提问作者mimi acrs
相关产品推荐
相关产品推荐

