气体消耗异常值检测-神经网络项目。结果不好


10

我试图通过建立神经网络模型来检测一些荷兰建筑物的能源消耗中的异常值。我的成绩很差,但找不到原因。

我不是专家,所以我想问你我可以改进什么,我做错了什么。这是完整的描述:https : //github.com/denadai2/Gas-consumption-outliers

神经网络是具有反向传播的FeedFoward网络。如此处所述我将数据集拆分为一个包含41'000行,9个要素的“小型”数据集,并尝试添加更多要素。

我训练了网络,但结果为14.14 RMSE,因此它无法很好地预测气体消耗,因此我无法连续运行良好的异常值检测机制。我发现在某些论文中,即使他们预测了每日或每小时的用电量,也存在诸如MSE = 0.01的误差。

我可以改善什么?我究竟做错了什么?你能看一下我的描述吗?


2
你是什​​么意思,不好的结果?描述您的过程,结果以及它们与预期的不同之处,而不是仅链接到git存储库。否则,这种讨论对任何人都没有用。
航空

:D。我在页面上添加了描述:“结果为14.14 RMSE,因此它不能很好地预测气体消耗,因此我无法运行良好的离群值检测机制。我发现在某些论文中,即使他们预测了每天或每小时的电力消耗,它们的误差例如MSE = 0.01。”
marcodena 2014年

1
@marcodena这是一个质量检查网站,其他人需要知道您要解决的问题,以便他们理解答案,并希望能够将其用于自己的问题。这就是AirThomas的意思,这也是为什么如果您可以描述自己在做什么以及您确实认为错在哪里会很好的原因。如果您的git-hub页面的链接发生更改,则此处的链接将无效,其他人将无法理解问题所在。请花一点时间使您的问题自成一体。谢谢。
鲁本斯2014年

1
当您发现问题需要很长时间才能解释时,那就是最重要的是花时间向他人明确,详细地讨论您的研究/尝试向他人解释您的问题。通常在此过程中,您会自己找到部分或全部答案。这不仅是一种很棒的感觉,如果您发现的内容对他人有用,您仍然可以张贴您花了很多时间的问题以及您想出的答案。
航空

1
只是澄清一下,当您提到“某些论文中存在MSE = 0.01之类的错误”时,您是否引用了所使用的同一数据集?还是完全不同的数据集?
insys 2014年

Answers:


8

只是一个想法-您的数据是高度季节性的:每天和每周的周期都非常明显。因此,首先,尝试分解变量(天然气和电力消耗,温度和太阳辐射)。这是有关R的时间序列分解的不错的教程。

获得趋势和季节成分之后,最有趣的部分开始了。这只是一个假设,但我认为,通过时间序列分析(例如ARIMA模型),天然气和电力消耗变量将是可以完全预测的。从我的角度来看,这里最引人注意的部分是尝试使用可用数据(温度异常,太阳辐射,风速)来预测分解后的残差。我想,这些残差将是异常值,您正在寻找。希望您会发现这很有用。


3

在您的训练笔记本中,您将以20个时期的形式呈现训练结果。您是否尝试过更改该参数以查看它是否影响您的性能?这是反向传播的重要参数。

正如用户tomaskazemekas指出的那样,为了估计模型参数,绘制学习曲线是一种非常好的方法。除此之外,您还可以使用模型参数(例如,训练时期或隐藏层大小)对训练和验证错误来创建绘图。这将使您了解偏差/方差的权衡,并帮助您为参数选择合适的值。一些信息可以在这里找到。自然,最好保留一小部分数据用于(第三个)测试集。

顺便提一句,似乎增加模型中神经元的数量并未显示出RMSE的显着改善。这表明您还可以尝试使用更简单的模型,即减少神经元,并查看模型的行为。

实际上,我建议(如果您还没有这样做的话)首先尝试使用很少或没有参数的简单模型,例如线性回归,并将结果与​​文献进行比较,以进行健全性检查。


在改进了模型A LOT之后,我添加了一些图形。在github中有新步骤。请问如何在时间序列问题中应用线性回归?:(
marcodena 2014年

2

这里的主要问题是,即使在尝试应用异常检测算法之前,您也无法使用神经网络获得足够好的燃气消耗预测。

如果此处的主要目标是达到可以使用异常检测算法的阶段,并且您声明可以访问针对此问题成功应用线性回归的示例,则此方法可能会更有成效。成功的机器学习应用程序的原理之一是,在根据结果进行最终选择之前,可以尝试几种不同的算法。

您选择调整神经网络性能时,可以使用学习曲线来绘制不同超参数的变化对错误率的影响。可以修改的超参数是:

  • 功能数量
  • 多项式的阶数
  • 正则化参数
  • 网络中的层数

最佳设置可以通过交叉验证集的性能来选择。


我添加了一些图形,您现在也可以检查参数:)
marcodena 2014年

2

在您的笔记本中,我没有看到您的神经网络模型,您能否指出正在使用哪个库,拥有多少层以及正在使用哪种类型的神经网络?

在您的笔记本中,似乎您正在使用嘈杂和离群的数据集训练神经网络,我认为您应该在没有任何离群值的数据集上训练神经网络,以便可以从预测值中看到观察距离神经网络来标记观察值是否异常。

我写了夫妇东西在时间序列信号的异常检测,如sobach提到的,你可以使用FFT(上述第一个链接),以获得在信号的总体趋势数据是季节性很强。在获得耗气量中的频率分量之后,您可以查看高频分量以得出异常值。

另外,如果您要坚持使用神经网络获取季节性数据,则可能需要检查递归神经网络,因为它们可以比以往的神经网络更好地结合过去的观察结果,并且可以为您拥有的数据提供更好的结果。


我尝试了您的FFT方法,但我真的不知道如何使用数据设置频率阈值和幅度。我会继续寻找,但是如果您能帮助我……
marcodena 2014年

我还添加了消息来源
marcodena 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.