验证曲线#

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, fit_params=None, params=None)[source]#

验证曲线。

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

计算具有指定参数不同值的估计器的分数。这类似于使用一个参数的网格搜索。但是,这也会计算训练分数,并且仅仅是用于绘制结果的实用程序。

更多信息请阅读 用户指南

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

为每个验证克隆的对象类型。除非scoring是一个不依赖于“predict”来计算分数的可调用对象,否则它还必须实现“predict”。

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

训练向量,其中 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 中更改: groups 只有在没有通过 sklearn.set_config(enable_metadata_routing=True) 启用元数据路由时才能传递。启用路由时,请通过 params 参数传递 groups 以及其他元数据。例如:validation_curve(..., params={'groups': groups})

cv整数、交叉验证生成器或迭代器,默认为 None

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

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

  • 整数,用于指定 (Stratified)KFold 中的折数,

  • CV 分割器,

  • 一个迭代器,产生 (train, test) 拆分作为索引数组。

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

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

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

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

一个 str(参见 scoring 参数:定义模型评估规则)或一个评分可调用对象/函数,其签名为 scorer(estimator, X, y)

n_jobsint,默认为 None

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

pre_dispatchint 或 str,默认为 'all'

并行执行的预调度作业数(默认为 all)。此选项可以减少分配的内存。str 可以是类似 '2*n_jobs' 的表达式。

verboseint,默认为 0

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

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

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

在版本 0.20 中添加。

fit_paramsdict,默认为 None

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

版本 1.6 中已弃用: 此参数已弃用,并将在版本 1.8 中移除。请改用 params

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) 的数组

测试集上的得分。

备注

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

示例

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