python - 如何进行 10 次随机拆分以保证机器学习结果的一致性
问题描述
我刚刚读了一篇关于图像流行度预测的论文。作者将数据分成两部分,一部分用于训练,另一部分用于测试。在训练集上使用 5 折交叉验证来找到最佳参数。并且实验的结果是预测流行度和实际流行度之间的等级相关性。
为了保证结果的一致性,作者对 10 次随机分割的性能进行了平均。我对 10 个随机拆分感到困惑。
- 是不是说当他得到最优参数和模型后,把模型用在测试集上,把测试集分成10次10份,9份训练,1份测试?
- 过程中模型是否再次训练?
解决方案
阅读什么是交叉验证应该会有所帮助。
我不能不看论文就说出作者做了什么,但交叉验证的想法是不对测试数据集进行拆分,而是在对整个数据集进行 K 次拆分后实际训练和丢弃模型,使用每个子集一次用于测试。
假设你在那方面没问题,你的措辞让我觉得在选择了最佳参数后,这个人再次从步骤 1 开始以 50-50 分割,这次没有更改参数,实际上得到了一个新的训练集和测试集。他总共做了10次。
如果是这种情况,这基本上意味着他在对整个集合执行 50-50 随机拆分 9 次后,又训练了 9 次相同的模型架构,并在 10 个分数中平均了他的“性能”指标。
编辑: 论文参考
3.2 评估对于上述每个设置,我们将数据随机分成两半,一用于训练,另一半用于测试。我们对 10 次随机分割的性能进行平均,以确保结果的一致性;总体而言,我们发现我们的结果与跨拆分的低标准偏差高度一致。
好吧,所以是的,作者确实“重复”了他的工作 10 次,每次创建一个随机的 50-50 拆分开始。
所以,它的本质是,5折交叉验证发生在训练集的训练过程中。剩余的 50% 用作评价。不要把它想象成一个典型的测试集,而是一个“保留”集。由于交叉验证意味着 50% 的数据用于在整个过程中进行训练和测试。
那时,除了超参数和相应的“保留”50% 数据的结果之外,您放弃了所有工作。现在您再次从整个数据集开始,并进行不同但随机的 50% 拆分。这一次,使用相同的超参数,您再次在新的训练集上进行训练,并在新的“保留”集上测试该结果。并重复。
推荐阅读
- sorting - XSLT - 创建一个应该包含唯一和排序数据的变量
- c# - 为什么`XmlDocument.LoadXml()`不适用于命名空间?
- c# - CsvHelper 在 VisualStudio 2013 中非常慢
- regex - 与变量名一起使用时,tcl 正则表达式无法按预期工作
- sql-server - 如何从多个连接查询中删除冗余数据
- ios - Gluon:SettingsService 在 iOS 上崩溃
- c# - 重命名jqGrid中的列,格式为MMYYYY
- c# - 使用 if 语句更改面板颜色
- angular - 将字符串放入主题数组中
- azure-devops - 是否可以用纯 html 编写 VSTS 仪表板