cross_validate#
- sklearn.model_selection.cross_validate(estimator, X, y=None, *, groups=None, scoring=None, cv=None, n_jobs=None, verbose=0, params=None, pre_dispatch='2*n_jobs', return_train_score=False, return_estimator=False, return_indices=False, error_score=nan)[source]#
通过交叉验证评估指标并记录拟合/评分时间。
在 用户指南中阅读更多内容。
- 参数:
- estimator实现“fit”方法的估计器对象
用于拟合数据的对象。
- X{类数组对象, 稀疏矩阵} 形状为 (n_samples, n_features)
要拟合的数据。例如,可以是列表或数组。
- y类数组对象,形状为 (n_samples,) 或 (n_samples, n_outputs),默认为 None
在监督学习中尝试预测的目标变量。
- groups类数组对象,形状为 (n_samples,),默认为 None
用于将数据集拆分为训练/测试集时的样本组标签。仅与“Group” cv 实例(例如,
GroupKFold
)结合使用。1.4 版本修改: 仅当未通过
sklearn.set_config(enable_metadata_routing=True)
启用元数据路由时,才能传递groups
。当路由启用时,请通过params
参数将groups
与其他元数据一起传递。例如:cross_validate(..., params={'groups': groups})
。- scoringstr、可调用对象、列表、元组或字典,默认为 None
评估
estimator
在交叉验证分割上的性能的策略。如果
scoring
表示单个分数,可以使用如果
scoring
表示多个分数,可以使用唯一字符串的列表或元组;
返回字典的可调用对象,其中键是指标名称,值是指标分数;
以指标名称作为键,可调用对象作为值的字典。
有关示例,请参见 指定多个评估指标。
- cvint、交叉验证生成器或可迭代对象,默认为 None
确定交叉验证分割策略。cv 的可能输入有
None,使用默认的 5 折交叉验证,
int,指定
(Stratified)KFold
中的折叠数,生成 (训练集, 测试集) 分割的迭代器,以索引数组形式。
对于 int/None 输入,如果估计器是分类器且
y
是二元或多类,则使用StratifiedKFold
。在所有其他情况下,使用KFold
。这些分割器以shuffle=False
实例化,因此在不同调用中分割将保持一致。请参阅用户指南,了解此处可使用的各种交叉验证策略。
0.22 版本修改:
cv
的默认值从 3 折改为 5 折。- n_jobsint,默认为 None
并行运行的作业数。估计器的训练和分数的计算在交叉验证分割上并行进行。
None
表示 1,除非在joblib.parallel_backend
上下文中。-1
表示使用所有处理器。有关更多详细信息,请参见 术语表。- verboseint,默认为 0
详细程度。
- paramsdict,默认为 None
要传递给底层估计器的
fit
、评分器和 CV 分割器的参数。1.4 版本新增。
- pre_dispatchint 或 str,默认为’2*n_jobs’
控制并行执行期间分派的作业数量。当分派的作业多于 CPU 可处理的数量时,减少此数量有助于避免内存消耗的爆炸性增长。此参数可以是
一个 int,给出生成的总作业的确切数量
一个 str,给出表示为 n_jobs 函数的表达式,例如 ‘2*n_jobs’
- return_train_scorebool,默认为 False
是否包含训练集分数。计算训练分数用于了解不同参数设置如何影响过拟合/欠拟合的权衡。然而,在训练集上计算分数可能计算成本高昂,并且并非严格需要选择产生最佳泛化性能的参数。
0.19 版本新增。
0.21 版本修改: 默认值从
True
更改为False
。- return_estimatorbool,默认为 False
是否返回在每个分割上拟合的估计器。
0.20 版本新增。
- return_indicesbool,默认为 False
是否返回为每个分割选择的训练-测试索引。
1.3 版本新增。
- error_score‘raise’ 或数值,默认为 np.nan
如果估计器拟合中发生错误,分配给分数的值。如果设置为‘raise’,则会引发错误。如果给定数值,则会引发 FitFailedWarning。
0.20 版本新增。
- 返回:
- scores形状为 (n_splits,) 的浮点数组字典
估计器在每次交叉验证运行中的分数数组。
返回一个字典,其中包含每个评分器的分数/时间数组。此
dict
可能的键有test_score
每个 CV 分割上的测试分数数组。如果 scoring 参数中存在多个评分指标,
test_score
中的后缀_score
会变为特定的指标,如test_r2
或test_auc
。train_score
每个 CV 分割上的训练分数数组。如果 scoring 参数中存在多个评分指标,
train_score
中的后缀_score
会变为特定的指标,如train_r2
或train_auc
。此项仅当return_train_score
参数设置为True
时可用。fit_time
在每个 CV 分割上拟合估计器在训练集上的时间。
score_time
在每个 CV 分割上评估估计器在测试集上的时间。(注意:即使
return_train_score
设置为True
,也不包括在训练集上评估的时间)。estimator
每个 CV 分割的估计器对象。此项仅当
return_estimator
参数设置为True
时可用。indices
每个 CV 分割的训练/测试位置索引。返回一个字典,其中键为
"train"
或"test"
,关联的值是包含索引的整数类型 NumPy 数组列表。仅当return_indices=True
时可用。
另请参见
cross_val_score
运行交叉验证进行单指标评估。
cross_val_predict
从交叉验证的每个分割中获取预测,用于诊断目的。
sklearn.metrics.make_scorer
从性能指标或损失函数创建评分器。
示例
>>> from sklearn import datasets, linear_model >>> from sklearn.model_selection import cross_validate >>> from sklearn.metrics import make_scorer >>> from sklearn.metrics import confusion_matrix >>> from sklearn.svm import LinearSVC >>> diabetes = datasets.load_diabetes() >>> X = diabetes.data[:150] >>> y = diabetes.target[:150] >>> lasso = linear_model.Lasso()
使用
cross_validate
进行单指标评估>>> cv_results = cross_validate(lasso, X, y, cv=3) >>> sorted(cv_results.keys()) ['fit_time', 'score_time', 'test_score'] >>> cv_results['test_score'] array([0.3315057 , 0.08022103, 0.03531816])
使用
cross_validate
进行多指标评估(有关更多信息,请参阅scoring
参数文档)>>> scores = cross_validate(lasso, X, y, cv=3, ... scoring=('r2', 'neg_mean_squared_error'), ... return_train_score=True) >>> print(scores['test_neg_mean_squared_error']) [-3635.5 -3573.3 -6114.7] >>> print(scores['train_r2']) [0.28009951 0.3908844 0.22784907]