validation_curve#

sklearn.model_selection.validation_curve(estimator, X, y, *, param_name, param_range, groups=None, cv=None, scoring=None, n_jobs=None, pre_dispatch='all', verbose=0, error_score=nan, params=None)[source]#

验证曲线。

确定不同参数值下的训练得分和测试得分。

计算评估器(estimator)在指定参数的不同值下的得分。这类似于单参数的网格搜索(grid search)。不过,该函数还会计算训练得分,主要作为绘制结果的实用工具。

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

参数:
estimator实现了“fit”方法的对象类型

该类型的对象会在每次验证时被克隆。除非 scoring 是一个不依赖“predict”方法来计算得分的可调用对象,否则它必须实现“predict”方法。

Xshape 为 (n_samples, n_features) 的 {array-like, sparse matrix}

训练向量,其中 n_samples 是样本数,n_features 是特征数。

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

相对于 X 的分类或回归目标;对于无监督学习为 None。

param_namestr

将要变化的参数名称。

param_range形状为 (n_values,) 的类数组对象

将要评估的参数值。

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

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

在 1.6 版本更改: 只有当未通过 sklearn.set_config(enable_metadata_routing=True) 启用元数据路由时,才能传入 groups。启用路由后,请通过 params 参数将 groups 与其他元数据一起传入。例如:validation_curve(..., params={'groups': groups})

cvint, cross-validation generator or an iterable, default=None

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

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

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

  • CV 分割器,

  • 产生(训练,测试)拆分作为索引数组的可迭代对象。

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

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

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

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

用于评估训练集和测试集的评分方法。

n_jobsint, default=None

并行运行的作业数量。评估器的训练和得分计算会在每个参数值与每个交叉验证拆分的组合上进行并行处理。None 表示除非处于 joblib.parallel_backend 上下文中,否则为 1。-1 表示使用所有处理器。更多详情请参见 术语表

pre_dispatchint or str, default=’all’

并行执行的预调度作业数(默认为全部)。该选项可以减少分配的内存。该字符串可以是像“2*n_jobs”这样的表达式。

verboseint, default=0

控制详细程度:值越高,消息越多。

error_score‘raise’ or numeric, default=np.nan

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

0.20 版本新增。

paramsdict, 默认=None

传递给评估器、评分器和交叉验证对象的参数。

  • 如果 enable_metadata_routing=False (默认):直接传递给估计器的 fit 方法的参数。

  • 如果 enable_metadata_routing=True:参数会被安全地路由到评估器的 fit 方法、评分器以及交叉验证对象中。更多详情请参见 元数据路由用户指南

版本 1.6 中新增。

返回:
train_scores形状为 (n_ticks, n_cv_folds) 的数组

训练集上的得分。

test_scores形状为 (n_ticks, n_cv_folds) 的数组

测试集上的得分。

另请参阅

ValidationCurveDisplay.from_estimator

根据给定的评估器、数据和要变化的参数绘制验证曲线。

注意事项

参见 模型正则化对训练误差和测试误差的影响

示例

>>> import numpy as np
>>> from sklearn.datasets import make_classification
>>> from sklearn.model_selection import validation_curve
>>> from sklearn.linear_model import LogisticRegression
>>> X, y = make_classification(n_samples=1_000, random_state=0)
>>> logistic_regression = LogisticRegression()
>>> param_name, param_range = "C", np.logspace(-8, 3, 10)
>>> train_scores, test_scores = validation_curve(
...     logistic_regression, X, y, param_name=param_name, param_range=param_range
... )
>>> print(f"The average train accuracy is {train_scores.mean():.2f}")
The average train accuracy is 0.81
>>> print(f"The average test accuracy is {test_scores.mean():.2f}")
The average test accuracy is 0.81