如何在神经网络中使用k折交叉验证
machine-learning
neural-network
4
0

我们正在编写一个小型ANN,该ANN应该基于10个输入变量将7000个产品分为7类。

为了做到这一点,我们必须使用k倍交叉验证,但是我们有点困惑。

我们有演示幻灯片的摘录:

k折交叉验证图

验证和测试集到底是什么?

据我们了解,我们要遍历3个训练集并调整权重(单个时期)。那我们该怎么做验证呢?因为据我了解,测试集用于获取网络错误。

接下来发生的事情也让我感到困惑。交叉何时发生?

如果要求不高,不胜枚举的步骤清单将不胜感激

参考资料:
Stack Overflow
收藏
评论
共 2 个回答
高赞 时间 活跃
  1. 将您的数据划分为K个非重叠折叠。让每折K包含来自m个类的每一个的相等数量的项目(分层交叉验证;如果您有100个A类的项目和50个B类的项目,并且进行了2折验证,则每个折应随机包含50个项目来自A,来自B的25)。

    1. 对于1..k中的i:

      • 在测试折痕中指定折痕
      • 指定其余的k-1折中的一个验证折(这可以是随机的,也可以是i的函数,并不重要)
      • 指定所有剩余的折叠次数
      • 在网格上搜索所有关于训练数据的自由参数(例如,学习率,隐藏层中的神经元数量)训练,并根据验证数据计算损失。选择参数使损失最小化
      • 使用带有获胜参数的分类器来评估测试损失。累积结果

现在,您已经收集了所有折叠的汇总结果。这是您的最终表演。如果您打算将其实际应用到野外,请使用网格搜索中的最佳参数来训练所有数据。

收藏
评论

您似乎有些困惑(我记得我也是),所以我将为您简化事情。 ;)

示例神经网络场景

每当您获得诸如设计神经网络之类的任务时,通常还会获得一个样本数据集以用于训练目的。让我们假设您正在训练一个简单的神经网络系统Y = W · X ,其中Y是根据给定样本向量X计算权重向量W的标量积(·)得出的输出。现在,要想做到这一点,最简单的方法就是使用整个数据集(例如1000个样本)来训练神经网络。假设训练收敛并且权重稳定,那么您可以放心地说,您的网络将正确分类训练数据。 但是,如果显示以前看不见的数据,网络将会发生什么变化?显然,这种系统的目的是能够对用于训练的数据以外的数据进行概括和正确分类。

过度拟合解释

但是,在任何现实情况下,只有在将神经网络部署到生产环境中后,才能使用以前看不见的/新的数据。但是,由于您尚未对其进行充分的测试,因此您可能会遇到困难。 :)任何学习系统几乎完全匹配其训练集但由于看不见的数据而不断失败的现象称为过拟合

三套

这里是算法的验证和测试部分。让我们回到1000个样本的原始数据集。您要做的就是使用精心选择的比例将其分为三组- 训练验证测试TrVaTe )。 (80-10-10)%通常是一个很好的比例,其中:

  • Tr = 80%
  • Va = 10%
  • Te = 10%

培训与验证

现在,发生的事情是在Tr集上训练了神经网络,并正确更新了其权重。然后,将验证集Va用于使用训练所得的权重来计算分类误差E = M - Y ,其中M是从验证集获取的预期输出向量, Y是分类得出的计算输出( Y = W * X )。如果误差高于用户定义的阈值,则重复整个训练验证时期 。当使用验证集计算的误差被认为足够低时,该训练阶段结束。

智能培训

现在,这是一个明智的选择,它是在每次纪元迭代时从总集合Tr + Va随机选择用于训练和验证的样本 。这样可以确保网络不会过度适应训练集。

测试中

然后使用测试集Te来测量网络的性能。此数据非常适合此目的,因为在整个培训和验证阶段都从未使用过。实际上,它是一小部分以前看不见的数据,应该模仿网络在生产环境中部署后将发生的情况。

如上所述,再次根据分类误差来测量性能。还可以(或者甚至应该)根据精度和召回率来衡量性能,以了解错误发生的位置和方式,但这是另一个问答环节的主题。

交叉验证

了解了这种训练验证测试机制后,可以通过执行K折交叉验证进一步增强网络以防过度拟合。这在某种程度上是我上面解释的智能诡计的演变。该技术涉及对不同的,不重叠的,等比例的TrVaTe集执行K轮训练验证测试

给定k = 10 ,对于K的每个值,您会将数据集分为Tr+Va = 90%Te = 10%然后运行算法,记录测试性能。

k = 10
for i in 1:k
     # Select unique training and testing datasets
     KFoldTraining <-- subset(Data)
     KFoldTesting <-- subset(Data)

     # Train and record performance
     KFoldPerformance[i] <-- SmartTrain(KFoldTraining, KFoldTesting)

# Compute overall performance
TotalPerformance <-- ComputePerformance(KFoldPerformance)

过度拟合

我从Wikipedia上摘下举世闻名的情节,以展示验证集如何帮助防止过拟合。蓝色的训练误差随着历元数的增加而趋于减少:因此,网络正在尝试精确匹配训练集。另一方面,红色的验证错误遵循不同的U形轮廓。曲线的最小值是理想情况下应停止训练的时间,因为这是训练和验证误差最小的点。

通过验证神经网络减少过度拟合

参考文献

有关更多参考, 这本出色的书将为您提供有关机器学习的知识,以及一些偏头痛的知识。由您决定是否值得。 :)

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号