cross_validate#

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

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

更多信息请参阅 用户指南

Parameters:
estimator实现 ‘fit’ 方法的估计器对象

用于拟合数据的对象。

X{array-like, sparse matrix},形状为 (n_samples, n_features)

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

y形状为 (n_samples,) 或 (n_samples, n_outputs) 的 array-like,默认=None

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

groups形状为 (n_samples,) 的 array-like,默认=None

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

Changed in version 1.4: groups 只能在未通过 sklearn.set_config(enable_metadata_routing=True) 启用元数据路由的情况下传递。启用路由时,通过 params 参数与其他元数据一起传递 groups 。例如: cross_validate(..., params={'groups': groups})

scoringstr, callable, list, tuple, 或 dict,默认=None

策略用于评估测试集上交叉验证模型的性能。

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

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

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

  • 返回字典的可调用对象,其中键是指标名称,值是指标分数;

  • 以指标名称为键,可调用对象为值的字典。

参见 指定多个度量标准进行评估 示例。

cvint, cross-validation 生成器或可迭代对象,默认=None

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

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

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

  • CV splitter

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

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

参见 用户指南 以了解可以使用的各种交叉验证策略。

Changed in version 0.22: cv 默认值如果为 None,从 3 折改为 5 折。

n_jobsint,默认=None

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

verboseint,默认=0

详细级别。

fit_paramsdict,默认=None

传递给估计器 fit 方法的参数。

Deprecated since version 1.4: 此参数已弃用,将在 1.6 版本中移除。请使用 params 代替。

paramsdict,默认=None

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

Added in version 1.4.

pre_dispatchint 或 str,默认=’2*n_jobs’

控制并行执行期间分派的作业数。减少此数量在避免分派的作业数超过 CPU 处理能力时内存消耗爆炸的情况下很有用。此参数可以是:

  • 一个整数,给出分派的总作业数

  • 一个字符串,给出 n_jobs 的函数表达式,如 ‘2*n_jobs’

return_train_scorebool,默认=False

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

Added in version 0.19.

Changed in version 0.21: 默认值从 True 改为 False

return_estimatorbool,默认=False

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

Added in version 0.20.

return_indicesbool,默认=False

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

Added in version 1.3.

error_score‘raise’ 或 numeric,默认=np.nan

在估计器拟合过程中发生错误时分配给分数的值。 如果设置为 ‘raise’,则引发错误。 如果给定数值,则引发 FitFailedWarning。

Added in version 0.20.

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

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

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

test_score

每个 cv 拆分的测试分数数组。 test_score 中的后缀 _score 在评分参数中有多个评分指标时会变为特定指标,如 test_r2test_auc

train_score

每个 cv 拆分的训练分数数组。 train_score 中的后缀 _score 在评分参数中有多个评分指标时会变为特定指标,如 train_r2train_auc 。 仅当 return_train_score 参数为 True 时可用。

fit_time

每个 cv 拆分上拟合估计器在训练集上的时间。

score_time

每个 cv 拆分上评分估计器在测试集上的时间。(注意即使 return_train_score 设置为 True ,评分在训练集上的时间也不包括在内)

estimator

每个 cv 拆分上的估计器对象。 仅当 return_estimator 参数设置为 True 时可用。

indices

每个 cv 拆分的训练/测试位置索引。返回一个字典,键为 "train""test" ,关联值为整数类型的 NumPy 数组列表,包含索引。仅当 return_indices=True 时可用。

See also

cross_val_score

为单个指标评估运行交叉验证。

cross_val_predict

获取用于诊断目的的交叉验证每个拆分的预测。

sklearn.metrics.make_scorer

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

Examples

>>> 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]