当前位置: 首页 > news >正文

短期电力负荷

🏡作者主页:点击! 

🤖编程探索专栏:点击!

⏰️创作时间:2024年11月8日9点40分

论文发表

  1. 来自《IEEE Transactions on Smart Grid》2022年7月的13卷第4期,《IEEE Transactions on Smart Grid》在中科院升级版中,大类工程技术位于1区,小类工程:电子与电气位于1区,非综述类期刊。
  2. 作者包括IEEE会员Nakyoung Kim、IEEE学生会员Hyunseo Park、IEEE高级会员Joohyung Lee,以及IEEE高级会员Jun Kyun Choi。

3.链接地址icon-default.png?t=O83Ahttps://ieeexplore.ieee.org/document/9732470

问题背景

一. 基本问题

短期电力负荷预测(STLF),即对未来几小时到几周的电力负荷进行准确预测。

二. 本论文发现的问题

在电力负荷预测中,由于数据的高维性和波动性,传统的特征提取方法往往难以捕捉到负荷数据中的复杂模式和关系。

对于论文发现问题的解决方案:

  1. 嵌入过程:接下来,通过学习标签序列中的时间和维度关系来提取特征。为了捕捉这些关系,提出了一个带有卷积层的网络模型,该模型采用数学分析设计的多输出结构。通过训练,可以从任何任意多维标签中提取特征。

复现:

一. 多维特征提取的提取框架:

  1. 时间序列切分,聚类,打标签
def segment_time_series(X, T):"""将时间序列 X 分段为长度为 T 的子序列。X: 多元时间序列 (N x D), N 为时间序列长度, D 为维度数T: 每个子序列的长度返回: 分段后的子序列集合,形状为 (N_segment, T, D)"""N, D = X.shapeN_segment = N // T  # 计算分段后的子序列数量segments = np.array([X[i*T:(i+1)*T] for i in range(N_segment)])return segments# 2. 模式发现
def discover_patterns(segments, K):"""对分段后的子序列进行聚类,提取模式。segments: 分段后的子序列集合, 形状为 (N_segment, T, D)K: 聚类的数量,即模式的数量返回: 每个维度的模式集合,形状为 (K, T, D)"""N_segment, T, D = segments.shapepatterns = []# 对每个维度单独进行聚类for d in range(D):# 提取第 d 个维度的所有子序列data_d = segments[:, :, d]  # 形状为 (N_segment, T)# 使用 KMeans 进行聚类kmeans = KMeans(n_clusters=K, random_state=42)kmeans.fit(data_d)# 保存聚类中心(模式)patterns.append(kmeans.cluster_centers_)# patterns 为 D 维的聚类中心集合,形状为 (D, K, T)return np.array(patterns)# 3. 数据标记
def tag_data(segments, patterns):"""对每个子序列打标签,标签为距离最近的聚类中心。segments: 分段后的子序列集合, 形状为 (N_segment, T, D)patterns: 每个维度的聚类中心集合,形状为 (D, K, T)返回: 每个子序列的标签集合,形状为 (N_segment, D)"""N_segment, T, D = segments.shapeK = patterns.shape[1]  # 模式的数量labels = np.zeros((N_segment, D), dtype=int)# 对每个维度进行标记for d in range(D):for i in range(N_segment):# 计算当前子序列与所有聚类中心的距离distances = np.linalg.norm(segments[i, :, d] - patterns[d], axis=1)# 选择最小距离的聚类中心的标签labels[i, d] = np.argmin(distances)return labels

2.嵌入网络定义:

class EmbeddingNetwork(nn.Module):def __init__(self, D, K, M):super(EmbeddingNetwork, self).__init__()# 卷积层,用于提取输入张量的特征self.conv = nn.Conv2d(in_channels=D, out_channels=M, kernel_size=(1, K), stride=1)  self.pool = nn.AdaptiveAvgPool2d((1, 1))# 两个并行的全连接层,用于预测两个维度的输出标签self.fc1 = nn.Linear(M, K)self.fc2 = nn.Linear(M, K)def forward(self, x):# 卷积层print(x.shape)x = self.conv(x)  # 卷积操作print(x.shape)x = self.pool(x)  # 使用自适应平均池化,将每个样本缩减为大小为 (M, 1)print(x.shape)x = x.view(x.size(0), -1)  # 展平张量,形状变为 (batch_size, M)# 两个并行的全连接层output1 = self.fc1(x)  # 维度1的输出output2 = self.fc2(x)  # 维度2的输出# 将两个输出拼接在一起,形成最后的输出output = torch.stack((output1, output2), dim=1)return output

