如果我用交叉验证,还是否需要单独分出测试集?

  统计/机器学习 模型验证
5

比方说我用100k条数据,我有两个思路

1. 我用这100k条数据做k-fold交叉验证,来调模型参数

2. 我先随机划分出70k条数据做训练集用来根据交叉验证调参数,调好之后再用剩下的30k条数据做测试集

哪个思路是对的呢?

 

道画师   2017-04-14 09:13



   1个回答 
11

虽然这两个都没有错对之分,但是在数据量允许的情况下,更建议第2个思路。

对于思路1,如果你用交叉验证的预测误差作为模型的预测误差,这是有偏差的。因为交叉验证的误差通常是小于真实测试误差的。

思路2是我推荐的。因为你的测试集一定要和你的模型本身独立、无关,测试集不能参与模型的训练。引申开来,还有第二层意思,你利用70k的数据训练完模型后,不能根据在30k测试集上的表现再回去重新调整参数,因为一旦你这样做了,你就很可能会过拟合,你的交叉验证也就没有意义了。


蓝色北方   2017-04-14 11:02

这回答,这头像,简直王之蔑视 - ZackLi   2017-04-15 12:06
感谢!o_o 看了@蓝色北方的回答,感觉我过去经常overfitting,因为我经常拿CV之后的测试集反复调试 - 机器小白   2017-04-17 10:36
问得好,也答得好,很多人都以为有了cross validation就不用test set了 - 派大星   2017-04-17 13:38


相关问题

十折交叉验证   1回答

k-fold cross validation的k怎么选   2回答

micro和macro F1 score分别是什么意思?   2回答

回归问题中的stratified cross validation?   2回答

Stratified k-fold cross validation(分层交叉验证)   1回答

交叉验证是如何进行的?   1回答

python里怎么求多元分类的F1 score?   1回答

二元分类问题中经常提到的TP,TF,FN,FP都是什么意思?   3回答

k近邻算法(k-NN)怎么选k   2回答

什么是混淆矩阵(confusion matrix)   2回答

多元分类的混淆矩阵   1回答

用python求二元分类的混淆矩阵   2回答



回答问题时需要注意什么?

我们谢绝在回答前讲“生动”的故事。

我们谢绝“这么简单,你自己想”、“书上有的,你认真看”这类的回答;如果你认为对方的提问方式或者内容不妥,你可以直接忽略该问题,不用进行任何作答,甚至可以对该问题投反对票。

我们谢绝答非所问。

我们谢绝自己不会、硬要回答。

我们感激每一个用户在编写答案时的努力与付出!