model_selection 包¶
Surprise 提供了各种工具来运行交叉验证过程并搜索预测算法的最佳参数。这里介绍的工具都深受出色的 scikit learn 库的启发。
交叉验证迭代器¶
model_selection.split
模块包含各种交叉验证迭代器。其设计和工具灵感来自强大的 scikit learn。
可用的迭代器包括:
一个基本的交叉验证迭代器。 |
|
重复的 |
|
一个具有随机训练集和测试集的基本交叉验证迭代器。 |
|
交叉验证迭代器,其中每个用户在测试集中恰好有一个评分。 |
|
用于数据集已通过 |
此模块还包含一个用于将数据集分割成训练集和测试集的函数:
将数据集分割成训练集和测试集。 |
- 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。只有当shuffle
为True
时,才使用random_state
。默认值为None
。shuffle (bool) – 是否混洗
split()
方法的data
参数中的评分。混洗不是原地进行的。默认值为True
。
- 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。只有当shuffle
为True
时,才使用random_state
。默认值为None
。min_n_ratings (int) – 训练集中每个用户的最小评分数量。例如,如果
min_n_ratings
是2
,我们可以确定每个用户在训练集中至少有2
个评分(在测试集中有1
个)。其他用户将被丢弃。默认值为0
,因此一些用户(只有一个评分的用户)可能在测试集中而不在训练集中。
- class surprise.model_selection.split.PredefinedKFold[source]¶
用于数据集已通过
load_from_folds
方法加载时的交叉验证迭代器。请参阅用户指南中的示例。
- 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。只有当shuffle
为True
时,才使用random_state
。默认值为None
。shuffle (bool) – 是否混洗
split()
方法的data
参数中的评分。混洗不是原地进行的。默认值为True
。
- 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。只有当shuffle
为True
时,才使用random_state
。默认值为None
。shuffle (bool) – 是否混洗
data
参数中的评分。混洗不是原地进行的。将其设置为 False 会违背此迭代器的目的,但它对于实现train_test_split()
非常有用。默认值为True
。
- 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。只有当shuffle
为True
时,才使用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
,则完全不使用并行计算代码,这对于调试非常有用。对于小于
-1
的n_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_measures
为True
时可用。'fit_time'
:包含每个分割的训练时间(秒)的 numpy 数组。'test_time'
:包含每个分割的测试时间(秒)的 numpy 数组。
- 返回类型:
dict
参数搜索¶
- class surprise.model_selection.search.GridSearchCV(algo_class, param_grid, measures=['rmse', 'mae'], cv=None, refit=False, return_train_measures=False, n_jobs=1, pre_dispatch='2*n_jobs', joblib_verbose=0)[source]¶
GridSearchCV
类通过交叉验证过程计算算法在各种参数组合上的准确度指标。这对于为预测算法找到最佳参数集非常有用。它类似于 scikit-learn 中的 GridSearchCV。请参阅用户指南中的示例。
- 参数:
algo_class (
AlgoBase
) – 要评估的算法类。param_grid (dict) – 字典,其中算法参数作为键,值列表作为值。所有组合都将使用目标算法进行评估。诸如
sim_options
之类的字典参数需要特殊处理,请参阅此说明。measures (list of string) – 要计算的性能指标。允许的名称是在
accuracy
模块中定义的函数名称。默认值为['rmse', 'mae']
。cv (cross-validation iterator, int or
None
) – 确定data
参数如何分割(即如何定义训练集和测试集)。如果传入整数,则使用适当的n_splits
参数使用KFold
。如果是None
,则使用n_splits=5
使用KFold
。refit (bool or str) – 如果为
True
,则使用在measures
的第一个指标上给出最佳平均性能的参数集,在整个数据集上重新拟合算法。可以通过传入字符串(对应于指标名称)使用其他指标。然后,可以使用test()
和predict()
方法。refit
只有当传递给fit()
的data
参数没有通过load_from_folds()
加载时才能使用。默认值为False
。return_train_measures (bool) – 是否计算训练集上的性能指标。如果为
True
,则cv_results
属性也将包含训练集的指标。默认值为False
。n_jobs (int) –
并行训练过程的最大数量。
如果是
-1
,则使用所有 CPU。如果是
1
,则完全不使用并行计算代码,这对于调试非常有用。对于小于
-1
的n_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'
。joblib_verbose (int) – 控制 joblib 的详细程度:值越高,消息越多。
- best_score¶
使用准确度指标作为键,获取在该指标上达到的最佳平均分数。
- 类型:
dict of floats
- best_params¶
使用准确度指标作为键,获取在该指标上(平均)给出最佳准确度结果的参数组合。
- 类型:
dict of dicts
- best_index¶
使用准确度指标作为键,获取可与
cv_results
一起使用的索引,该索引在该指标上(平均)获得了最高的准确度。- 类型:
dict of ints
- predict(*args)¶
在具有找到的最佳参数(根据
refit
参数)的估计器上调用predict()
。请参阅AlgoBase.predict()
。仅当
refit
不为False
时可用。
- test(testset, verbose=False)¶
在具有找到的最佳参数(根据
refit
参数)的估计器上调用test()
。请参阅AlgoBase.test()
。仅当
refit
不为False
时可用。
- class surprise.model_selection.search.RandomizedSearchCV(algo_class, param_distributions, n_iter=10, measures=['rmse', 'mae'], cv=None, refit=False, return_train_measures=False, n_jobs=1, pre_dispatch='2*n_jobs', random_state=None, joblib_verbose=0)[source]¶
RandomizedSearchCV
类通过交叉验证过程计算算法在各种参数组合上的准确度指标。与使用穷举组合方法的 GridSearchCV 不同,RandomizedSearchCV 从参数空间中随机抽样。这对于为预测算法找到最佳参数集非常有用,特别是使用从粗到细的方法时。它类似于 scikit-learn 中的 RandomizedSearchCV。请参阅用户指南中的示例。
- 参数:
algo_class (
AlgoBase
) – 要评估的算法类。param_distributions (dict) – 字典,其中算法参数作为键,分布或要尝试的参数列表作为值。分布必须提供 rvs 方法用于抽样(例如来自 scipy.stats.distributions)。如果给出列表,则均匀抽样。参数将被抽样 n_iter 次。
n_iter (int) – 参数设置被抽样的次数。默认值为
10
。measures (list of string) – 要计算的性能指标。允许的名称是在
accuracy
模块中定义的函数名称。默认值为['rmse', 'mae']
。cv (cross-validation iterator, int or
None
) – 确定data
参数如何分割(即如何定义训练集和测试集)。如果传入整数,则使用适当的n_splits
参数使用KFold
。如果是None
,则使用n_splits=5
使用KFold
。refit (bool or str) – 如果为
True
,则使用在measures
的第一个指标上给出最佳平均性能的参数集,在整个数据集上重新拟合算法。可以通过传入字符串(对应于指标名称)使用其他指标。然后,可以使用test()
和predict()
方法。refit
只有当传递给fit()
的data
参数没有通过load_from_folds()
加载时才能使用。默认值为False
。return_train_measures (bool) – 是否计算训练集上的性能指标。如果为
True
,则cv_results
属性也将包含训练集的指标。默认值为False
。n_jobs (int) –
并行训练过程的最大数量。
如果是
-1
,则使用所有 CPU。如果是
1
,则完全不使用并行计算代码,这对于调试非常有用。对于小于
-1
的n_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'
。random_state (int, RandomState or None) – 用于从可能值的列表中而不是 scipy.stats 分布中进行随机均匀抽样的伪随机数生成器种子。如果是整数,
random_state
是随机数生成器使用的种子。如果是RandomState
实例,random_state
是随机数生成器本身。如果是None
,则随机数生成器是np.random
使用的 RandomState 实例。默认值为None
。joblib_verbose (int) – 控制 joblib 的详细程度:值越高,消息越多。
- best_score¶
使用准确度指标作为键,获取在该指标上达到的最佳平均分数。
- 类型:
dict of floats
- best_params¶
使用准确度指标作为键,获取在该指标上(平均)给出最佳准确度结果的参数组合。
- 类型:
dict of dicts
- best_index¶
使用准确度指标作为键,获取可与
cv_results
一起使用的索引,该索引在该指标上(平均)获得了最高的准确度。- 类型:
dict of ints
- predict(*args)¶
在具有找到的最佳参数(根据
refit
参数)的估计器上调用predict()
。请参阅AlgoBase.predict()
。仅当
refit
不为False
时可用。
- test(testset, verbose=False)¶
在具有找到的最佳参数(根据
refit
参数)的估计器上调用test()
。请参阅AlgoBase.test()
。仅当
refit
不为False
时可用。