Pytorch时序数据集制作

1.制作时序数据集,并划分数据集

	#参数配置
	class Config():
	    data_path = '../data/wind_dataset.csv'
	    timestep = 20  # 时间步长,就是利用多少时间窗口
	    batch_size = 32  # 批次大小
	    feature_size = 8  # 每个步长对应的特征数量,这里只使用1维,每天的风速
	    hidden_size = 256  # 隐层大小
	    output_size = 1  # 由于是单输出任务,最终输出层大小为1,预测未来1天风速
	    num_layers = 2  # lstm的层数
	    epochs = 10 # 迭代轮数
	    best_loss = 0 # 记录损失
	    learning_rate = 0.0003 # 学习率
	    model_name = 'lstm' # 模型名称
	    save_path = './{}.pth'.format(model_name) # 最优模型保存路径
	
	config = Config()
	def split_data(data, timestep, feature_size):
	    dataX = []  # 保存X
	    dataY = []  # 保存Y
	
	    # 将整个窗口的数据保存到X中,将未来一天保存到Y中
	    for index in range(len(data) - timestep):
	        dataX.append(data[index: index + timestep])
	        dataY.append(data[index + timestep][0])
	
	    dataX = np.array(dataX)
	    dataY = np.array(dataY)
	
	    # 获取训练集大小
	    train_size = int(np.round(0.8 * dataX.shape[0]))
	
	    # 划分训练集、测试集
	    x_train = dataX[: train_size, :].reshape(-1, timestep, feature_size)
	    y_train = dataY[: train_size].reshape(-1, 1)
	
	    x_test = dataX[train_size:, :].reshape(-1, timestep, feature_size)
	    y_test = dataY[train_size:].reshape(-1, 1)
	
	    return [x_train, y_train, x_test, y_test]
	    
	x_train, y_train, x_test, y_test = split_data(data, config.timestep, config.feature_size)

训练集有三个维度,即 [样本数,时间步,特征维度],假设训练集的维度为[4494,20,8] ,样本数就不用多说了,时间步就是利用过去多长时间来预测未来的数据,如果我们设置为30,那就是基于过去30天的样本数据来预测未来1天的数据,特征维度为8,包含温度、风速、降水等特征。

2.数据归一化

数据的 归一化和标准化 是特征缩放(feature scaling)的方法,是数据预处理的关键步骤。不同评价指标往往具有不同的量纲和量纲单位,这样的情况会影响到数据分析的结果,为了消除指标之间的量纲影响,需要进行数据归一化/标准化处理,以解决数据指标之间的可比性。原始数据经过数据归一化/标准化处理后,各指标处于同一数量级,适合进行综合对比评价。

常见的归一化方式有: Min-Max、 Z-Score、 L2范数归一化 等等,常用的是 MIn-Max 归一化,他会将所有的数据缩放到0 -1 区间,对于该操作可以借助sklearn 的 MinMaxScaler 实现,代码如下:

scaler_model = MinMaxScaler()
data = scaler_model.fit_transform(np.array(df))
scaler.fit_transform(np.array(df['WIND']).reshape(-1, 1))

3.数据加载器

# 4.将数据转为tensor
x_train_tensor = torch.from_numpy(x_train).to(torch.float32)
y_train_tensor = torch.from_numpy(y_train).to(torch.float32)
x_test_tensor = torch.from_numpy(x_test).to(torch.float32)
y_test_tensor = torch.from_numpy(y_test).to(torch.float32)

# 5.形成训练数据集
train_data = TensorDataset(x_train_tensor, y_train_tensor)
test_data = TensorDataset(x_test_tensor, y_test_tensor)

# 6.将数据加载成迭代器
train_loader = torch.utils.data.DataLoader(train_data,
                                           config.batch_size,
                                           False)

test_loader = torch.utils.data.DataLoader(test_data,
                                          config.batch_size,
                                          False)

这里有两个比较陌生的函数 TensorDataset 和 torch.utils.data.DataLoader,我们分别看一下两个函数的介绍

(1)torch.utils.data.TensorDataset 函数

以下是对 PyTorch 1.9.0 版本中 torch.utils.data.TensorDataset 函数的所有参数的官方解释内容的翻译:

参数默认值描述
tensors无默认值数据集的张量列表,每个张量的第一个维度应该相同,表示数据集中的样本数量

以下是对 PyTorch 1.9.0 版本中 torch.utils.data.TensorDataset 函数的所有属性的官方解释内容的翻译:

属性类型描述
tensors张量列表数据集的张量列表

以下是对 PyTorch 1.9.0 版本中 torch.utils.data.TensorDataset 函数的所有方法的官方解释内容的翻译:

方法方法描述参数描述返回值
__getitem__(index)获取数据集中给定索引处的样本index:要获取的样本的索引返回一个元组,其中第一个元素是数据样本的张量,第二个元素是对应的标签
__len__()获取数据集中的样本总数无参数样本总数

注:torch.utils.data.TensorDataset 是 PyTorch 中的一个简单的数据集类,它将多个张量作为输入,并将它们的第一个维度视为样本数量。因此,TensorDataset__getitem__() 方法返回一个元组,其中第一个元素是从每个输入张量中选择的索引处的数据样本的张量,第二个元素是一个表示样本标签的张量。如果输入的张量列表只有一个,则返回的元组中只有一个元素。

(2)torch.utils.data.DataLoader函数

以下是对 PyTorch 1.9.0 版本中 torch.utils.data.DataLoader 函数的所有参数的官方解释内容的翻译:

参数默认值描述
dataset无默认值加载数据的数据集
batch_size1每个批次的样本数量
shuffleFalse是否在每个时期开始时重新打乱数据
sampler无默认值定义从数据集中提取样本的策略
batch_sampler无默认值sampler 相同,但返回批次的索引而不是单个样本的索引
num_workers0加载数据的子进程数量
collate_fn默认为 None合并样本列表以形成一个批次的函数
pin_memoryFalse是否将数据加载到 CUDA 固定内存中
drop_lastFalse如果数据集大小不能被批次大小整除,则是否删除最后一个不完整的批次

以下是对 PyTorch 1.9.0 版本中 torch.utils.data.DataLoader 函数的所有属性的官方解释内容的翻译:

属性类型描述
dataset数据集加载数据的数据集
batch_size整数每个批次的样本数量
num_workers整数加载数据的子进程数量
collate_fn函数合并样本列表以形成一个批次的函数
pin_memory布尔值是否将数据加载到 CUDA 固定内存中
drop_last布尔值如果数据集大小不能被批次大小整除,则是否删除最后一个不完整的批次

以下是对 PyTorch 1.9.0 版本中 torch.utils.data.DataLoader 函数的所有方法的官方解释内容的翻译:

方法方法描述参数描述返回值
__iter__()返回一个可迭代的数据加载器对象无参数返回一个可以迭代的数据加载器对象,可用于遍历数据集中的所有批次
__len__()获取数据集中的批次总数无参数数据集中的批次总数

注:torch.utils.data.DataLoader 是 PyTorch 中的一个数据加载器类,它可以加载和转换数据集,并生成数据批次以供模型训练。因此,DataLoader 的参数包括数据集、批次大小、是否重排和数据加载的子进程数量等等。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hailey的算法学习笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值