风能预测学习
基于机器学习&深度学习的风能预测方面的学习
计划
阅读神经网络相关文献,尝试使用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基本操作
- 照着教程的三个小项目手打了一遍代码(学会了使用keras给神经网络添加正则化,包括权重正则化和dropout正则化)
- 学习TensorFlow的官方教程time_series
晚上:学习将时间序列数据转化为监督学习数据
非常重要的操作步骤:How to Convert a Time Series to a Supervised Learning Problem in Python
思考:根据数据集所具有的特征,我接下来要做:
利用风能的多维度的数据(如气候、温度、湿度、发电量等)构建LSTM网络(需转化为监督学习数据),并预测单一指标(如发电量)
个人认为老师的要求为:给出小时线、日线、周线做出趋势预测,因此首先攻克该目标,实战练习:LSTM实战,做到一半,明天继续。
2020.2.17
上午:完成实战练手,效果如下
(红色为预测趋势,蓝色为原始数据)
evaluate效果:
反归一化之后和原数据对比,比较给力:
下午:总结步骤+继续练习
步骤总结写入博客中
完成air_line_predict 练手,并尝试不同参数作简要比较
晚间:
已完成air_line_predict项目练手,经过一番折腾,得出如下结果
这里使用前60%数据为训练集,中间20%为验证集,最后20%为测试集进行训练和预测,实验效果较好的为( input -> 8 -> 4-> output(1) )的四层LSTM网络(因为数据量实在太小),如下图
- evaluate结果
- 总体趋势出现了滞后,调了很久都没有缓解,查阅相关资料得出,可能是由于数据量过小的原因(只有100+),LSTM对于过小数据量总是有滞后现象,到目前为止我仍未查到相关解决方法,但在反归一化后得出的结果还算凑合?(如下图)
- 测试集的趋势差不多预测对了,幅度偏大
2020.2.18
上午:进行beijing_air_quality数据集的预测练习(数据集见链接),利用维数较多的数据(11维)预测后期趋势,具体情况如下
数据集中有一栏“风向”为categorical数据,观察发现仅4个类别,于是采用OneHot编码
采用 利用过去1个时间点的数据预测未来1个时间点的数据(seq2seq) 的思想
LSTM网络采用如下结构(输入 -> 隐含层50个神经元 -> 输出层1个神经元)
训练参数为(epoch=50, batch_size=72)(训练集:验证集:测试集=3:1:1)并且实验初期发现似乎出现过拟合现象(val_loss不降反增),于是采用(patience=10)的回调
loss对比如下
在测试集上的对比
反归一化后对比
中午:仍旧使用上午那组数据,利用其它数据预测风速,可以间接达到预测风力的目的(先做一次尝试),结果如下
采用相同的LSTM模型(加回调,无正则化),直接进行预测,发现使用mse评估测试集的loss特别低,效果非常好
由于数据集范围较广,数据是以 数据/1h的形式给出,所以无法预测1小时线,下面给出了此模型对测试集的 四小时线、日线、周线 的预测图(数据范围随机抽取)
可以看出,由于数据间隔叫大,4小时线预测较为不准确,但趋势正确,而日线预测数据和原始数据几乎重合,周线数据除了个别数值有抖动现象,其他也吻合得非常好
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!