cross_validate#

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

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

1.4 版本修改: 仅当未通过 sklearn.set_config(enable_metadata_routing=True) 启用元数据路由时,才能传递 groups。当路由启用时,请通过 params 参数将 groups 与其他元数据一起传递。例如:cross_validate(..., params={'groups': groups})

scoringstr、可调用对象、列表、元组或字典,默认为 None

评估 estimator 在交叉验证分割上的性能的策略。

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

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

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

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

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

有关示例,请参见 指定多个评估指标

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

确定交叉验证分割策略。cv 的可能输入有

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

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

  • CV 分割器,

  • 生成 (训练集, 测试集) 分割的迭代器,以索引数组形式。

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

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

0.22 版本修改: 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_scorebool,默认为 False

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

0.19 版本新增。

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

return_estimatorbool,默认为 False

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

0.20 版本新增。

return_indicesbool,默认为 False

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

1.3 版本新增。

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

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

0.20 版本新增。

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

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

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

test_score

每个 CV 分割上的测试分数数组。如果 scoring 参数中存在多个评分指标,test_score 中的后缀 _score 会变为特定的指标,如 test_r2test_auc

train_score

每个 CV 分割上的训练分数数组。如果 scoring 参数中存在多个评分指标,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 时可用。

另请参见

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]