为时间序列重用神经网络的滑动窗口数据?

时间:2015-11-02 18:14:53

标签: neural-network training-data

我已经阅读了关于前馈神经网络的正确样本大小的一些想法。 x5,x10和x30的权重。这部分我并不过分关注,我关心的是我可以重复使用我的训练数据(随机)。

我的数据就这样分解了

每个样本5个独立变量和1个相关变量。

我计划喂养6个样本(6x5 = 30个输入神经元),确认第7个样本因变量(1个输出神经元。

我会通过运行6或7次迭代来训练神经网络。在尝试预测我的训练数据之外的下一次迭代之前。

说我有

每个样本= 5个独立变量& 1个因变量(每个样本总共6个变量)

output =只是1个因变量

sample:sample:sample:sample:sample:sample-> output(dependent var)

训练滑动窗口1:

设置1:1:2:3:4:5:6-> 7

设置2:2:3:4:5:6:7-> 8

设置3:3:4:5:6:7:8-> 9

设置4:4:5:6:7:8:9-> 10

设置5:5:6:7:6:9:10-> 11

Set 6:6:7:8:9:10:11-> 12

非训练测试: 7:8:9:10:11:12 - > 13

培训滑动窗口2:

设置1:2:3:4:5:6:7-> 8

设置2:3:4:5:6:7:8-> 9

...

Set 6:7:8:9:10:11:12-> 13

非训练测试:8:9:10:11:12:13-> 14

我想我会在每次训练迭代中随机浏览我的训练集,说我的体重数量的30倍。我相信在我的网络中我有大约6个隐藏的神经元(即sqrt(输入*输出))。所以36 + 6 + 1 + 2偏差= 45个权重。那么44 x 30 = 1200次运行?

所以我会在每个训练滑动窗口中随机化6组1200次。

我认为由于数据量很小,我打算进行模拟运行(即重新运行与新权重相同的问题)。所以说1000次,其中1140使用随机化在滑动窗口上运行。

我有113个变量,这导致101个训练“滑动窗口”。

我的另一个问题是,如果我试图预测向上或向下运动(即因变量)。我应该匹配一个实际的#或者我是否正确地猜测了上/下运动?我想我应该拍一个实际的数字,但作为我的分析的一部分,做一个%检查这个#是否被正确猜测为上/下。

2 个答案:

答案 0 :(得分:1)

如果你有少量的数据和相对大量的训练迭代,你就会冒“过度训练”的风险 - 创建一个在测试数据上运行良好但不能概括的功能。

避免这种情况的最佳方法是获取更多的训练数据!但如果你做不到,那么你可以做两件事。一种是将训练数据分成测试和验证数据 - 使用85%进行训练,使用15%进行验证。验证意味着计算学习者在训练集上的适应度,而无需调整权重/训练。当验证数据适应性(您未接受培训)停止改善(通常会有噪音),并且您的训练数据适应性继续提高 - 停止训练。另一方面,如果你使用“滑动窗口”,你可能没有一个很好的标准来知道何时停止训练 - 适应度函数会以不可预测的方式反弹(你可能会慢慢地使每次训练迭代的效果影响较小)然而,在参数上,为了给你收敛......也许不是最好的方法,但是一些训练制度可以做到这一点)你能做的另一件事是通过一些指标来规范你的节点权重,以确保一些“平滑”的概念 - 如果你想象过度拟合一秒,你会发现在极端情况下你的健身功能会急剧地围绕你的数据集积极曲线......

至于后一个问题 - 为了使训练收敛,你的健身功能需要平稳。如果你只是使用二进制全或无适应项,那么最有可能发生的是你用来训练的任何算法(backprop,BGFS等)都不会收敛。在实践中,分类标准应该是高于阳性结果的激活,小于或等于阴性结果,并且在您的体重/参数空间中平滑变化。您可以将0视为“我确定答案已经确定”,将1视为“我确定答案已经结束”,从而实现一种适应性较差的错误猜测具有较高“成本”的适应度函数......功能如何形成可能存在微妙之处(例如,你可能对假阴性和假阳性的可接受程度有不同的看法) - 你也可能引入“不确定”的区域,其结果更接近“零重量“ - 但它应该是连续的/平滑的。

答案 1 :(得分:0)

您可以重复使用滑动窗口。

它与 bootstrapping (你的训练集)的概念基本相同;这本身就减少了培训时间,但不知道它是否真的有助于使网络更适应除训练数据以外的任何其他内容。

以下是图片格式的滑动窗口示例(使用电子表格魔术) http://i.imgur.com/nxhtgaQ.png

https://github.com/thistleknot/FredAPI/blob/05f74faf85d15f6898aa05b9b08d5363fe27c473/FredAPI/Program.cs 第294行显示了如何使用随机化运行代码,它重置位置353处的随机化,以便其余部分正常流动。

我还可以使用1(向上)或0(向下)作为我的目标值,并且网络确实收敛。