learning_curve#

sklearn.model_selection.learning_curve(estimator, X, y, *, groups=None, train_sizes=array([0.1, 0.33, 0.55, 0.78, 1.]), cv=None, scoring=None, exploit_incremental_learning=False, n_jobs=None, pre_dispatch='all', verbose=0, shuffle=False, random_state=None, error_score=nan, return_times=False, params=None)[source]#

学习曲线。

确定不同训练集大小的交叉验证训练得分和测试得分。

交叉验证生成器将整个数据集分成训练数据和测试数据k次。将使用不同大小的训练集子集来训练估计器,并计算每个训练集子集大小和测试集的得分。然后,将对每个训练集子集大小的所有 k 次运行的得分进行平均。

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

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

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

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

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

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

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

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

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

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

train_sizes形状为 (n_ticks,) 的类似数组, 默认为 np.linspace(0.1, 1.0, 5)

将用于生成学习曲线的训练示例的相对或绝对数量。如果 dtype 是 float,则将其视为训练集最大大小(由所选验证方法确定)的一部分,即它必须在 (0, 1] 范围内。否则,它被解释为训练集的绝对大小。请注意,对于分类,样本数量通常必须足够大,以包含每个类别至少一个样本。

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

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

exploit_incremental_learningbool, default=False

如果估计器支持增量学习,这将用于加快不同训练集大小的拟合速度。

n_jobsint, default=None

并行运行的作业数。估计器的训练和得分计算在不同的训练集和测试集上并行化。None 表示 1,除非在 joblib.parallel_backend 上下文中。-1 表示使用所有处理器。有关详细信息,请参阅词汇表

pre_dispatchint or str, default=’all’

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

verboseint, default=0

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

shufflebool, default=False

是否在根据``train_sizes``取其前缀之前打乱训练数据。

random_stateint, RandomState instance or None, default=None

shuffle 为 True 时使用。传递一个 int 以在多次函数调用中获得可重现的输出。请参阅词汇表

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

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

0.20 版本新增。

return_timesbool, default=False

是否返回拟合和得分时间。

paramsdict, 默认=None

要传递给估计器的 fit 方法和评分器的参数。

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

  • 如果 enable_metadata_routing=True:安全路由到估计器的 fit 方法的参数。有关详细信息,请参阅元数据路由用户指南

版本 1.6 中新增。

返回:
train_sizes_abs形状为 (n_unique_ticks,) 的数组

用于生成学习曲线的训练示例数量。请注意,刻度数可能小于 n_ticks,因为重复条目将被删除。

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

训练集上的得分。

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

测试集上的得分。

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

拟合所花费的时间(秒)。仅当 return_times 为 True 时存在。

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

评分所花费的时间(秒)。仅当 return_times 为 True 时存在。

另请参阅

LearningCurveDisplay.from_estimator

使用估计器和数据绘制学习曲线。

示例

>>> from sklearn.datasets import make_classification
>>> from sklearn.tree import DecisionTreeClassifier
>>> from sklearn.model_selection import learning_curve
>>> X, y = make_classification(n_samples=100, n_features=10, random_state=42)
>>> tree = DecisionTreeClassifier(max_depth=4, random_state=42)
>>> train_size_abs, train_scores, test_scores = learning_curve(
...     tree, X, y, train_sizes=[0.3, 0.6, 0.9]
... )
>>> for train_size, cv_train_scores, cv_test_scores in zip(
...     train_size_abs, train_scores, test_scores
... ):
...     print(f"{train_size} samples were used to train the model")
...     print(f"The average train accuracy is {cv_train_scores.mean():.2f}")
...     print(f"The average test accuracy is {cv_test_scores.mean():.2f}")
24 samples were used to train the model
The average train accuracy is 1.00
The average test accuracy is 0.85
48 samples were used to train the model
The average train accuracy is 1.00
The average test accuracy is 0.90
72 samples were used to train the model
The average train accuracy is 1.00
The average test accuracy is 0.93