论文辅助笔记:TEMPO 之 dataset.py

0 导入库

import os
import pandas as pd
import torch
from torch.utils.data import Dataset
from .utils import StandardScaler, decompose
from .features import time_features

1 Dataset_ETT_hour

1.1 构造函数

class Dataset_ETT_hour(Dataset):def __init__(self,root_path,flag="train",size=None,features="S",data_path="ETTh1.csv",target="OT",scale=True,inverse=False,timeenc=0,freq="h",cols=None,period=24,):if size == None:self.seq_len = 24 * 4 * 4self.pred_len = 24 * 4else:self.seq_len = size[0]self.pred_len = size[1]#输入sequence和输出sequence的长度assert flag in ["train", "test", "val"]type_map = {"train": 0, "val": 1, "test": 2}self.set_type = type_map[flag]'''指定数据集的用途,可以是 "train"、"test" 或 "val",分别对应训练集、测试集和验证集'''self.features = features#指定数据集包含的特征类型,默认为 "S",表示单一特征self.target = target#指定预测的目标特征self.scale = scale#一个布尔值,用于确定数据是否需要归一化处理self.inverse = inverse#一个布尔值,用于决定是否进行逆变换self.timeenc = timeenc#用于确定是否对时间进行编码【原始模样 or -0.5~0.5区间】self.freq = freq#定义时间序列的频率,如 "h" 表示小时级别的频率self.period = period#定义时间序列的周期,默认为 24self.root_path = root_pathself.data_path = data_pathself.__read_data__()#用于读取并初始化数据集

1.2 __read_data__

def __read_data__(self):self.scaler = StandardScaler()#初始化一个 StandardScaler 对象,用于数据的标准化处理df_raw = pd.read_csv(os.path.join(self.root_path, self.data_path))#读取数据集文件,将其存储为 DataFrame 对象 df_rawborder1s = [0,12 * 30 * 24 - self.seq_len,12 * 30 * 24 + 4 * 30 * 24 - self.seq_len,]#定义了三个区间的起始位置,分别对应训练集、验证集和测试集border2s = [12 * 30 * 24,12 * 30 * 24 + 4 * 30 * 24,12 * 30 * 24 + 8 * 30 * 24,]#定义了每个区间的结束位置border1 = border1s[self.set_type]border2 = border2s[self.set_type]'''通过 self.set_type 确定当前数据集类型并从 border1s 和 border2s 中获取对应的起始和结束位置 border1 和 border2'''if self.features == "M" or self.features == "MS":cols_data = df_raw.columns[1:]df_data = df_raw[cols_data]elif self.features == "S":df_data = df_raw[[self.target]]'''选择特征数据:多特征 "M" 或 "MS":选择所有数据列,除去日期列。单一特征 "S":只选择目标特征列(由 self.target 指定)。'''if self.scale:train_data = df_data[border1s[0] : border2s[0]]self.scaler.fit(train_data.values)data = self.scaler.transform(df_data.values)else:data = df_data.values'''如果 self.scale 为 True,则执行数据归一化:train_data:选择训练集的数据,用于拟合 self.scaler。data:对整个 df_data 进行转换。'''df_stamp = df_raw[["date"]][border1:border2]df_stamp["date"] = pd.to_datetime(df_stamp.date)data_stamp = time_features(df_stamp, timeenc=self.timeenc, freq=self.freq)'''时间特征处理:提取日期列 df_stamp,并将其转换为时间特征:pd.to_datetime:将日期转换为 datetime 对象。time_features:用于生成时间特征。'''self.data_x = data[border1:border2]if self.inverse:self.data_y = df_data.values[border1:border2]else:self.data_y = data[border1:border2]self.data_stamp = data_stamp'''将转换后的数据和时间特征赋值给 self.data_x、self.data_y 和 self.data_stamp:self.data_x 取 data 中的对应区间数据。self.data_y 根据 self.inverse 决定是从 data 还是 df_data 中获取。self.data_stamp 取生成的时间特征。'''

1.3 __getitem__

