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, fit_params=None, params=None)[source]#
学习曲线。
确定不同训练集大小的交叉验证训练分数和测试分数。
交叉验证生成器将整个数据集 k 次拆分为训练数据和测试数据。将使用不同大小的训练集子集来训练估计器,并计算每个训练子集大小和测试集的分数。之后,将对每个训练子集大小的所有 k 次运行的分数进行平均。
在用户指南中阅读更多信息。
- 参数:
- estimator实现“fit”方法的对象类型
一个每次验证都会被克隆的对象。它还必须实现“predict”,除非
scoring
是一个不依赖“predict”来计算分数的函数。- X{类数组, 稀疏矩阵},形状为 (n_samples, n_features)
训练向量,其中
n_samples
是样本数量,n_features
是特征数量。- y类数组,形状为 (n_samples,) 或 (n_samples, n_outputs) 或 None
分类或回归的 X 的目标;无监督学习为 None。
- groups类数组,形状为 (n_samples,),默认值为 None
在将数据集拆分为训练/测试集时使用的样本的分组标签。仅与“Group”交叉验证(cv)实例(例如,
GroupKFold
)结合使用。1.6 版本新增:
groups
仅在未通过sklearn.set_config(enable_metadata_routing=True)
启用元数据路由时才能传递。当路由启用时,请通过params
参数传递groups
以及其他元数据。例如:learning_curve(..., params={'groups': groups})
。- train_sizes类数组,形状为 (n_ticks,),默认值为 np.linspace(0.1, 1.0, 5)
用于生成学习曲线的训练样本的相对或绝对数量。如果 dtype 为浮点数,则视为训练集最大大小(由所选验证方法确定)的一个分数,即必须在 (0, 1] 之间。否则,它被解释为训练集的绝对大小。请注意,对于分类,样本数量通常必须足够大以包含每个类别至少一个样本。
- cv整数,交叉验证生成器或可迭代对象,默认值为 None
确定交叉验证的拆分策略。cv 的可能输入包括:
None,使用默认的 5 折交叉验证,
int,指定
(Stratified)KFold
中的折叠数量,一个生成 (训练,测试) 拆分作为索引数组的可迭代对象。
对于 int/None 输入,如果估计器是分类器且
y
是二元或多类,则使用StratifiedKFold
。在所有其他情况下,使用KFold
。这些拆分器以shuffle=False
实例化,因此在多次调用中拆分将相同。有关可在此处使用的各种交叉验证策略,请参阅用户指南。
0.22 版本新增: 如果为 None,
cv
的默认值从 3 折更改为 5 折。- scoring字符串或可调用对象,默认值为 None
用于评估训练集和测试集的分数方法。
- exploit_incremental_learning布尔值,默认值为 False
如果估计器支持增量学习,这将用于加速不同训练集大小的拟合。
- n_jobs整数,默认值为 None
并行运行的作业数量。估计器的训练和分数的计算在不同的训练集和测试集上并行进行。
None
表示 1,除非在joblib.parallel_backend
上下文中。-1
表示使用所有处理器。有关详细信息,请参阅术语表。- pre_dispatch整数或字符串,默认值为 'all'
并行执行的预调度作业数量(默认为所有)。此选项可以减少分配的内存。字符串可以是“2*n_jobs”之类的表达式。
- verbose整数,默认值为 0
控制详细程度:值越高,消息越多。
- shuffle布尔值,默认值为 False
是否在根据``train_sizes`` 获取训练数据前缀之前对其进行洗牌。
- random_state整数,RandomState 实例或 None,默认值为 None
当
shuffle
为 True 时使用。传递一个整数可在多次函数调用中获得可重现的输出。请参阅术语表。- error_score‘raise’ 或数值,默认值为 np.nan
如果估计器拟合中发生错误,分配给分数的值。如果设置为“raise”,则会引发错误。如果给定数值,则会引发 FitFailedWarning。
0.20 版本新增。
- return_times布尔值,默认值为 False
是否返回拟合和评分时间。
- fit_params字典,默认值为 None
要传递给估计器拟合方法的参数。
自 1.6 版本弃用: 此参数已弃用,并将在 1.8 版本中移除。请改用
params
。- params字典,默认值为 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