二. 论文中进行性能测试的MultiTag2Vec-STLF模型:

class FeatureExtractor(nn.Module):def __init__(self, embedding_network):super(FeatureExtractor, self).__init__()self.conv = embedding_network.convdef forward(self, x):x = self.conv(x)  # 卷积层x = x.view(x.size(0), -1)  # 展平张量return x# 初始化特征提取器
feature_extractor = FeatureExtractor(embedding_network)# 4. 定义 MultiTag2Vec-STLF 模型
class MultiTag2VecSTLF(nn.Module):def __init__(self, input_dim, hidden_dim, output_dim, feature_extractor):super(MultiTag2VecSTLF, self).__init__()self.feature_extractor = feature_extractor# 冻结特征提取器的参数for param in self.feature_extractor.parameters():param.requires_grad = False# 双向 LSTM 层self.lstm = nn.LSTM(input_dim, hidden_dim, batch_first=True, bidirectional=True)# 自注意力机制self.attention = nn.MultiheadAttention(embed_dim=2 * hidden_dim, num_heads=1, batch_first=True)# 全连接层用于预测下一天 24 小时的负荷self.fc = nn.Linear(2 * hidden_dim, output_dim)def forward(self, x):x = self.feature_extractor(x)x = x.view(x.size()[0], seg_c, -1)# LSTM 前向传播lstm_out, _ = self.lstm(x)  # lstm_out 形状: (batch_size, seq_length, 2 * hidden_dim)# 注意力机制attn_output, _ = self.attention(lstm_out, lstm_out, lstm_out)  # 计算自注意力,形状: (batch_size, seq_length, 2 * hidden_dim)context_vector = torch.sum(attn_output, dim=1)  # 计算上下文向量,形状: (batch_size, 2 * hidden_dim)# 全连接层预测output = self.fc(context_vector)  # 预测输出,形状: (batch_size, output_dim)return output

三. 与整数编码(IE)的特征处理方法进行对比

使用论文中的GEFCom2014数据集中的温度和负荷数据,训练的参数设置按照论文中最优效果的参数设置。论文中使用的温度数据来自于数据集中的哪一个气象站,论文中没有说,此处是选择w1气象站的温度数据训练的结果和论文中的RMSE指标不太一样,但是从IE和MultiTag2Vec的RMSE指标对比可以看到,论文提出的特征提取方法具有一定优势。

特征处理方法

RMSE

IE

34.0563

MultiTag2Vec

32.1983

部署方式

Python 3.9.12
Pytorch
以及其他的常用python库

成功的路上没有捷径,只有不断的努力与坚持。如果你和我一样,坚信努力会带来回报,请关注我,点个赞,一起迎接更加美好的明天!你的支持是我继续前行的动力!"

"每一次创作都是一次学习的过程,文章中若有不足之处,还请大家多多包容。你的关注和点赞是对我最大的支持,也欢迎大家提出宝贵的意见和建议,让我不断进步。"

神秘泣男子


http://www.mrgr.cn/news/68493.html

相关文章:

  • Java反射原理及其性能优化
  • abap 可配置通用报表字段级日志监控
  • Excel 无法打开文件
  • Redis集群模式之Redis Sentinel vs Redis Cluster
  • 基于C++的决策树C4.5机器学习算法(不调包)
  • 掌握 PyQt5:从零开始的桌面应用开发
  • C++初阶学习第十弹——深入讲解vector的迭代器失效
  • 深度图和深度值
  • 无处不在的算法,竟然帮你找到理想对象!
  • Docker Compose部署Rabbitmq(Dockerfile安装延迟队列)
  • ffmpeg视频滤镜:组合两个视频为立体视频- framepack
  • cooladmin使用整理
  • Mac切换输入法也有高超技巧
  • MySQL多表查询习题
  • 服务器在运行中,由于另一个程序正在运行中,此操作无法完成
  • 创新教学:篮球场景分割
  • Elasticsearch中的数据流(Data Streams)和索引(Indices)之间是什么关系?(ChatGPT回答)
  • 教你如何把产品选宣传册制作成特效拉满的翻页电子宣传册
  • 1024编程——让我们的孩子对话未来
  • 100+SCI科研绘图系列教程(R和python)
  • c++-----------------多态
  • 自动泊车端到端算法 ParkingE2E 介绍
  • 深⼊理解指针(3)【数组与指针】
  • js 如何判断是否是双击
  • 三维扫描建模对文博行业有什么影响?
  • 如何使用函数模板和类模板?模板的优点是什么?