CNN_BiLSTM_Attention模型,LSTM模型,DNN(全连接神经网络)三种模型对短期日负荷曲线的预测

1.数据说明:

数据来源

是针对变压器上的负荷变化进行研究,每15分钟采集一次负荷数据,也就是说一天内的负荷曲线由4*24=96个点组成,这份数据集里不仅考虑了历史负荷数据对负荷变化的影响,还考虑了当天的温度情况。

2.训练集与测试集的划分

取2013年9月1日到2014年8月31日作为训练集,取2014年9月1日到9月30日作为测试集

输入特征:预测日的前两周数据

输出特征:预测日内96个点的大小

3.DNN代码

# -*- coding: utf-8 -*-
"""
Created on Wed Apr 13 11:02:02 2022

@author: pony
"""

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import pickle
import keras
import warnings
warnings.filterwarnings("ignore")

data = pd.read_csv("p.csv")
parts = 14
this_one = data.iloc[parts:]#取14行以后数据
bak_index = this_one.index#取索引
for k in range(1, parts + 1):
    last_one = data.iloc[(parts - k):(this_one.shape[0] - k + parts)]
    this_one.set_index(last_one.index, drop=True, inplace=True)
    this_one = this_one.join(last_one, lsuffix="", rsuffix="_p" + str(k))

this_one.set_index(bak_index, drop=True, inplace=True)
this_one = this_one.fillna(0)#用0填充缺失值
t0 = this_one.iloc[:, 0:96]#取0-96列
t0_min = t0.apply(lambda x: np.min(x), axis=0).values#每一列的最小值
t0_ptp = t0.apply(lambda x: np.ptp(x), axis=0).values#最大值和最小值的差值
this_one = this_one.apply(lambda x: (x - np.min(x)) / np.ptp(x), axis=0)#归一化
'''
划分训练集与测试集
'''
test_data = this_one.iloc[-30:]#最后30天当做测试集
train_data = this_one.iloc[:-30]
train_y_df = train_data.iloc[:, 0:96]#取前96列当做标签
train_y = np.array(train_y_df)
train_x_df = train_data.iloc[:, 96:]#取96列以后,也就是前14天的数据作为特征输入
train_x = np.array(train_x_df)

test_y_df = test_data.iloc[:, 0:96]
test_y = np.array(test_y_df)
test_x_df = test_data.iloc[:, 96:]
test_x = np.array(test_x_df)
test_y_real = t0.iloc[-30:]#测试集归一化前的真实标签
'''
建立模型
'''
import keras
import pickle
init = keras.initializers.glorot_uniform(seed=1)
simple_adam = keras.optimizers.Adam()
model = keras.models.Sequential()
model.add(keras.layers.Dense(units=512, input_dim=1434, kernel_initializer=init, activation='relu'))
model.add(keras.layers.Dense(units=256, kernel_initializer=init, activation='relu'))
model.add(keras.layers.Dense(units=128, kernel_initializer=init, activation='relu'))
model.add(keras.layers.Dropout(0.1))
model.add(keras.layers.Dense(units=96, kernel_initializer=init, activation='tanh'))
model.compile(loss='mse', optimizer=simple_adam, metrics=['accuracy'])
model.fit(train_x, train_y, epochs=100, batch_size=32, shuffle=True, verbose=True)

pred_y = model.predict(test_x)
pred_y = (pred_y*t0_ptp)+t0_min

import pickle
import matplotlib.pyplot as plt
import matplotlib
# 以下 font.family 设置仅适用于 Mac系统,其它系统请使用对应字体名称
matplotlib.rcParams['font.family'] = 'Arial Unicode MS'
import numpy as np


    
realdf = test_y*t0_ptp[0:96]+t0_min[0:96]
base = 0
error = 0
plt.figure(figsize=(20, 10))
for index in range(0, 30):
    real_array = realdf[index][0:96]
    pred_array = pred_y[index][0:96]
    pred_array[np.where(pred_array < 0)] = 0
    plt.subplot(5, 7, index + 1)
    plt.plot(range(96), real_array, '-', label="real",c='red')
    plt.plot(range(96), pred_array, '--', label="pred",c='green')
    plt.ylim(0, 250)
    base = base + np.sum(real_array)
    error = error + np.sum(np.abs(real_array-pred_array))
