在交叉验证后让scikit-learn使用全部训练数据进行训练

2 投票
2 回答
1391 浏览
提问于 2025-04-17 23:34

我正在使用scikit-learn来训练分类器。我还想进行交叉验证,但在交叉验证之后,我想用整个数据集来训练。可是我发现cross_validation.cross_val_score()只会返回分数。

补充说明:我想用我所有的数据来训练那个在交叉验证中得分最高的分类器。

2 个回答

0

我的建议是,不要使用表现最好的交叉验证分割。这可能会导致你遇到高偏差的问题。毕竟,表现好只是因为测试时恰好用到了和训练数据相匹配的那一部分数据。当你把这个模型应用到现实世界时,这种情况可能不会再出现。

我从Andrew Ng那里学到的一个策略是将数据分成训练集、开发集和测试集。首先,你需要把数据集分成测试集和训练集。然后在训练集上进行交叉验证,这样训练集就会被分成训练集和开发集。通过交叉验证来验证你的模型,并记录准确率、召回率等指标,以便绘制ROC曲线。最后,计算这些指标的平均值并报告出来。你还可以利用开发集来调整模型的超参数。

接下来,用整个训练集来训练模型,然后用你保留的测试集来验证模型。

2

你只需要先计算交叉验证的得分,然后再训练你的模型。这两个步骤是独立的:

>>> scores = cross_val_score(model, X_train, y_train, cv=5)
>>> model.fit(X_train, y_train)

撰写回答