cross_val_score#

sklearn.model_selection.cross_val_score(estimator, X, y=None, *, groups=None, scoring=None, cv=None, n_jobs=None, verbose=0, params=None, pre_dispatch='2*n_jobs', error_score=nan)[源]#

通过交叉验证评估分数。

用户指南中阅读更多内容。

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

用于拟合数据的对象。

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

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

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

在监督学习中尝试预测的目标变量。

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

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

1.4 版中的变更: 如果未通过sklearn.set_config(enable_metadata_routing=True)启用元数据路由,则只能传递groups。当路由启用时,请通过params参数与其他元数据一起传递groups。例如:cross_val_score(..., params={'groups': groups})

scoringstr 或可调用对象,默认为 None

用于评估估计器在交叉验证划分上的性能的策略。

与在cross_validate中使用scoring类似,但只允许使用单个指标。

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

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

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

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

  • 交叉验证分割器,

  • 一个可迭代对象,生成 (训练集,测试集) 划分作为索引数组。

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

有关可在此处使用的各种交叉验证策略,请参阅用户指南

0.22 版中的变更: cv的默认值(如果为None)从 3 折更改为 5 折。

n_jobsint,默认为 None

并行运行的作业数。估计器训练和分数计算在交叉验证划分上并行化。None表示 1,除非在joblib.parallel_backend上下文中。-1表示使用所有处理器。有关更多详细信息,请参阅术语表

verboseint,默认为 0

详细程度。

params字典,默认为 None

要传递给底层估计器的fit方法、评分器和交叉验证分割器的参数。

1.4 版新增。

pre_dispatchint 或 str,默认为 ‘2*n_jobs’

控制并行执行期间分派的作业数。当分派的作业数超过 CPU 可处理的作业数时,减少此数量有助于避免内存消耗的爆炸性增长。此参数可以是:

  • None,在这种情况下,所有作业会立即创建和启动。将其用于轻量级和快速运行的作业,以避免因按需启动作业而造成的延迟。

  • 一个整数,表示启动的总作业的精确数量

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

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

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

0.20 版新增。

返回:
scores形状为 (len(list(cv)),) 的浮点数 ndarray

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

另请参阅

cross_validate

用于对多个指标运行交叉验证,并返回训练分数、拟合时间和评分时间。

cross_val_predict

从交叉验证的每次划分中获取预测结果,用于诊断。

sklearn.metrics.make_scorer

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

示例

>>> from sklearn import datasets, linear_model
>>> from sklearn.model_selection import cross_val_score
>>> diabetes = datasets.load_diabetes()
>>> X = diabetes.data[:150]
>>> y = diabetes.target[:150]
>>> lasso = linear_model.Lasso()
>>> print(cross_val_score(lasso, X, y, cv=3))
[0.3315057  0.08022103 0.03531816]