使用Surprise库SVD构建推荐系统:'DatasetAutoFolds'无split属性错误解决
解决Surprise库中
DatasetAutoFolds无split方法的错误 这个错误其实是Surprise库版本更新带来的API变更——旧版本(比如v1.0.6及更早)里的Dataset对象确实有split方法,但在较新的版本(v1.1.0+)中,官方重构了交叉验证的实现逻辑,把数据拆分的功能移到了KFold类里,原来的split方法被移除了,所以你调用data.split()才会抛出AttributeError。
修正后的完整代码示例
from surprise import SVD, Reader, Dataset, KFold import pandas as pd # 读取评分数据 ratings = pd.read_csv("/content/ratings_small.csv") # 初始化Reader,需匹配你的评分范围(示例为1-5,可根据实际数据调整) reader = Reader(rating_scale=(1, 5)) # 从DataFrame加载数据 data = Dataset.load_from_df(ratings[['userId','movieId','rating']], reader) # 用KFold替代原来的split方法,设置5折交叉验证 kf = KFold(n_splits=5) # 遍历每个折叠完成训练与评估 for trainset, testset in kf.split(data): # 初始化并训练SVD模型 model = SVD() model.fit(trainset) # 对测试集进行预测 predictions = model.test(testset) # 可选:计算评估指标(比如RMSE) from surprise import accuracy accuracy.rmse(predictions)
关键说明
- 你看到的旧案例用
split方法,是因为它们基于Surprise的旧版本编写的,如果你非要沿用旧API,可以回退到surprise==1.0.6版本,但更建议适配新API,后续版本修复了不少bug并优化了性能。 KFold类还支持通过random_state参数设置随机种子,保证拆分结果的可复现性。
内容的提问来源于stack exchange,提问作者Chidananda Nayak
相关产品推荐
相关产品推荐

