学习曲线#
- 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”方法的对象类型
一种被克隆用于每次验证的对象类型。除非
scoring
是一个不依赖于“predict”来计算分数的可调用对象,否则它还必须实现“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 折交叉验证,
整数,指定
(Stratified)KFold
中的折叠数,一个可迭代对象,产生 (train, test) 分割作为索引数组。
对于 int/None 输入,如果估计器是分类器并且
y
是二元或多类,则使用StratifiedKFold
。在所有其他情况下,使用KFold
。这些分割器使用shuffle=False
实例化,因此分割在调用之间将保持相同。参考 用户指南,了解此处可以使用各种交叉验证策略。
0.22 版更改: 如果为 None,则
cv
的默认值从 3 折更改为 5 折。- scoring字符串或可调用对象,默认为 None
一个字符串(参见 评分参数:定义模型评估规则)或一个评分可调用对象/函数,签名为
scorer(estimator, X, y)
。- exploit_incremental_learning布尔值,默认为 False
如果估计器支持增量学习,这将用于加快不同训练集大小的拟合速度。
- n_jobs整数,默认为 None
并行运行的作业数。估计器的训练和分数计算在不同的训练集和测试集上并行化。
None
表示 1,除非在joblib.parallel_backend
上下文中。-1
表示使用所有处理器。更多详情请参见 词汇表。- pre_dispatchint 或 str,默认为’all’
并行执行的预调度作业数(默认为 all)。此选项可以减少分配的内存。str 可以是类似于 ‘2*n_jobs’ 的表达式。
- verboseint,默认为 0
控制详细程度:值越高,显示的消息越多。
- shufflebool,默认为 False
是否在根据 ``train_sizes`` 获取训练数据的子集之前对其进行混洗。
- random_stateint、RandomState 实例或 None,默认为 None
当
shuffle
为 True 时使用。传递一个整数,以便在多次函数调用中获得可重复的结果。参见 词汇表。- error_score‘raise’ 或数值,默认为 np.nan
如果估计器拟合过程中发生错误,则分配给分数的值。如果设置为 ‘raise’,则会引发错误。如果给定数值,则会引发 FitFailedWarning。
版本 0.20 中新增。
- return_timesbool,默认为 False
是否返回拟合和评分时间。
- fit_paramsdict,默认为 None
传递给估计器 fit 方法的参数。
自版本 1.6 起已弃用: 此参数已弃用,将在 1.8 版本中移除。请改用
params
。- 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 时才存在。
示例
>>> 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