【发布时间】:2018-10-26 19:10:26
【问题描述】:
我正在研究 James McCaffrey (download) 在 time-series regression 上的有趣文章中的代码。
这实质上是使用机器学习来生成对给定航空公司数据的预测和预测。
这是我使用他文章中的代码和数据生成的图表。如您所见,一切似乎都正常工作。
当我试图弄乱随机变量时,就会出现问题。他专门用0 为System.Random 对象播种,如下所示:this.rnd = new System.Random(0);(在NeuralNetwork 构造函数中)。该程序仅在分配网络的初始权重以及随机化要处理的数据顺序时才使用rnd 变量。种子应独立于数据(即处理的顺序和分配的随机权重不应影响结果)。
但是,请注意当我仅将行 this.rnd = new System.Random(0); 更改为 this.rnd = new System.Random(1); 时会发生什么。在这里,除了用1 而不是0 为System.Random 对象播种之外,我什么也没做。现在看看结果:
它仍然能够学习和预测数据,但是,预测完全错误!为什么更换种子会对结果产生如此显着的影响?从理论上讲,处理哪些订单数据或起始权重是什么都无关紧要,因为这是网络的重点,改变偏差直到它达到解决方案。我有什么遗漏吗?
【问题讨论】:
-
(注意:我没有看你的参考资料)你怎么知道“预测完全错了!”?如果您要对数据进行完整的 ARIMA 分析,包括对预测的置信度测量,您可能会发现两个预测都在模型的置信度范围内。我假设您正在使用
rnd变量在模型中生成噪声。如果您始终使用相同的种子,您将始终得到相同的噪音。如果你改变种子,噪音就会改变,你会看到输出的变化——但两个预测都可能“正确” -
从数据中可以看出每个峰都比上一个高一点的规律。这与种子
0的预测数据以及文章中的图像相匹配。此外,任何随机权重都不应该对数据产生影响,因为神经网络会调整权重以找到解决方案。在这两种情况下,它都以几乎 100% 的准确率预测数据,但预测数据完全不同。为什么在预测相同的情况下会有这样的差异,如何最大化置信度以获得相同的预测? -
如果你只有一个神经元,预测的准确性会很差——所以增加神经元的数量来提高准确性。如果您有太多个神经元,也就是说,如果模型复杂度太高,则可能会出现“过度拟合”,从而产生良好的训练预测但预测不佳。一个简单的测试是降低模型复杂度并重新训练,看看您是否在降低复杂度的模型结果分析中观察到相同的现象。
-
使用
0的种子并减少到2输入,预测质量会受到影响,并且无法创建有意义的预测。对于1的种子,我得到了类似的结果。当我将输入增加到25时,预测准确性提高了,但预测的峰值要低得多。同样,1种子的结果相似。这是否意味着0的种子和5的输入大小只是恰好与数据非常吻合的“幻数”?如何为我的数据找到自己的“神奇数字”? -
不,数据是一样的。
rnd变量仅影响初始权重和用于训练的顺序。
标签: c# random neural-network time-series regression