风能预测学习

基于机器学习&深度学习的风能预测方面的学习

计划

  • 阅读神经网络相关文献,尝试使用keras搭建合适的NN模型(尝试LSTM的RNN网络)预测

  • 阅读facebook论文Forcasting at Scale,搞清楚fbprophet原理(时间序列分解+机器学习拟合),尝试使用facebook开源第三方库(有R和python两个接口)fbprophet预测风能时间序列

    参考文献&网址:机器之心 Facebook时间序列预测算法Prophet的研究

日程记录

2020.2.15

  • 搞明白了神经网络的基本原理、发展和分类
  • 搞明白了BP反向传播算法(链式求导法则)
  • 搞明白了CNN基本原理(卷积层+池化层+Flatten层)
  • 搞明白了RNN基本原理(tanh激活函数)
  • 搞明白了LSTM(长短时记忆网络)基本原理,及其如何解决RNN的梯度发散问题(使用“门”结构)
  • 明确了时间序列问题处理的合适模型(RNN、LSTM、机器学习拟合 等)

  • 明天开始实战keras

2020.2.16:

  • 花了一上午时间安装TensorFlow,真是太麻烦了,就目前我的情况来看,一定不要安装2.1.0版本的,用notebook会报ERROR:root:Internal Python error in the inspect module.的error(还有一堆找不到模块的error),因此暂时使用2.0.0版本的tf,安装代码如下

    1
    2
    > pip uninstall tensorflow
    > pip install -i https://pypi.tuna.tsinghua.edu.cn/simple tensorflow==2.0.0
  • 下午:学习keras基本操作

  • 晚上:学习将时间序列数据转化为监督学习数据

  • 非常重要的操作步骤:How to Convert a Time Series to a Supervised Learning Problem in Python

思考:根据数据集所具有的特征,我接下来要做:

  1. 利用风能的多维度的数据(如气候、温度、湿度、发电量等)构建LSTM网络(需转化为监督学习数据),并预测单一指标(如发电量)

    个人认为老师的要求为:给出小时线、日线、周线做出趋势预测,因此首先攻克该目标,实战练习:LSTM实战,做到一半,明天继续。

2020.2.17

  • 上午:完成实战练手,效果如下

    • (红色为预测趋势,蓝色为原始数据)下载.png

    • evaluate效果:image.png

    • 反归一化之后和原数据对比,比较给力:image.png

  • 下午:总结步骤+继续练习

    • 步骤总结写入博客中

    • 完成air_line_predict 练手,并尝试不同参数作简要比较

  • 晚间:

    • 已完成air_line_predict项目练手,经过一番折腾,得出如下结果

      这里使用前60%数据为训练集,中间20%为验证集,最后20%为测试集进行训练和预测,实验效果较好的为( input -> 8 -> 4-> output(1) )的四层LSTM网络(因为数据量实在太小),如下图

    image.png

    • evaluate结果

    image.png

    image.png

    • 总体趋势出现了滞后,调了很久都没有缓解,查阅相关资料得出,可能是由于数据量过小的原因(只有100+),LSTM对于过小数据量总是有滞后现象,到目前为止我仍未查到相关解决方法,但在反归一化后得出的结果还算凑合?(如下图)

    image.png

    • 测试集的趋势差不多预测对了,幅度偏大

    image.png

2020.2.18

  • 上午:进行beijing_air_quality数据集的预测练习(数据集见链接),利用维数较多的数据(11维)预测后期趋势,具体情况如下

    • 数据集中有一栏“风向”为categorical数据,观察发现仅4个类别,于是采用OneHot编码

    • 采用 利用过去1个时间点的数据预测未来1个时间点的数据(seq2seq) 的思想

    • LSTM网络采用如下结构(输入 -> 隐含层50个神经元 -> 输出层1个神经元)

      image.png

    • 训练参数为(epoch=50, batch_size=72)(训练集:验证集:测试集=3:1:1)并且实验初期发现似乎出现过拟合现象(val_loss不降反增),于是采用(patience=10)的回调

    • loss对比如下

      image.png

    • 在测试集上的对比image.png

    • 反归一化后对比

image.pngimage.png

  • 中午:仍旧使用上午那组数据,利用其它数据预测风速,可以间接达到预测风力的目的(先做一次尝试),结果如下

    • 采用相同的LSTM模型(加回调,无正则化),直接进行预测,发现使用mse评估测试集的loss特别低,效果非常好image.png

      image.png

    • 由于数据集范围较广,数据是以 数据/1h的形式给出,所以无法预测1小时线,下面给出了此模型对测试集的 四小时线、日线、周线 的预测图(数据范围随机抽取)

      image.png

      image.png

      image.png

    • 可以看出,由于数据间隔叫大,4小时线预测较为不准确,但趋势正确,而日线预测数据和原始数据几乎重合,周线数据除了个别数值有抖动现象,其他也吻合得非常好


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!