我正在做一个小项目,我的数据集有6k行和大约300个特性,有一个简单的二进制结果。
因为我还在学习ML,所以我想尝试所有我能找到并比较结果的算法。
正如我在教程中所读的,我将我的数据集分成一个训练样本(80%)和一个测试样本(20%),然后用交叉验证(5倍)训练我的算法。
我的计划是以这种方式训练我的所有模型,然后在测试样本上衡量它们的性能,以选择最佳的算法。
这会导致过度适应吗?如果是这样的话,由于我无法比较model_selection.GridSearchCV内部的几种模型,我如何才能防止它过度适应呢?
发布于 2019-04-21 19:56:18
基本上,每次你使用火车/测试分割的结果来决定一个模型--无论是调优单个模型的超参数,还是选择多个不同模型中最有效的一个,在你“冻结”你的模型并根据一部分未被触及的数据对它进行评估之前,你不能在做出这些决定之后推断出模型的性能。
解决这个问题的一般概念称为嵌套交叉验证。如果您使用列车/测试分割来为模型选择最佳参数,这是很好的。但是如果你想要评估它的性能,你需要在第二组上进行评估。
如果您然后对多个模型重复处理,并选择性能最好的模型,这是很好的,但是通过选择最佳的结果,性能度量的值本质上是有偏差的,您需要在另一个提供的集合上验证整个过程,以获得模型对未见数据的性能的无偏见估计。
发布于 2019-04-21 16:18:22
不,这不是测试集的目的。测试集仅用于模型完成后的最终评估。问题是,如果将测试集包括在决策中,您的评估将不再可靠。
为了比较算法,您需要预留另一块数据,称为验证集。
下面是一些关于良好分割的信息,这取决于数据大小:
列车/开发/测试装置从改进深层神经网络:超参数调整,正则化和优化由吴国强教授。
(Andrew使用单词dev集而不是验证集)
https://datascience.stackexchange.com/questions/49683
复制相似问题