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

作者主页: 七七的个人主页
文章收录专栏: 论文复现
欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖
短期电力负荷
- 论文发表
- 问题背景
- 一. 基本问题
- 二. 本论文发现的问题
- 对于论文发现问题的解决方案:
- 复现:
- 一. 多维特征提取的提取框架:
- 二. 论文中进行性能测试的MultiTag2Vec-STLF模型:
- 三. 与整数编码(IE)的特征处理方法进行对比
- 部署方式
本文所涉及所有资源均在这里可获取。
论文发表
- 来自《IEEE Transactions on Smart Grid》2022年7月的13卷第4期,《IEEE Transactions on Smart Grid》在中科院升级版中,大类工程技术位于1区,小类工程:电子与电气位于1区,非综述类期刊。
- 作者包括IEEE会员Nakyoung Kim、IEEE学生会员Hyunseo Park、IEEE高级会员Joohyung Lee,以及IEEE高级会员Jun Kyun Choi。
- 链接地址。
问题背景
一. 基本问题
短期电力负荷预测(STLF),即对未来几小时到几周的电力负荷进行准确预测。
二. 本论文发现的问题
在电力负荷预测中,由于数据的高维性和波动性,传统的特征提取方法往往难以捕捉到负荷数据中的复杂模式和关系。
对于论文发现问题的解决方案:

