TIMESNET 开源项目:Dataset_Market 类实现自定义时间序列数据集加载

TIMESNET 开源项目中的 Dataset_Market 类,继承自 Dataset 类,用于加载自定义的时间序列数据集。该类接收 pandas.DataFrame 类型的数据集,并根据输入参数划分训练集、验证集和测试集。Dataset_Market 类支持自定义日期时间数据列名称和目标数据列名称,方便用户使用。

该类主要做了以下改变:

  1. 改变了 Dataset_Custom 读取 CSV 文件数据的方式,改为经输入参数输入 pandas.DataFrame 类型的时间序列数据集 dataset
  2. 改变了 Dataset_Custom 按比例划分训练数据集、检验数据集和预测数据集的方法,改为经输入参数 flag='train' (默认 train) 确定的方式。
  3. 新建的 Dataset_Market(Dataset) 类只处理数值型时间序列数据集,不处理图像识别类型的数据集,因此不保留 Dataset_Custom 类中对图像数据的各种处理,保留将 CSV 数据转换为 PyTorch 中的 Tensor 类型,并进行打乱、切分等数值处理类型的操作,以方便后续进行时间序列模型训练。
  4. 经输入参数传入时间序列数据集日期时间数据列的名称、目标数据列的名称,参数名称分别为 datetime_flagtarget,数据集的其它数据列为特征数据列。

以下给出 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 项目中时间序列模型的训练,并可作为其他时间序列数据集加载的参考。

注意: 代码中的双引号已经改为单引号,并根据搜索引擎优化进行了调整。

希望这份信息对您有所帮助!如有任何问题,请随时提出。

TIMESNET 开源项目:Dataset_Market 类实现自定义时间序列数据集加载

原文地址: https://www.cveoy.top/t/topic/lMK1 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录