model_selection 包

Surprise 提供了各种工具来运行交叉验证过程并搜索预测算法的最佳参数。这里介绍的工具都深受出色的 scikit learn 库的启发。

交叉验证迭代器

model_selection.split 模块包含各种交叉验证迭代器。其设计和工具灵感来自强大的 scikit learn。

可用的迭代器包括:

KFold

一个基本的交叉验证迭代器。

RepeatedKFold

重复的 KFold 交叉验证器。

ShuffleSplit

一个具有随机训练集和测试集的基本交叉验证迭代器。

LeaveOneOut

交叉验证迭代器,其中每个用户在测试集中恰好有一个评分。

PredefinedKFold

用于数据集已通过 load_from_folds 方法加载时的交叉验证迭代器。

此模块还包含一个用于将数据集分割成训练集和测试集的函数:

train_test_split

将数据集分割成训练集和测试集。

class surprise.model_selection.split.KFold(n_splits=5, random_state=None, shuffle=True)[source]

一个基本的交叉验证迭代器。

每个折叠都被用作一次测试集,而剩余的 k - 1 个折叠用于训练。

请参阅用户指南中的示例。

参数:
  • n_splits (int) – 折叠的数量。

  • random_state (int, RandomState instance from numpy, or None) – 确定用于确定折叠的 RNG。如果是整数,random_state 将用作新 RNG 的种子。这对于在多次调用 split() 时获得相同的分割非常有用。如果是 RandomState 实例,则使用此实例作为 RNG。如果是 None,则使用来自 numpy 的当前 RNG。只有当 shuffleTrue 时,才使用 random_state。默认值为 None

  • shuffle (bool) – 是否混洗 split() 方法的 data 参数中的评分。混洗不是原地进行的。默认值为 True

split(data)[source]

用于迭代训练集和测试集的生成器函数。

参数:

data (Dataset) – 包含将要被分割成训练集和测试集的评分数据。

返回:

元组 (训练集, 测试集)

class surprise.model_selection.split.LeaveOneOut(n_splits=5, random_state=None, min_n_ratings=0)[source]

交叉验证迭代器,其中每个用户在测试集中恰好有一个评分。

与所有其他交叉验证策略不同,LeaveOneOut 不保证所有折叠都不同,尽管对于大型数据集来说这仍然非常可能。

请参阅用户指南中的示例。

参数:
  • n_splits (int) – 折叠的数量。

  • random_state (int, RandomState instance from numpy, or None) – 确定用于确定折叠的 RNG。如果是整数,random_state 将用作新 RNG 的种子。这对于在多次调用 split() 时获得相同的分割非常有用。如果是 RandomState 实例,则使用此实例作为 RNG。如果是 None,则使用来自 numpy 的当前 RNG。只有当 shuffleTrue 时,才使用 random_state。默认值为 None

  • min_n_ratings (int) – 训练集中每个用户的最小评分数量。例如,如果 min_n_ratings2,我们可以确定每个用户在训练集中至少有 2 个评分(在测试集中有 1 个)。其他用户将被丢弃。默认值为 0,因此一些用户(只有一个评分的用户)可能在测试集中而不在训练集中。

split(data)[source]

用于迭代训练集和测试集的生成器函数。

参数:

data (Dataset) – 包含将要被分割成训练集和测试集的评分数据。

返回:

元组 (训练集, 测试集)

class surprise.model_selection.split.PredefinedKFold[source]

用于数据集已通过 load_from_folds 方法加载时的交叉验证迭代器。

请参阅用户指南中的示例。

split(data)[source]

用于迭代训练集和测试集的生成器函数。

参数:

data (Dataset) – 包含将要被分割成训练集和测试集的评分数据。

返回:

元组 (训练集, 测试集)

class surprise.model_selection.split.RepeatedKFold(n_splits=5, n_repeats=10, random_state=None)[source]

重复的 KFold 交叉验证器。

在每次重复中使用不同的随机化重复 KFold n 次。

请参阅用户指南中的示例。

参数:
  • n_splits (int) – 折叠的数量。

  • n_repeats (int) – 重复的次数。

  • random_state (int, RandomState instance from numpy, or None) – 确定用于确定折叠的 RNG。如果是整数,random_state 将用作新 RNG 的种子。这对于在多次调用 split() 时获得相同的分割非常有用。如果是 RandomState 实例,则使用此实例作为 RNG。如果是 None,则使用来自 numpy 的当前 RNG。只有当 shuffleTrue 时,才使用 random_state。默认值为 None

  • shuffle (bool) – 是否混洗 split() 方法的 data 参数中的评分。混洗不是原地进行的。默认值为 True

split(data)[source]

用于迭代训练集和测试集的生成器函数。

参数:

data (Dataset) – 包含将要被分割成训练集和测试集的评分数据。

返回:

元组 (训练集, 测试集)

class surprise.model_selection.split.ShuffleSplit(n_splits=5, test_size=0.2, train_size=None, random_state=None, shuffle=True)[source]

一个具有随机训练集和测试集的基本交叉验证迭代器。

与所有其他交叉验证策略不同,随机分割不保证所有折叠都不同,尽管对于大型数据集来说这仍然非常可能。

请参阅用户指南中的示例。