本论文通过提出一个名为MultiTag2Vec的特征提取框架来解决短期电力负荷预测(STLF)中的特征工程问题。该框架包括两个主要过程:标记(tagging)和嵌入(embedding)。
- 标记过程:首先,通过从高维时间序列数据中提取关键信息,将电气负荷数据转换成紧凑形式。这一步通过聚类子序列来发现重复出现的模式,并为每个模式分配唯一的标签,从而实现数据的标记。
- 嵌入过程:接下来,通过学习标签序列中的时间和维度关系来提取特征。为了捕捉这些关系,提出了一个带有卷积层的网络模型,该模型采用数学分析设计的多输出结构。通过训练,可以从任何任意多维标签中提取特征。
复现:
一. 多维特征提取的提取框架:
时间序列切分,聚类,打标签
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。
关于 【论文复现】短期电力负荷的详细讲解,七七就先分享到这里了,如果你认为这篇文章对你有帮助,请给七七点个赞吧,如果发现什么问题,欢迎评论区留言!!💕💕
相关文章:
【论文复现】短期电力负荷
作者主页: 七七的个人主页 文章收录专栏: 论文复现 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 短期电力负荷 论文发表问题背景一. 基本问题二. 本论文发现的问题 对于论文发现问题的解决方案:复现…...
pytest脚本常用的执行命令
pytest脚本常用的执行命令 一、一般执行的脚本,执行.py文件整个脚本二、执行.py文件脚本中的一个模块三、执行脚本,执行.py文件整个脚本,或则一个模块,查看对应的日志信息3.1.py文件执行allure的脚本3.2去dos框下去执行对应的脚本…...
OpenCv入门
一.OpenCv简介 1 图像的起源 1.1图像是什么? 图:是物体反射或透射光的分布 像:是人的视觉系统所接受的图在人脑中所形版的印象或认识 1.2模拟图像和数字图像 模拟图像:连续存储的图像 数字图像:分级存储的图像 2 数字…...
超详细的flex教程(面试必考)
引言 为什么存在? Flex 布局的出现是为了解决传统 CSS 布局方式(如浮动布局、定位布局等)在处理复杂布局时的诸多限制和不便。 优势 1. 简化布局 Flex 布局的语法简洁明了,代码更易读。 2. 强大的对齐能力 提供丰富的对齐属…...
C++的输入与输出
一.格式和注意要点 1. #include<iostream>; using namespace std; 标准库定义了4个IO对象,IO(输入输出),以下: cin是一个istream流对象,现在理解为标准输入即可。cout是一个ostream流对象,理解为标准输出即可。…...
上海剧某文化传播有限公司与喜某(上海)网络科技有限公司、上海喜某科技有限公司侵害著作权及不正当竞争纠纷案
上海剧某文化传播有限公司与喜某(上海)网络科技有限公司、上海喜某科技有限公司侵害著作权及不正当竞争纠纷案的详细情况如下: 基本案情: 上海剧某文化传播有限公司(以下简称剧某公司)是电视剧《宸汐缘》的…...
【c++篇】:模拟实现string类--探索字符串操作的底层逻辑
✨感谢您阅读本篇文章,文章内容是个人学习笔记的整理,如果哪里有误的话还请您指正噢✨ ✨ 个人主页:余辉zmh–CSDN博客 ✨文章所属专栏:c篇–CSDN博客 文章目录 前言一.string类的默认成员函数以及深拷贝1.基本框架2.默认成员函数…...
springboot配置logback.xml遇到的几个问题
最近项目用到对日志脱敏,经过研究通过logback实现了对日志脱敏,上篇文章中详细讲解了如果配置。但是还是对logback的配置不太了解。比如springboot怎么加载这个logback.xml的。 首先,默认情况下,logback.xml文件是放在类目录下&am…...
MySQL 5.7与MySQL 8.0对比
一、功能对比 JSON支持 MySQL 5.7:引入了JSON数据类型,允许用户存储和操作JSON格式的数据,这是NoSQL功能的一个重要补充。但相对于MySQL 8.0,其功能和性能较弱。MySQL 8.0:在JSON支持方面进行了重大改进,引…...
【代码随想录Day55】图论Part07
prim 算法精讲 题目链接/文章讲解:代码随想录 import java.util.*;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);// 读取顶点数和边数int vertexCount scanner.nextInt();int edgeCount scanner.nextI…...
软考在即!这些注意事项你提前了解!
11月软考马上就要开始了,但是,还有很多的考生,可能还不知道自己到底应该去了解些什么?本文将详细介绍机考注意事项及系统操作提示,帮助考生们备考无忧。 一、考试入场要求和考场规则 1、入场时间:考生需提…...
CMake知识点
参考: https://zhuanlan.zhihu.com/p/661284252 cmake使用教程(实操版)-CSDN博客 【CMake】CMake从入门到实战系列(二)——实例入手,讲解CMake的基本流程_cmake创建一个可执行目标的过程-CSDN博客 一、…...
git ls-remote
文章目录 1.简介2.格式3.选项4.示例5.小结参考文献 1.简介 git ls-remote 是一个 Git 命令,用于列出远程 Git 仓库的引用(refs),包括分支、标签等。 这个命令非常有用,可以帮助你查看远程仓库中可用的分支和标签&…...
低代码平台如何通过AI赋能,实现更智能的业务自动化?
引言 随着数字化转型的加速推进,企业在日常运营中面临的业务复杂性与日俱增。如何快速响应市场需求,优化流程,并降低开发成本,成为各行业共同关注的核心问题。低代码平台作为一种能够快速构建应用程序的工具,因其可视化…...
计算疫情扩散时间
该专栏题目包含两部分: 100 分值部分题目 200 分值部分题目 所有题目都会陆续更新,订阅防丢失 题目描述 在一个地图中(地图由 N ∗ N N*N N∗N 个区域组成),有部分区域被感染病菌。 感染区域每天都会把周围(上下左右)的4个区域感染。 请…...
【Windows11】24H2 内存占用高(截至10月31日)
文章目录 一、问题二、解决三、原因 一、问题 系统版本: 内存只有32GB。 以前只有我在运行数据处理程序的时候内存占用才会很高,日常情况下应该只有40%、50%左右的。 但是24H2,日常情况下内存占用80%以上。 而我只开了很少的应用&#…...
题目:多个字符从两端移动,向中间汇聚
【多个字符从两端移动,向中间汇聚】 char arr1[] "Good Good Study,Day Day Up!" ; char arr2[] "***************************"; 【思路】 首先两字符串中的元素个数要相同,将两串字符分别存放在数组中,那么字符串中…...
前端如何安全存储密钥,防止信息泄露
场景 把公钥硬编码在前端代码文件里,被公司安全检测到了要整改,于是整理几种常见的前端密钥存储方案。 1. 设置环境变量再读取 在打包或部署前端应用时,可以将密钥配置为环境变量,在应用运行时通过环境变量读取密钥。这样可以将密…...
银行电子户分账解决电商行业哪些问题
随着电子商务的快速发展,电商银行电子户分账作为金融科技领域的重要一环,逐渐成为现代金融业务的核心。本文将详细探讨电商银行电子户分账的原理、操作流程、安全措施以及在电子商务中的重要作用。 二、电商银行电子户分账的基本概念 电商银行电子户分…...
Web音乐库:SpringBoot实现的音乐网站
2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…...
利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果