交叉验证#

sklearn.model_selection.cross_validate(estimator, X, y=None, *, groups=None, scoring=None, cv=None, n_jobs=None, verbose=0, params=None, pre_dispatch='2*n_jobs', return_train_score=False, return_estimator=False, return_indices=False, error_score=nan)[source]#

通过交叉验证评估指标,并记录拟合/评分时间。

更多信息请阅读用户指南

参数:
estimator实现“fit”方法的估计器对象

用于拟合数据的对象。

X形状为 (n_samples, n_features) 的{数组类,稀疏矩阵}

要拟合的数据。例如可以是列表或数组。

y形状为 (n_samples,) 或 (n_samples, n_outputs) 的数组类,默认为 None

在监督学习情况下,尝试预测的目标变量。

groups形状为 (n_samples,) 的数组类,默认为 None

将数据集拆分为训练集/测试集时使用的样本分组标签。仅与“分组” cv 实例(例如,GroupKFold)结合使用。

1.4 版本中的更改: groups 只有在未通过 sklearn.set_config(enable_metadata_routing=True) 启用元数据路由时才能传递。启用路由时,请通过 params 参数传递 groups 以及其他元数据。例如: cross_validate(..., params={'groups': groups})

scoringstr、callable、list、tuple 或 dict,默认为 None

评估交叉验证模型在测试集上性能的策略。如果为 None,则使用估计器的默认评估标准

如果 scoring 表示单个分数,可以使用:

如果 scoring 表示多个分数,可以使用:

  • 唯一字符串的列表或元组;

  • 返回字典的callable,其中键是指标名称,值是指标分数;

  • 字典,其中指标名称为键,callable 为值。

参见指定多个指标进行评估以了解示例。

cvint、交叉验证生成器或可迭代对象,默认为 None

确定交叉验证拆分策略。cv 的可能输入为:

  • None,使用默认的 5 折交叉验证,

  • int,指定 (Stratified)KFold 中的折叠数,

  • CV 分割器,

  • 产生 (train, test) 拆分作为索引数组的可迭代对象。

对于 int/None 输入,如果估计器是分类器并且 y 是二元或多类,则使用 StratifiedKFold。在所有其他情况下,使用 KFold。这些分割器使用 shuffle=False 实例化,因此拆分在调用之间将保持一致。

参考用户指南了解此处可使用的各种交叉验证策略。

0.22 版本中的更改: 如果为 None,则 cv 的默认值从 3 折更改为 5 折。

n_jobsint,默认为 None

并行运行的作业数。估计器的训练和分数计算在交叉验证拆分上并行化。None 表示 1,除非在 joblib.parallel_backend 上下文中。-1 表示使用所有处理器。更多详情请参见词汇表

verboseint,默认为 0

详细程度。

paramsdict,默认为 None

传递给底层估计器的 fit、评分器和 CV 分割器的参数。

1.4 版本中添加。

pre_dispatchint 或 str,默认为 '2*n_jobs'

控制在并行执行期间分派的作业数。减少此数字有助于避免在分派的作业数超过 CPU 可以处理的数目时内存消耗激增。此参数可以是:

  • 一个 int,给出生成的总作业的确切数量

  • 一个 str,给出作为 n_jobs 函数的表达式,如 '2*n_jobs'

return_train_score布尔值,默认为False

是否包含训练分数。计算训练分数用于了解不同的参数设置如何影响过拟合/欠拟合的权衡。但是,在训练集上计算分数可能计算量很大,并且并非严格要求选择产生最佳泛化性能的参数。

0.19版本新增。

0.21版本更改: 默认值已从True更改为False

return_estimator布尔值,默认为False

是否返回在每个分割上拟合的估计器。

0.20版本新增。

return_indices布尔值,默认为False

是否返回为每个分割选择的训练-测试索引。

1.3版本新增。

error_score‘raise’ 或数值,默认为np.nan

如果估计器拟合发生错误,则分配给分数的值。如果设置为'raise',则引发错误。如果给出数值,则会引发FitFailedWarning。

0.20版本新增。

返回:
scores形状为 (n_splits,) 的浮点数组字典

每次交叉验证运行的估计器的分数数组。

返回一个包含每个评分器的分数/时间数组的数组字典。此dict 的可能键为

test_score

每次交叉验证分割的测试分数的得分数组。如果评分参数中有多个评分指标,则test_score中的后缀_score将更改为特定指标,例如test_r2test_auc

train_score

每次交叉验证分割的训练分数的得分数组。如果评分参数中有多个评分指标,则train_score中的后缀_score将更改为特定指标,例如train_r2train_auc。只有当return_train_score参数为True时才可用。

fit_time

每次交叉验证分割在训练集上拟合估计器的时间。

score_time

每次交叉验证分割在测试集上对估计器进行评分的时间。(即使return_train_score设置为True,也不包括在训练集上进行评分的时间)

estimator

每次交叉验证分割的估计器对象。只有当return_estimator参数设置为True时才可用。

indices

每次交叉验证分割的训练/测试位置索引。返回一个字典,其中键是"train""test",关联值是包含索引的整数类型NumPy数组列表。只有当return_indices=True时才可用。

另请参见

交叉验证得分 (cross_val_score)

运行交叉验证以进行单指标评估。

交叉验证预测 (cross_val_predict)

获取来自交叉验证每个分割的预测结果,用于诊断目的。

sklearn.metrics.make_scorer

从性能指标或损失函数创建评分器。

示例

>>> from sklearn import datasets, linear_model
>>> from sklearn.model_selection import cross_validate
>>> from sklearn.metrics import make_scorer
>>> from sklearn.metrics import confusion_matrix
>>> from sklearn.svm import LinearSVC
>>> diabetes = datasets.load_diabetes()
>>> X = diabetes.data[:150]
>>> y = diabetes.target[:150]
>>> lasso = linear_model.Lasso()

使用cross_validate进行单指标评估

>>> cv_results = cross_validate(lasso, X, y, cv=3)
>>> sorted(cv_results.keys())
['fit_time', 'score_time', 'test_score']
>>> cv_results['test_score']
array([0.3315057 , 0.08022103, 0.03531816])

使用cross_validate进行多指标评估(更多信息请参考scoring参数文档)

>>> scores = cross_validate(lasso, X, y, cv=3,
...                         scoring=('r2', 'neg_mean_squared_error'),
...                         return_train_score=True)
>>> print(scores['test_neg_mean_squared_error'])
[-3635.5... -3573.3... -6114.7...]
>>> print(scores['train_r2'])
[0.28009951 0.3908844  0.22784907]