You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 11:08:12