【论文复现】短期电力负荷

在这里插入图片描述

作者主页: 七七的个人主页
文章收录专栏: 论文复现
欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖

短期电力负荷

  • 论文发表
  • 问题背景
    • 一. 基本问题
    • 二. 本论文发现的问题
  • 对于论文发现问题的解决方案:
  • 复现:
    • 一. 多维特征提取的提取框架:
    • 二. 论文中进行性能测试的MultiTag2Vec-STLF模型:
    • 三. 与整数编码(IE)的特征处理方法进行对比
  • 部署方式

本文所涉及所有资源均在这里可获取。

论文发表

  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. 链接地址。

问题背景

一. 基本问题

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

二. 本论文发现的问题

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

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

在这里插入图片描述
本论文通过提出一个名为MultiTag2Vec的特征提取框架来解决短期电力负荷预测(STLF)中的特征工程问题。该框架包括两个主要过程:标记(tagging)和嵌入(embedding)。

  1. 标记过程:首先,通过从高维时间序列数据中提取关键信息,将电气负荷数据转换成紧凑形式。这一步通过聚类子序列来发现重复出现的模式,并为每个模式分配唯一的标签,从而实现数据的标记。
  2. 嵌入过程:接下来,通过学习标签序列中的时间和维度关系来提取特征。为了捕捉这些关系,提出了一个带有卷积层的网络模型,该模型采用数学分析设计的多输出结构。通过训练,可以从任何任意多维标签中提取特征。

复现:

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

时间序列切分,聚类,打标签

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

嵌入网络定义:

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指标对比可以看到,论文提出的特征提取方法具有一定优势。

在这里插入图片描述

部署方式

Python 3.9.12
Pytorch
以及其他的常用python库
详细复现过程的项目源码、数据和预训练好的模型可从该文章下方链接获取:https://www.aspiringcode.com/content。

  关于 【论文复现】短期电力负荷的详细讲解,七七就先分享到这里了,如果你认为这篇文章对你有帮助,请给七七点个赞吧,如果发现什么问题,欢迎评论区留言!!💕💕

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/461027.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java-I/O框架:FileReader类使用、FileWriter类的使用、字符流复制文件

视频链接:16.19 字符流复制文件_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Tz4y1X7H7?spm_id_from333.788.videopod.episodes&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5&p19 1.FileReader类(文件字符输出流)使用 pac…

快速生成高质量提示词,Image to Prompt 更高效

抖知书老师推荐: 随着 AI 技术的不断发展,视觉信息与语言信息之间的转换变得越来越便捷。在如今的数字化生活中,图像与文字的交互需求愈发旺盛,很多人都希望能轻松将图像内容直接转化为文本描述。今天我们来推荐一款实用的 AI 工…

网安秋招面试

《Java代码审计》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484219&idx1&sn73564e316a4c9794019f15dd6b3ba9f6&chksmc0e47a67f793f371e9f6a4fbc06e7929cb1480b7320fae34c32563307df3a28aca49d1a4addd&scene21#wechat_redirect 《Web安全》h…

Python小游戏14——雷霆战机

首先,你需要确保安装了Pygame库。如果你还没有安装,可以使用pip来安装: bash pip install pygame 代码如下: python import pygame import sys import random # 初始化Pygame pygame.init() # 设置屏幕大小 screen_width 800 scr…

编程之路:蓝桥杯备赛指南

文章目录 一、蓝桥杯的起源与发展二、比赛的目的与意义三、比赛内容与形式四、比赛前的准备五、获奖与激励六、蓝桥杯的影响力七、蓝桥杯比赛注意事项详解使用Dev-C的注意事项 一、蓝桥杯的起源与发展 蓝桥杯全国软件和信息技术专业人才大赛,简称蓝桥杯&#xff0c…

Python3 No module named ‘pymysql‘

在使用python3链接数据库时,总是提示 No module named pymysql 错误,执行pip3 install pymysql后,提示安装成功,但是执行py文件还是提示此错误。 使用python2 执行时,链接数据库正确,百思不得其解 先使用…

SpringBoot调用SOAP接口步骤详解。

1、引入依赖 <dependency><groupId>org.springframework.ws</groupId><artifactId>spring-ws-core</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-oxm</ar…

移远通信闪耀2024香港秋灯展,以丰富的Matter产品及方案推动智能家居产业发展

10月27-30日&#xff0c;2024香港国际秋季灯饰展在香港会议展览中心盛大开展。 作为全球领先的物联网整体解决方案供应商&#xff0c;移远通信再次亮相&#xff0c;并重点展示了旗下支持Matter协议以及亚马逊ACK ( Alexa Connect Kit ) SDK for Matter方案的Wi-Fi模组、低功耗蓝…