def __getitem__(self, index):s_begin = index#设置序列的起始点s_end = s_begin + self.seq_len#计算序列的结束点r_begin = s_end#设置预测序列的起始点r_end = r_begin + self.pred_len#计算预测序列的结束点seq_x = self.data_x[s_begin:s_end]#从 data_x 中提取序列部分seq_y = self.data_y[r_begin:r_end]# 从 data_y 中提取预测部分[ground-truth]x = torch.tensor(seq_x, dtype=torch.float).transpose(1, 0)  # [1, seq_len]y = torch.tensor(seq_y, dtype=torch.float).transpose(1, 0)  # [1, pred_len](trend, seasonal, residual) = decompose(x, period=self.period)#对序列 x 进行时间序列分解,返回趋势、季节性和残差三部分components = torch.cat((trend, seasonal, residual), dim=0)  # [3, seq_len]#将分解后的三部分按 0 维(纵向)拼接,形成一个包含三种特征的张量return components, y

1.3__len__

    def __len__(self):return len(self.data_x) - self.seq_len - self.pred_len + 1

1.4  inverse_transform

将数据进行逆转换,还原到原始尺度

    def inverse_transform(self, data):return self.scaler.inverse_transform(data)

2 Dataset_ETT_minute

基本上和hour 的一样,几个地方不一样:

  • __init__
    • data_path="ETTm1.csv",
    • freq="t",
    • period: int = 60,
  • __read_data__
    • border1s = [0,12 * 30 * 24 * 4 - self.seq_len,12 * 30 * 24 * 4 + 4 * 30 * 24 * 4 - self.seq_len,]
      border2s = [12 * 30 * 24 * 4,12 * 30 * 24 * 4 + 4 * 30 * 24 * 4,12 * 30 * 24 * 4 + 8 * 30 * 24 * 4,]

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

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

相关文章

STM32中断系统详解

