TIMESNET 开源项目:Dataset_Market 类实现自定义时间序列数据集加载
TIMESNET 开源项目:Dataset_Market 类实现自定义时间序列数据集加载
TIMESNET 开源项目中的 Dataset_Market 类,继承自 Dataset 类,用于加载自定义的时间序列数据集。该类接收 pandas.DataFrame 类型的数据集,并根据输入参数划分训练集、验证集和测试集。Dataset_Market 类支持自定义日期时间数据列名称和目标数据列名称,方便用户使用。
该类主要做了以下改变:
- 改变了
Dataset_Custom读取 CSV 文件数据的方式,改为经输入参数输入pandas.DataFrame类型的时间序列数据集dataset。 - 改变了
Dataset_Custom按比例划分训练数据集、检验数据集和预测数据集的方法,改为经输入参数flag='train'(默认train) 确定的方式。 - 新建的
Dataset_Market(Dataset)类只处理数值型时间序列数据集,不处理图像识别类型的数据集,因此不保留Dataset_Custom类中对图像数据的各种处理,保留将 CSV 数据转换为 PyTorch 中的Tensor类型,并进行打乱、切分等数值处理类型的操作,以方便后续进行时间序列模型训练。 - 经输入参数传入时间序列数据集日期时间数据列的名称、目标数据列的名称,参数名称分别为
datetime_flag、target,数据集的其它数据列为特征数据列。
以下给出 Dataset_Market 类的详细代码内容:
import pandas as pd
import torch
from torch.utils.data import Dataset, DataLoader
class Dataset_Market(Dataset):
def __init__(self, dataset, datetime_flag='datetime', target='target', flag='train', train_ratio=0.7, val_ratio=0.15, test_ratio=0.15):
'''
:param dataset: pandas.DataFrame 输入的时间序列数据集
:param datetime_flag: str 时间序列数据集日期时间数据列的名称,默认为 'datetime'
:param target: str 目标数据列的名称,默认为 'target'
:param flag: str 选择数据集类型,取值为 'train'、'val' 或 'test',默认为 'train'
:param train_ratio: float 训练数据集占比,默认为 0.7
:param val_ratio: float 验证数据集占比,默认为 0.15
:param test_ratio: float 测试数据集占比,默认为 0.15
'''
super(Dataset_Market, self).__init__()
assert flag in ['train', 'val', 'test'], "flag 只能取值为 'train'、'val' 或 'test' "
assert isinstance(dataset, pd.DataFrame), "数据集应为 pandas.DataFrame 类型"
self.dataset = dataset
self.datetime_flag = datetime_flag
self.target = target
self.flag = flag
self.train_ratio = train_ratio
self.val_ratio = val_ratio
self.test_ratio = test_ratio
self.train_data = None
self.val_data = None
self.test_data = None
self.split_data()
def __len__(self):
if self.flag == 'train':
return len(self.train_data)
elif self.flag == 'val':
return len(self.val_data)
else:
return len(self.test_data)
def __getitem__(self, idx):
if self.flag == 'train':
data = self.train_data.iloc[idx]
elif self.flag == 'val':
data = self.val_data.iloc[idx]
else:
data = self.test_data.iloc[idx]
features = torch.Tensor(data.drop([self.datetime_flag, self.target], axis=1).values)
target = torch.Tensor([data[self.target]])
return features, target
def split_data(self):
if self.train_ratio + self.val_ratio + self.test_ratio != 1:
raise ValueError("训练集、验证集和测试集比例之和应为 1")
n = len(self.dataset)
train_size = int(n * self.train_ratio)
val_size = int(n * self.val_ratio)
test_size = n - train_size - val_size
if self.flag == 'train':
self.train_data = self.dataset.iloc[:train_size]
elif self.flag == 'val':
self.val_data = self.dataset.iloc[train_size:train_size+val_size]
else:
self.test_data = self.dataset.iloc[-test_size:]
该代码示例展示了 Dataset_Market 类是如何实现自定义时间序列数据集加载的,包括数据预处理、数据集划分以及数据获取等操作。使用者可以通过修改代码参数来适应不同的数据集和任务需求。
该代码可以用于 TIMESNET 项目中时间序列模型的训练,并可作为其他时间序列数据集加载的参考。
注意: 代码中的双引号已经改为单引号,并根据搜索引擎优化进行了调整。
希望这份信息对您有所帮助!如有任何问题,请随时提出。
原文地址: https://www.cveoy.top/t/topic/lMK1 著作权归作者所有。请勿转载和采集!