【万户软件-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

107. 阴影范围.shadow.camera

上篇文章2.平行光阴影计算讲解过&#xff0c;通过光源的阴影相机属性.shadow.camera,来控制阴影的渲染范围&#xff0c;本节课继续.shadow.camera的讲解。 平行光阴影相机属性.shadow.camera回顾 平行光DirectionalLight的.shadow属性是平行光阴影对象DirectionalLightShadow…

SpringBoot3+SpringSecurity6基于若依系统整合自定义登录流程

SpringBoot3SpringSecurity6基于若依系统整合自定义登录流程 问题背景 在做项目时遇到了要对接统一认证的需求&#xff0c;但是由于框架的不兼容性&#xff08;我们项目是springboot3&#xff0c;jdk17&#xff0c;springsecurity6.1.5&#xff09;等因素&#xff0c;不得不使…

如何解决品牌商和经销商对接的难题

本文分享知名啤酒商大品牌公司如何和经销商的数据进行对接 某啤酒商业务场景&#xff1a;品牌商例如某啤酒商需要推广自己的订货商城助力全国的各大经销商提高营销竞争力 如何解决核心问题之一&#xff1a;商城打通ERP&#xff1f; 根据调研&#xff0c;经销商ERP系统分布情况&…

书生-第四期闯关:完成SSH连接与端口映射并运行hello_world.py

端口映射完成后&#xff0c;访问127.0.0.1&#xff1a;7860成功展示如下界面&#xff1a; 书生浦语大模型实战营 项目地址&#xff1a;https://github.com/InternLM/Tutorial/

ValueError: Object arrays cannot be loaded when allow_pickle=False

文章目录 问题解决方法1&#xff1a;allow_pickleTrue解决方法2&#xff1a;降低numpy版本错误原因&#xff1a;python和numpy版本不兼容 问题 Traceback (most recent call last): File “D:\project\test_st\retrieval\read_npy.py”, line 4, in data np.load(‘mosi0__le…

聆听用户声音的3个方法,挖掘客户真实潜在需求

聆听用户反馈&#xff0c;去挖掘用户真实需求的重要性是企业非常重要的意向工作之一&#xff0c;因为它直接关联到企业的产品开发、市场定位、客户满意度以及最终的商业成果。了解并满足用户的真实需求可以帮助企业创造更有价值的产品和服务&#xff0c;提升用户体验&#xff0…

docker离线安装达梦数据库

文章目录 下载达梦数据库docker镜像上传DM8镜像文件将DM8镜像导入到本地docker镜像仓库中查看本地docker镜像仓库是否存在DM8镜像带参数启动DM8docker启动DM8默认用户名/密码 下载达梦数据库docker镜像 达梦数据库官网 https://www.dameng.com/ 点击下载中心&#xff0c;选择D…

产品宣传册制作成电子产品宣传册用什么软件?

​随着科技的飞速发展&#xff0c;电子产品已经渗透到我们生活的方方面面&#xff0c;电子宣传册作为一种新兴的传播媒介&#xff0c;受到企业的青睐。将传统的纸质产品宣传册制作成电子宣传册&#xff0c;不仅能够降低成本、提高传播效率&#xff0c;还能更好地满足消费者的阅…

linux之网络子系统- TCP连接建立过程 三次握手四次挥手

一、相关实际问题 为什么服务端程序都需要先listen一下半连接队列和全连接队列长度如何确定“Cannot assign requested address”这个报错是怎么回事一个客户端端口可以同时用在两条连接上吗服务端半/全连接队列满了会怎么样新连接的soket内核对象是什么时候建立的建立一条TCP…

[JAVAEE] 多线程的案例(四) - 定时器

目录 一. 什么是定时器? 二. java中的定时器类 三. 定时器的简单使用. 四. 模拟实现定时器 4.1 实现 MyTimerTask 4.2 实现 MyTimer 一. 什么是定时器? 定时器相当于闹钟, 时间到了就执行一些逻辑. 二. java中的定时器类 使用Timer类实例化一个定时器对象. Timer类中的…

Java调用chatgpt

目前openai的chatgpt在国内使用有一定难度&#xff0c;不过国内的大模型在大部分情况下已经不弱于chatgpt&#xff0c;而且还更便宜&#xff0c;又能解决国内最敏感的内容安全问题。本文后续以spring ai调用国内chatgpt厂商实现为例&#xff0c;讲解怎么构建一个java调用chatgp…