参数:
  • n_splits (int) – 折叠的数量。

  • test_size (float or int None) – 如果是浮点数,表示包含在测试集中的评分比例。如果是整数,表示测试集中评分的绝对数量。如果是 None,则值设置为训练集大小的补集。默认值为 .2

  • train_size (float or int or None) – 如果是浮点数,表示包含在训练集中的评分比例。如果是整数,表示训练集中评分的绝对数量。如果是 None,则值设置为测试集大小的补集。默认值为 None

  • random_state (int, RandomState instance from numpy, or None) – 确定用于确定折叠的 RNG。如果是整数,random_state 将用作新 RNG 的种子。这对于在多次调用 split() 时获得相同的分割非常有用。如果是 RandomState 实例,则使用此实例作为 RNG。如果是 None,则使用来自 numpy 的当前 RNG。只有当 shuffleTrue 时,才使用 random_state。默认值为 None

  • shuffle (bool) – 是否混洗 data 参数中的评分。混洗不是原地进行的。将其设置为 False 会违背此迭代器的目的,但它对于实现 train_test_split() 非常有用。默认值为 True

split(data)[source]

用于迭代训练集和测试集的生成器函数。

参数:

data (Dataset) – 包含将要被分割成训练集和测试集的评分数据。

返回:

元组 (训练集, 测试集)

surprise.model_selection.split.train_test_split(data, test_size=0.2, train_size=None, random_state=None, shuffle=True)[source]

将数据集分割成训练集和测试集。

请参阅用户指南中的示例。

注意:此函数不能用作交叉验证迭代器。

参数:
  • data (Dataset) – 要分割成训练集和测试集的数据集。

  • test_size (float or int None) – 如果是浮点数,表示包含在测试集中的评分比例。如果是整数,表示测试集中评分的绝对数量。如果是 None,则值设置为训练集大小的补集。默认值为 .2

  • train_size (float or int or None) – 如果是浮点数,表示包含在训练集中的评分比例。如果是整数,表示训练集中评分的绝对数量。如果是 None,则值设置为测试集大小的补集。默认值为 None

  • random_state (int, RandomState instance from numpy, or None) – 确定用于确定折叠的 RNG。如果是整数,random_state 将用作新 RNG 的种子。这对于在多次调用 split() 时获得相同的分割非常有用。如果是 RandomState 实例,则使用此实例作为 RNG。如果是 None,则使用来自 numpy 的当前 RNG。只有当 shuffleTrue 时,才使用 random_state。默认值为 None

  • shuffle (bool) – 是否混洗 data 参数中的评分。混洗不是原地进行的。默认值为 True

交叉验证

surprise.model_selection.validation.cross_validate(algo, data, measures=['rmse', 'mae'], cv=None, return_train_measures=False, n_jobs=1, pre_dispatch='2*n_jobs', verbose=False)[source]

为给定算法运行交叉验证过程,并报告准确度指标和计算时间。

请参阅用户指南中的示例。

参数:
  • algo (AlgoBase) – 要评估的算法。

  • data (Dataset) – 用于评估算法的数据集。

  • measures (list of string) – 要计算的性能指标。允许的名称是在 accuracy 模块中定义的函数名称。默认值为 ['rmse', 'mae']

  • cv (cross-validation iterator, int or None) – 确定 data 参数如何分割(即如何定义训练集和测试集)。如果传入整数,则使用适当的 n_splits 参数使用 KFold。如果是 None,则使用 n_splits=5 使用 KFold

  • return_train_measures (bool) – 是否计算训练集上的性能指标。默认值为 False

  • n_jobs (int) –

    并行评估的最大折叠数量。

    • 如果是 -1,则使用所有 CPU。

    • 如果是 1,则完全不使用并行计算代码,这对于调试非常有用。

    • 对于小于 -1n_jobs,使用 (n_cpus + n_jobs + 1) 个 CPU。例如,当 n_jobs = -2 时,除一个 CPU 外,所有 CPU 都被使用。

    默认值为 1

  • pre_dispatch (int or string) –

    控制并行执行期间分派的任务数量。当分派的任务多于 CPU 能处理的任务时,减少此数量有助于避免内存消耗爆炸。此参数可以是:

    • None,在这种情况下,所有任务都会立即创建和生成。对于轻量级且运行快速的任务,可以使用此设置以避免由于按需生成任务造成的延迟。

    • 一个整数,给出要生成的任务总数的精确数量。

    • 一个字符串,给出与 n_jobs 相关的表达式,例如 '2*n_jobs'

    默认值为 '2*n_jobs'

  • verbose (int) – 如果为 True,则打印每个分割的准确度指标以及训练和测试时间。还会报告所有分割的平均值和标准差。默认值为 False:不打印任何内容。

返回:

一个包含以下键的字典:

  • 'test_*',其中 * 对应于小写准确度指标,例如 'test_rmse':包含每个测试集的准确度值的 numpy 数组。

  • 'train_*',其中 * 对应于小写准确度指标,例如 'train_rmse':包含每个训练集的准确度值的 numpy 数组。仅当 return_train_measuresTrue 时可用。

  • 'fit_time':包含每个分割的训练时间(秒)的 numpy 数组。

  • 'test_time':包含每个分割的测试时间(秒)的 numpy 数组。

返回类型:

dict