交叉验证:来自 scikit-learn 参数的 cross_val_score 函数

Posted

技术标签:

【中文标题】交叉验证:来自 scikit-learn 参数的 cross_val_score 函数【英文标题】:Cross validation: cross_val_score function from scikit-learn arguments 【发布时间】:2018-10-15 01:19:59 【问题描述】:

根据 scikit-learn 的文档

sklearn.model_selection.cross_val_score(估计器,X,y=None, 组=无,评分=无,cv=无,n_jobs=1,详细=0, fit_params=None, pre_dispatch='2*n_jobs')

X 和 y

X : array-like 适合的数据。例如可以是一个列表,或者一个 数组。

y : 类数组,可选,默认值:None 目标变量 尝试在监督学习的情况下进行预测。

我想知道 [X,y] 是否是 X_train 并且 y_train 或 [X,y] 应该是整个数据集。在 kaggle 的一些笔记本中,有些人使用整个数据集,有些人使用 X_train 和 y_train。

据我所知,交叉验证只是评估模型并显示您是否过拟合/欠拟合数据(它实际上并没有训练模型)。然后,在我看来,你拥有的数据越多,性能越好,所以我会使用整个数据集。

你怎么看?

【问题讨论】:

这取决于你。在某些情况下,人们在训练集上进行整个数据分析(包括交叉验证),最终只使用测试集。 【参考方案1】:

模型performance 取决于数据的拆分方式,有时模型没有泛化能力。

这就是我们需要交叉验证的原因。

Cross-validation 是评估模型的关键步骤。它最大限度地增加了用于训练模型的数据量,因为在训练过程中,模型不仅经过训练,而且还在所有可用数据上进行了测试。

我想知道 [X,y] 是否是 X_train 和 y_train 或 [X,y] 应该是 整个数据集。

[X, y] 应该是整个数据集,因为内部交叉验证将数据拆分为 training 数据和 test 数据。

假设您使用 5 折交叉验证 (cv = 5)。

我们首先将数据集分成五组或折叠。然后我们将第一个折叠作为测试集,在剩余的四个折叠上拟合模型,在测试集上进行预测并计算感兴趣的度量。

接下来,我们将第二折作为测试集,拟合剩余数据,在测试集上进行预测并计算感兴趣的指标。

默认情况下,scikit-learn 的 cross_val_score() 函数使用 R^2 分数作为回归选择的指标。

R^2 分数称为coefficient of determination.

【讨论】:

cross_val_score 默认使用提供的估计器的score() 方法。对于回归量估计器,score() 计算 R_squared 值。因此cross_val_score() 给出了这个。

以上是关于交叉验证:来自 scikit-learn 参数的 cross_val_score 函数的主要内容,如果未能解决你的问题,请参考以下文章

在 scikit-learn 中跨多个模型进行交叉验证时如何保持相同的折叠?

在 SciKit-Learn 中使用 XGBoost 交叉验证进行网格搜索和提前停止

评估 scikit-learn GridSearchCV 中交叉验证分数的平均值、标准差

在 scikit learn 中结合网格搜索和交叉验证

使用 Scikit-Learn GridSearchCV 与 PredefinedSplit 进行交叉验证 - 可疑的交叉验证结果

Scikit-Learn:在交叉验证期间避免数据泄漏