plt.show()
v = 100*(1-error/base)
print("Evaluation on test data: accuracy = %0.2f%% \n" % v)
# Evaluation on test data: accuracy = 74.95% 

 DNN测试集结果图(每个小图是一天,一共是30天):

4. CNN_BiLSTM_Attention模型,LSTM模型的结果分别是

 

 5.通过计算累积误差率,CNN_BiLSTM_Attention模型,LSTM模型,DNN模型的整体精度分别为:80.89%,78.68%,75.44%。

三个代码及数据

https://mbd.pub/o/bread/mbd-ZJeamZtv

  • 2
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: CNN-BiLSTM-Attention 模型是一种深度学习模型,它将卷积神经网络 (CNN)、双向长短时记忆网络 (BiLSTM) 以及注意力机制 (Attention) 结合在一起。CNN 负责提取文本中的特征,BiLSTM 则负责捕捉文本中的上下文信息,而 Attention 则能够根据文本中的语境来自动调整模型对不同单词的重视程度。这种模型通常用于自然语言处理 (NLP) 任务,如文本分类、序列标注等。 ### 回答2: cnn-bilstm-attention模型是一种在自然语言处理领域中广泛使用的深度学习架构,其结构由卷积神经网络CNN)、双向长短时记忆网络(BiLSTM)以及注意力机制(Attention)构成,旨在提高文本分类、序列标注、机器翻译等任务的准确性。 CNN卷积神经网络主要用于提取文本特征。它通过将文本转换为一个二维的矩阵,再使用多个卷积核对文本进行卷积操作,从而提取出文本的不同特征。通过这种方式,CNN能够捕获局部特征,提高模型的特征提取能力,得到文本的特征表示。 BiLSTM是一种双向的长短时记忆网络,它囊括了前向和后向两个方向的信息,可以更好地捕捉文本中的上下文信息。相比于传统的LSTM,BiLSTM不仅有前向状态,还有后向状态,因此更适合处理自然语言中的顺序关系。 Attention注意力机制是一种重要的思想,它通过对文本不同位置的特征赋予不同的权重,在文本分类、机器翻译等任务中取得了很好的效果。在CNN-BiLSTM-Attention模型中,注意力机制可以让模型更加关注文本中重要的部分,从而提高模型预测准确率。 综合以上三个部分,CNN-BiLSTM-Attention模型能够有效地提取文本特征,并在分类、序列标注、机器翻译等任务上取得更加优秀的预测效果。在实际应用中,可以根据具体任务,进行模型的参数设置和调整,以达到更好的性能。 ### 回答3: cnn-bilstm-attention模型是一种用于自然语言处理(NLP)任务的深度学习模型。它由三部分组成:卷积神经网络(Convolutional Neural Network,CNN)、双向长短时记忆网络(Bidirectional LSTM,biLSTM)和注意力机制(Attention)。这三个部分分别负责提取句子中的局部特征、全局特征和重要信息。 首先,CNN模块可以对输入文本进行卷积操作,从而捕捉句子中的局部特征,例如单词和短语的结构和语义。CNN模块包含多个卷积层和池化层,可以逐层提取更加复杂的特征。 其次,biLSTM模块负责对整个句子进行编码,将句子中的上下文信息考虑进去。双向LSTM能够同时从前向和后向推理,可以有效地处理长距离依赖关系。因此,biLSTM模块可以获取更全面的句子表示,将句子中的全局特征学习出来。 最后,Attention机制可以在biLSTM的输出中选择性地聚焦某些部分,从而找到句子中最重要的信息。在Attention机制中,首先通过一个矩阵乘法将编码后的句子表示和一个可学习的向量进行相乘,得到每个位置的重要度分数。然后将这些分数进行归一化处理后,用它们作为权重对编码后的句子表示进行加权求和,得到最终的句子表示。 综上所述,cnn-bilstm-attention模型可以对自然语言文本进行深度学习建模,提取句子中的局部特征、全局特征和重要信息,从而可以用于实现各种NLP任务,例如文本分类、情感分析、机器翻译等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深度学习的奋斗者

你的鼓励是我努力的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值