【问题标题】:How to split dataset and cross-validate in Surprise?如何在 Surprise 中拆分数据集和交叉验证?
【发布时间】:2020-08-19 21:07:21
【问题描述】:

我在下面写了以下代码:

from surprise.model_selection import cross_validate

cross_validate(algo,dataset,measures=['RMSE', 'MAE'],cv=5, verbose=False, n_jobs=-1)

但是当我这样做时:(注意训练集是在 cross_validate 中传递的,而不是整个数据集)

from surprise.model_selection import train_test_split
trainset, testset = train_test_split(dataset, test_size=test_size)
cross_validate(algo, trainset, measures=['RMSE', 'MAE'],cv=5, verbose=False, n_jobs=-1)

它给出了以下错误:

AttributeError: 'Trainset' object has no attribute 'raw_ratings'

我查了一下 Surprise documentation 表示 Trainset 对象与数据集对象不同,这是有道理的。

但是,文档没有说明如何将训练集转换为数据集。

我的问题是: 1. 是否可以将 Surprise Trainset 转换为 Surprise Dataset? 2. 如果不是,训练测试分割整个数据集并交叉验证的正确方法是什么?

【问题讨论】:

    标签: python-3.x dataset cross-validation recommendation-engine train-test-split


    【解决方案1】:

    我相信trainset 不适合交叉验证。 Dataset 用于交叉验证。如果你打印你的数据集print(dataset),它会给出:

    <surprise.dataset.DatasetAutoFolds object at 0x7fe7fc06cd50>
    

    已配置为自动交叉验证。

    您从train_test_split 获得的trainset 不用于交叉验证。你必须运行.fit 方法。

    algo.fit(trainset)
    

    如果您想在您的 trainset 上使用交叉验证,我相信您必须先对您的原始数据执行 train_test_split(通过 sklearn?),然后才能使用 reader 转换它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      • 2011-04-10
      • 2021-09-17
      • 2018-07-20
      • 2021-12-16
      • 2016-04-13
      • 2020-03-08
      相关资源
      最近更新 更多