系列文章目录 STM32单片机系列专栏 C语言术语和结构总结专栏 文章目录 1. 中断基本概念 2. STM32中断 3. NVIC的基本组件 3.1 NVIC的基本组件 3.2 NVIC的优先级 4. EXTI外部中断 4.1 基本概念 4.2 基本结构 5. AFIO 1. 中断基本概念 中断(Interrupt&…

专注 APT 攻击与防御—工具介绍Veil-Evasion

专注 APT 攻击与防御 - Micro8 系列教程项目地址:https://github.com/Veil-Framework/Veil-Evasion 1、Veil-Evasion Veil-Evasion 是与 Metasploit 生成相兼容的 Payload 的一款辅助框架,并可以绕过大多数的杀软。 Veil-Evasion 并没有集成在kali&am…

Java零基础入门到精通_Day 9

1.ArrayList 编程的时候如果要存储多个数据,使用长度固定的数组存储格式,不一定满足我们的需求,更适应不了变化的需求,那么,此时该如何选择呢? 集 合 集合类的特点:提供一种存储空间可变的存储模型,存储的…

微调Mistral 7B以实现命名实体识别 (NER)

文章来源:fine-tuning-mistral-7b-for-named-entity-recognition-ner 2024 年 4 月 19 日 在自然语言处理(NLP)领域,命名实体识别(NER)被认为是一项关键任务,应用范围广泛,包括信息…

WPF基础应用

WPF参考原文 MVVM介绍 1.常用布局控件 1.1 布局控件 WPF(Windows Presentation Foundation)提供了多种布局容器来帮助开发者设计用户界面,以下是一些常用的布局: Grid: Grid是最常用的布局容器之一,它允许你通过定…

ArcGIS小技巧—基于点数据的密度分析(含练习数据)

关于空间点数据的密度分析,Arcgis Map中提供了基础的点密度分析和核密度分析。核密度分析可以通过手动设置搜索半径,调整密度分布的合理性。 但有时由于实际工作的需要,我们需要对研究范围做特定划分,比如根据格网规则划分做密度…

计算机毕业设计hadoop+spark+hive知识图谱音乐推荐系统 音乐数据分析可视化大屏 音乐爬虫 LSTM情感分析 大数据毕设 深度学习 机器学习

黄河科技学院本科毕业设计 任务书 工 学部 大数据与计算机应用 科教中心 计算机科学与技术 专业 2018 级普本1/专升本1班 学号 学生 指导教师 毕业设计题目 基于实时音乐数据挖掘的个性化推荐系统设计与优化 毕业设计工作内容与基本…

Arcgis 数据分类+批量制作

1、计算统计数据 2、更改符号系统–做分类 右击图层属性–符号系统–已分类–分类 改为手动—设置分类 完成

PHP 日期和时间 Date()函数 获取当前时间

目录 PHP Date() 函数获取日期获取当前时间下面是常用于时间的字符: PHP Date() 函数 PHP Date() 函数把时间戳格式化为更易读的日期和时间。 获取日期 date() 函数的格式参数是必需的,它们规定如何格式化日期或时间。 下面列出了一些常用于日期的字…

vscode 插件 code settings sync(配置云端同步)

vscode 插件 code settings sync(配置云端同步) 电脑A和B,vscode配置都在A电脑上,此时你想要将A电脑的vscode配置同步到B电脑的vscode中 第一步:A电脑和B电脑都需要在VSCode中安装下图插件 code settings sync 第二步&…

钉钉手机端调试前端H5项目流程

此流程以Vue项目为例 一、操作步骤 在根目录下 vue.config.js 文件中将 devServer.host 设置为 0.0.0.0 // vue.config.js module.exports {devServer: {host: 0.0.0.0,...},...}本地启动项目,获取 Network App running at:- Local: http://localhost:8080/ -…

吴恩达深度学习笔记:深度学习的 实践层面 (Practical aspects of Deep Learning)1.9-1.10

目录 第二门课: 改善深层神经网络:超参数调试、正 则 化 以 及 优 化 (Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization)第一周:深度学习的 实践层面 (Practical aspects of Deep Learning)1.9 归一…

msmpi 高性能并行计算 移植并行细胞自动机报错

报错情况如图 代码来源 元胞自动机生命游戏C语言并行实现 – OmegaXYZ 稍微修改,因为相对路径在 msmpi 10.1.1 中失效 Microsoft Windows [版本 10.0.22000.2538] (c) Microsoft Corporation。保留所有权利。C:\Users\ASUS>mpiexec -n 9 "C:\Users\ASUS\D…

MacBook Pro 原生安装 Ubuntu 24.04 ARM 版

趁着休假整理家里闲置的设备,看到了一台许久不用的 M2 芯片的 MacBook Pro,想着或许应该把它改造成 ARMv64 的 CI/CD 构建机,于是就有了这篇文章。 本篇文章适用于 M1、M2 全系列的设备,包括:MacBook Air、MacBook Pr…

JMeter性能压测脚本录制

第一步:电脑打开控制面板设置代理服务器 第二步:jmeter的测试计划添加一个HTTP(S)脚本记录器 在脚本记录器里配置好信息,然后保存为脚本文件(.*表示限定) 此方框内容为项目地址(可改…

单链表经典算法

一,移除链表元素 思路一 遍历数组,如果遇到链表中的元素等于val的节点就执行删除操作 typedef struct ListNode ListNode;struct ListNode* removeElements(struct ListNode* head, int val) {if(headNULL){return NULL;} ListNode*pnewhead(ListNode*)m…

大数据之数据仓库技术:ETL工具和Kettle简介

大数据之数据仓库技术:ETL工具和Kettle简介 ETL简介ETL工具和KettleKettle家族 Kettle资源KettlePack 任务调度工具 ETL简介 ETL(Extract-Transform-Load): 在大数据技术领域内,用来描述将数据从 来源端 经过 抽取(extract), 转换(transform), 加载(loa…

数据结构与算法——栈和队列

栈和队列 //1.栈 #include <stdio.h> #include <stdlib.h>// 定义栈的结构体 typedef struct Stack {int capacity; // 栈的容量int top; // 栈顶指针&#xff0c;表示当前栈顶元素的位置int* array; // 存储栈元素的数组 } Stack;// 创建一个新的栈 Stack…

【Vue】结合ElementUI实现简单数据请求和页面跳转功能

一、准备工作 1、创建一个Vue-cli程序 之前的博客有。各位看官姥爷&#xff0c;可以自查。 2、安装ElementUI 在创建Vue-cli程序的过程中&#xff0c;需要在控制台执行以下指令&#xff1a; #安装 element-ui npm i element-ui -S #安装 SASS 加载器 cnpm install sass-loa…

毫米波雷达多人呼吸心跳检测MATLAB仿真

本文基于TI的IWR1642毫米波雷达 2T4R MIMO阵列&#xff0c;通过实际采集数据算法仿真&#xff0c;实现多人呼吸心跳检测。 文章末尾给出了本文的仿真代码。 主要内容包含&#xff1a; &#xff08;1&#xff09;雷达参数设定 &#xff08;2&#xff09;ADC数据导入 &#xff08…