在交叉验证后对所有训练数据进行 scikit-learn 训练
Posted
技术标签:
【中文标题】在交叉验证后对所有训练数据进行 scikit-learn 训练【英文标题】:Making scikit-learn train on all training data after cross-validation 【发布时间】:2014-05-01 02:12:07 【问题描述】:我正在使用 scikit-learn 来训练分类器。我也想做交叉验证,但在交叉验证之后,我想在整个数据集上进行训练。我发现 cross_validation.cross_val_score() 只是返回分数。
编辑:我想用我的所有数据训练具有最佳交叉验证分数的分类器。
【问题讨论】:
明确一点 - 您想用所有数据训练具有最佳交叉验证分数的分类器,对吗? 这看起来很奇怪,交叉验证的重点是避免过度拟合,在验证数据上运行容易出现什么情况? @Greg 确实如此。 【参考方案1】:只需计算交叉验证分数,然后训练您的模型。这些是独立的步骤:
>>> scores = cross_val_score(model, X_train, y_train, cv=5)
>>> model.fit(X_train, y_train)
【讨论】:
【参考方案2】:我的建议是不要使用性能最佳的交叉验证拆分。这可能会给你带来高偏见的问题。毕竟,性能恰好是好的,因为有一个用于测试的折叠恰好与用于训练的数据相匹配。当您将其推广到现实世界时,这可能不会发生。
我从 Andrew Ng 那里得到的一个策略是拥有一个训练集、开发集和测试集。我首先将您的数据集拆分为测试集和训练集。然后在你的训练集上使用交叉折叠验证,训练集将有效地分为训练集和开发集。进行交叉折叠验证以验证您的模型并存储精度和召回率以及其他指标以构建 ROC 曲线。平均这些值并报告这些值。您也可以使用您的开发集调整超参数。
接下来,使用整个训练集训练模型,然后使用您的保留测试集验证模型。
【讨论】:
以上是关于在交叉验证后对所有训练数据进行 scikit-learn 训练的主要内容,如果未能解决你的问题,请参考以下文章