全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 数据分析与数据挖掘
1257 0
2020-12-10
能源行业的深度无监督学习–行动中的自动编码器
在日短文章中,我将讨论非监督学习尤其是在能源d omain。该博客将主要关注实时深度学习的应用,而不是强调基本概念。但是首先,让我们看看无监督机器学习的含义是什么?它是机器学习的一个分支,它处理从数据集中识别隐藏模式的问题,并且不依赖于要标记的数据中目标变量的必要性。因此,这里使用算法来发现数据的基础结构,例如数据集群的存在,奇数数据检测等。
当所研究的期望变量的目标值未知时,深度学习技术的无监督形式用于查找目标(期望变量)与数据中其他变量之间的关系以得出结果(即可能的值目标)。
业务问题
如上所述,该业务案例将来自能源部门,尤其是(太阳能面板)能源的可再生形式。使用光伏电池和硅太阳能电池将辐射转换成电能的太阳能电池板在世界范围内已变得非常流行。越来越成为未来必不可少的能源选择。考虑一个场景,我在特定站点A上安装了太阳能电池板一段时间,并从电表板的计量电中节省了资金,从而获得了良好的收益。
现在,我希望在其他地理位置/区域的其他站点B也安装类似的面板。但是,在我进行另一笔投资之前,根据从站点A上已安装的面板获得的功率,我可以知道在站点B上可以获得多少功率?这将帮助我针对该位置的投资和电力需求做出正确的决定。现在让我们看看问题陈述
问题陈述
根据过去M个月中地点A,B'处已安装的太阳能电池板所产生的功率,预测在将来的任何日期,地点B,B和B'在附近,即在相同的地理位置。
太阳数据集:(239538,10)
该数据来自2019年12月至2020年10月期间的特定站点,并且具有10个功能以及23万行。转换为NumPy数组后,将具有以下结构
array(
[2019.,12.,4.,…,6.,0.,0.],
[2019.,12.,4.,…,6.,1.,0.],
[2019., 12.,4.,…,6.,2.,0.],
…,
[2020.,10.,4.,…,17.,57.,0.],
[2020.,10.,4 。,…,17.,58.,0.],
[2020.,10.,4.,…,17.,59.,0.]]]
太阳能电池板的主要动力是日光,因此要适应季节性和其他因素,该数据集包括“年”,“月”,“季度”,“星期几”,“星期几”,“ Dayofyear”,“ Weekofyear”,“ Hour”,“ Minute” 等作为主要预测变量,而“ Generated Power”作为因变量。一天的典型发电量看起来很像高斯曲线
自动编码器-功率趋势图
我们可以看到,发电时间为6.00 AM至晚上18:00(阳光小时),以分钟为单位。功率最初较小,然后逐渐增加,并在中午左右的某个时候达到峰值,然后在一天结束时逐渐减小,似乎继承了钟形曲线的质量。由此我们可以直观地推断出所有太阳能电池板都将具有这种模式,而不管其放置在哪个地理区域中,唯一的区别将在于该特定站点上产生的电量,这反过来可能取决于很多例如季节性,天气等因素,以及可用日照等其他因素。
自动编码器(AE)的强大功能
自动编码器是一种无监督的学习技术,用于压缩原始数据集,然后从压缩数据中对其进行重构。这里有一个编码器和解码器组件,可以完成这些功能。在这里,神经网络的主要思想是将输入转换成很少失真的输出。也就是说,在输出与图像降噪等输入非常相似的情况下,自动编码器会很好地工作。
自动编码器还用于特征提取,尤其是在数据尺寸较大的情况下。传统上,自动编码器通常在Images数据集中使用,但在这里我将在数值数据集上进行演示。概念保持不变。在我的示例中,我将利用AE的这一特性,因为在我的情况下,如上所述,我在另一个站点中获得的功率输出将与当前站点非常相似。我将在Keras中演示AE的2种变体,一种基于LSTM的AE和传统AE。
情况1:基于LSTM的自动编码器
我具有从2019年12月到2020年10月的两个站点A和B'的历史数据。站点B与站点B'处于同一地理边界。我希望找到基于Sita A,B'的历史数据在站点B产生的功率。我没有有关目标站点B的任何信息。
X1和X3是站点A的规范化数据,X3和X4是站点B'的规范化数据。数据集具有10个非常相似的特征,但X2s [:,9]和X4s [:,9]的微小变化在这些位置上具有功效值。我们将尝试使用简单的LSTM自动编码器将X1转换为X2。我在这里使用平均绝对误差作为损失和“线性”激活,因为我需要使预测功率值非常接近实际值(在这种情况下为站点B)。
这只是一个示例代码,旨在说明如何构建基于LSTM的AE,并且需要使用不同的优化器/多层/纪元来调整超参数,以取??得很好的近似值。请参考下面的代码
从keras.models导入顺序
从keras.layers导入LSTM
从keras.layers导入Dense,Dropout
从keras.layers导入RepeatVector
从keras.layers导入TimeDistributed
从keras.callbacks导入EarlyStopping,M
odelCheckpoint
从keras.regularizers导入l1
从喀拉拉邦进口正则化器
#定义模型
模型= Sequential()
model.add(LSTM(256,激活='线性',input_shape =(X1801861s.shape [1],1),activity_regularizer = regularizers.l1(10e-,return_sequences = False))
model.add(RepeatVector(X1s.shape [1]))
model.add(LSTM(256,激活='线性',return_sequences = True))
model.add(TimeDistributed(Dense(1,activation ='linear'))))
亚当= keras.optimizers.Adam(lr = 0.001)
model.compile(optimizer = adam,loss ='MAE')
model.summary()
earlyStopping = EarlyStopping(显示器='val_loss',耐心= 30,详细= 0,模式='min')
mcp_save = ModelCheckpoint('sola-001.mdl_wts.hdf5',save_best_only = True,monitor ='val_loss',mode ='min')
历史= model.fit(X1s,X2s,epochs = 500,batch_size = 1024,callbacks = [earlyStopping,mcp_save],validation_data =(X3s,X4s)
_________________________________________________________________
图层(类型)输出形状参数
================================================== ===============
lstm_8(LSTM)(无,256)264192
_________________________________________________________________
repeat_vector_4(RepeatVecto(无,10,256)0
_________________________________________________________________
lstm_9(LSTM)(无,10,256)525312
_________________________________________________________________
time_distributed_4(TimeDist(None,10,1)257
================================================== ===============
参数总计:789
可训练的参数:789
不可训练的参数:0
下图给出了有关A和B'的站点B预测。期望它应该非常接近B'。在这里,我们使用站点A,B'的数据得出对未知站点B的预测。下图是针对这些站点随机选取的3天趋势
该图表显示了三个站点A,B'和目标站点B在300天内的峰值功率
情况2:传统的自动编码器模型
input_dim = X1s.shape [1]
encoding_dim = 10
input_layer =输入(shape =(input_dim,))
编码器=密集(encoding_dim,激活=“线性”,activity_regularizer = regularizers.l1(10e-5))(input_layer)
解码器=密集(input_dim,激活='线性')(编码器)
编码器=型号(input_layer,encoder)
自动编码器=模型(输入=输入层,输出=解码器)
亚当= keras.optimizers.Adam(lr = 0.001)
earlyStopping = EarlyStopping(显示器='val_loss',耐心= 30,详细= 0,模式='min')
mcp_save = ModelCheckpoint('sola-002.mdl_wts.hdf5',save_best_only = True,monitor ='loss',mode ='min')
autoencoder.compile(optimizer = adam,loss ='MAE')
autoencoder.summary()
型号:“ functional_3” ________________________________________________________________
图层(类型)输出形状参数
================================================== ===============
input_1(InputLayer)[(无,10)] 0
_________________________________________________________________
密(密集)(无,10)110
_________________________________________________________________
density_1(密集)(无,10)110
================================================== ===============
参数总计:220
可训练的参数:220
不可训练的参数:0
在训练LSTM /常规AE模型后评估模型:
从sklearn.metrics导入mean_absolute_error,mean_squared_error,mean_squared_log_error
导入数学
mean_absolute_error(a,pd),math.sqrt(mean_squared_error(a,pd)),mean_absolute_error(act,p),math.sqrt(mean_squared_error(act,p))
楷模
MAE –峰值功率
MSE-峰值功率
MAE-即时电源
MSE-即时电源
LSTM AE
16.425307183116885
36.75704731479356
1.8404600416117294
12.231826378081937
常规AE
16.415917917337666
38.456323346248176
2.859275677961502
17.71553061457107
p –当天的即时电量;pd –一天中的峰值功率
act –一天中的实际瞬时功率;a –当天的实际峰值功率
最后,我们随机绘制了站点B'和新的期望站点B在30天的峰值功率
从上面可以清楚地看到,该模型在许多天的对应时间上的预测峰值接近于在站点B'处发现的实际值,而在其他几天则几乎没有宽泛的变化。好吧,在此博客中,我仅强调了自动编码器的功能以及它如何帮助检测未知信息。十分令人惊奇,不是吗?在现场,我们需要包括一些特定于领域的变量,并在超过100万个数据点上训练模型,以获得更好的结果。
题库
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群