交叉验证#
- 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
- 将数据集拆分为训练集/测试集时使用的样本分组标签。仅与“分组” cv 实例(例如, - GroupKFold)结合使用。- 1.4 版本中的更改: - groups只有在未通过- sklearn.set_config(enable_metadata_routing=True)启用元数据路由时才能传递。启用路由时,请通过- params参数传递- groups以及其他元数据。例如:- cross_validate(..., params={'groups': groups})。
- scoringstr、callable、list、tuple 或 dict,默认为 None
- 评估交叉验证模型在测试集上性能的策略。如果为 - None,则使用估计器的默认评估标准。- 如果 - scoring表示单个分数,可以使用:- 单个字符串(参见评分参数:定义模型评估规则); 
- 返回单个值的callable(参见可调用评分器)。 
 - 如果 - scoring表示多个分数,可以使用:- 唯一字符串的列表或元组; 
- 返回字典的callable,其中键是指标名称,值是指标分数; 
- 字典,其中指标名称为键,callable 为值。 
 - 参见指定多个指标进行评估以了解示例。 
- cvint、交叉验证生成器或可迭代对象,默认为 None
- 确定交叉验证拆分策略。cv 的可能输入为: - None,使用默认的 5 折交叉验证, 
- int,指定 - (Stratified)KFold中的折叠数,
- 产生 (train, test) 拆分作为索引数组的可迭代对象。 
 - 对于 int/None 输入,如果估计器是分类器并且 - y是二元或多类,则使用- StratifiedKFold。在所有其他情况下,使用- KFold。这些分割器使用- shuffle=False实例化,因此拆分在调用之间将保持一致。- 参考用户指南了解此处可使用的各种交叉验证策略。 - 0.22 版本中的更改: 如果为 None,则 - 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_score布尔值,默认为False
- 是否包含训练分数。计算训练分数用于了解不同的参数设置如何影响过拟合/欠拟合的权衡。但是,在训练集上计算分数可能计算量很大,并且并非严格要求选择产生最佳泛化性能的参数。 - 0.19版本新增。 - 0.21版本更改: 默认值已从 - True更改为- False
- return_estimator布尔值,默认为False
- 是否返回在每个分割上拟合的估计器。 - 0.20版本新增。 
- return_indices布尔值,默认为False
- 是否返回为每个分割选择的训练-测试索引。 - 1.3版本新增。 
- error_score‘raise’ 或数值,默认为np.nan
- 如果估计器拟合发生错误,则分配给分数的值。如果设置为'raise',则引发错误。如果给出数值,则会引发FitFailedWarning。 - 0.20版本新增。 
 
- 返回:
- scores形状为 (n_splits,) 的浮点数组字典
- 每次交叉验证运行的估计器的分数数组。 - 返回一个包含每个评分器的分数/时间数组的数组字典。此 - dict的可能键为- test_score
- 每次交叉验证分割的测试分数的得分数组。如果评分参数中有多个评分指标,则 - test_score中的后缀- _score将更改为特定指标,例如- test_r2或- test_auc。
- train_score
- 每次交叉验证分割的训练分数的得分数组。如果评分参数中有多个评分指标,则 - train_score中的后缀- _score将更改为特定指标,例如- train_r2或- train_auc。只有当- return_train_score参数为- True时才可用。
- fit_time
- 每次交叉验证分割在训练集上拟合估计器的时间。 
- score_time
- 每次交叉验证分割在测试集上对估计器进行评分的时间。(即使 - return_train_score设置为- True,也不包括在训练集上进行评分的时间)
- estimator
- 每次交叉验证分割的估计器对象。只有当 - return_estimator参数设置为- True时才可用。
- indices
- 每次交叉验证分割的训练/测试位置索引。返回一个字典,其中键是 - "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] 
 
     
 
 
 
 
 
 
 
 
 
 
 
 
